1. 19 1月, 2017 1 次提交
  2. 24 12月, 2016 1 次提交
  3. 29 10月, 2016 1 次提交
  4. 14 9月, 2016 1 次提交
  5. 16 8月, 2016 1 次提交
  6. 07 8月, 2016 3 次提交
  7. 18 5月, 2016 1 次提交
  8. 20 4月, 2016 1 次提交
    • J
      Ensure Cache#inspect doesn't block concurrent cache writes · 9918118a
      Jeremy Daer 提交于
      Object#inspect recursively inspects instance variables, exposing all
      internal state, including sensitive internal cache objects. Override
      Cache#inspect to give a high-level summary that never interferes with
      concurrent cache writes.
      9918118a
  9. 01 3月, 2016 1 次提交
  10. 25 2月, 2016 1 次提交
    • G
      Lock down new `ImplicitRender` behavior for 5.0 RC · 73b1efc5
      Godfrey Chan 提交于
      1. Conceptually revert #20276
      
         The feature was implemented for the `responders` gem. In the end,
         they did not need that feature, and have found a better fix (see
         plataformatec/responders#131).
      
         `ImplicitRender` is the place where Rails specifies our default
         policies for the case where the user did not explicitly tell us
         what to render, essentially describing a set of heuristics. If
         the gem (or the user) knows exactly what they want, they could
         just perform the correct `render` to avoid falling through to
         here, as `responders` did (the user called `respond_with`).
      
         Reverting the patch allows us to avoid exploding the complexity
         and defining “the fallback for a fallback” policies.
      
      2. `respond_to` and templates are considered exhaustive enumerations
      
         If the user specified a list of formats/variants in a `respond_to`
         block, anything that is not explicitly included should result
         in an `UnknownFormat` error (which is then caught upstream to
         mean “406 Not Acceptable” by default). This is already how it
         works before this commit.
      
         Same goes for templates – if the user defined a set of templates
         (usually in the file system), that set is now considered exhaustive,
         which means that “missing” templates are considered `UnknownFormat`
         errors (406).
      
      3. To keep API endpoints simple, the implicit render behavior for
         actions with no templates defined at all (regardless of formats,
         locales, variants, etc) are defaulted to “204 No Content”. This
         is a strictly narrower version of the feature landed in #19036 and
         #19377.
      
      4. To avoid confusion when interacting in the browser, these actions
         will raise an `UnknownFormat` error for “interactive” requests
         instead. (The precise definition of “interactive” requests might
         change – the spirit here is to give helpful messages and avoid
         confusions.)
      
      Closes #20666, #23062, #23077, #23564
      
      [Godfrey Chan, Jon Moss, Kasper Timm Hansen, Mike Clark, Matthew Draper]
      73b1efc5
  11. 23 1月, 2016 1 次提交
  12. 24 12月, 2015 1 次提交
  13. 19 9月, 2015 1 次提交
  14. 27 7月, 2015 1 次提交
  15. 20 7月, 2015 1 次提交
    • S
      Freeze string literals when not mutated. · 5bb1d4d2
      schneems 提交于
      I wrote a utility that helps find areas where you could optimize your program using a frozen string instead of a string literal, it's called [let_it_go](https://github.com/schneems/let_it_go). After going through the output and adding `.freeze` I was able to eliminate the creation of 1,114 string objects on EVERY request to [codetriage](codetriage.com). How does this impact execution?
      
      To look at memory:
      
      ```ruby
      require 'get_process_mem'
      
      mem = GetProcessMem.new
      GC.start
      GC.disable
      1_114.times { " " }
      before = mem.mb
      
      after = mem.mb
      GC.enable
      puts "Diff: #{after - before} mb"
      
      ```
      
      Creating 1,114 string objects results in `Diff: 0.03125 mb` of RAM allocated on every request. Or 1mb every 32 requests.
      
      To look at raw speed:
      
      ```ruby
      require 'benchmark/ips'
      
      number_of_objects_reduced = 1_114
      
      Benchmark.ips do |x|
        x.report("freeze")    { number_of_objects_reduced.times { " ".freeze } }
        x.report("no-freeze") { number_of_objects_reduced.times { " " } }
      end
      ```
      
      We get the results
      
      ```
      Calculating -------------------------------------
                    freeze     1.428k i/100ms
                 no-freeze   609.000  i/100ms
      -------------------------------------------------
                    freeze     14.363k (± 8.5%) i/s -     71.400k
                 no-freeze      6.084k (± 8.1%) i/s -     30.450k
      ```
      
      Now we can do some maths:
      
      ```ruby
      ips = 6_226k # iterations / 1 second
      call_time_before = 1.0 / ips # seconds per iteration 
      
      ips = 15_254 # iterations / 1 second
      call_time_after = 1.0 / ips # seconds per iteration 
      
      diff = call_time_before - call_time_after
      
      number_of_objects_reduced * diff * 100
      
      # => 0.4530373333993266 miliseconds saved per request
      ```
      
      So we're shaving off 1 second of execution time for every 220 requests. 
      
      Is this going to be an insane speed boost to any Rails app: nope. Should we merge it: yep. 
      
      p.s. If you know of a method call that doesn't modify a string input such as [String#gsub](https://github.com/schneems/let_it_go/blob/b0e2da69f0cca87ab581022baa43291cdf48638c/lib/let_it_go/core_ext/string.rb#L37) please [give me a pull request to the appropriate file](https://github.com/schneems/let_it_go/blob/b0e2da69f0cca87ab581022baa43291cdf48638c/lib/let_it_go/core_ext/string.rb#L37), or open an issue in LetItGo so we can track and freeze more strings. 
      
      Keep those strings Frozen
      
      ![](https://www.dropbox.com/s/z4dj9fdsv213r4v/let-it-go.gif?dl=1)
      5bb1d4d2
  16. 21 6月, 2015 2 次提交
  17. 05 1月, 2015 1 次提交
  18. 04 1月, 2015 2 次提交
  19. 29 11月, 2014 1 次提交
  20. 05 11月, 2014 1 次提交
    • J
      Using the real resolver pattern in docs · d692b829
      Jack Danger Canty 提交于
      If someone copies the docs into their app they'll find it simply doesn't
      work because the locale pattern doesn't have the same logic. This makes
      the doc examples work exactly as written.
      
      [ci skip]
      d692b829
  21. 29 10月, 2014 1 次提交
    • X
      let's warn with heredocs · b3bfa361
      Xavier Noria 提交于
      The current style for warning messages without newlines uses
      concatenation of string literals with manual trailing spaces
      where needed.
      
      Heredocs have better readability, and with `squish` we can still
      produce a single line.
      
      This is a similar use case to the one that motivated defining
      `strip_heredoc`, heredocs are super clean.
      b3bfa361
  22. 27 9月, 2014 1 次提交
  23. 19 5月, 2014 1 次提交
    • A
      Feature detect based on Ruby version. · 239f5606
      Aaron Patterson 提交于
      I didn't want to do this, FNM_EXTGLOB is defined on 2.1.x, but Dir.glob
      returns the wrong value on Ruby less than 2.2.0.  Checking for a
      case-insensitive FS seems too hard, so just check Ruby version  Checking
      for a case-insensitive FS seems too hard, so just check Ruby version.
      239f5606
  24. 11 5月, 2014 1 次提交
  25. 10 5月, 2014 1 次提交
  26. 26 4月, 2014 1 次提交
  27. 14 3月, 2014 1 次提交
  28. 04 12月, 2013 1 次提交
    • Ł
      Action Pack Variants · 2d3a6a0c
      Łukasz Strzałkowski 提交于
      By default, variants in the templates will be picked up if a variant is set
      and there's a match. The format will be:
      
        app/views/projects/show.html.erb
        app/views/projects/show.html+tablet.erb
        app/views/projects/show.html+phone.erb
      
      If request.variant = :tablet is set, we'll automatically be rendering the
      html+tablet template.
      
      In the controller, we can also tailer to the variants with this syntax:
      
        class ProjectsController < ActionController::Base
          def show
            respond_to do |format|
              format.html do |html|
                @stars = @project.stars
      
                html.tablet { @notifications = @project.notifications }
                html.phone  { @chat_heads    = @project.chat_heads }
              end
      
              format.js
              format.atom
            end
          end
        end
      
      The variant itself is nil by default, but can be set in before filters, like
      so:
      
        class ApplicationController < ActionController::Base
          before_action do
            if request.user_agent =~ /iPad/
              request.variant = :tablet
            end
          end
        end
      
      This is modeled loosely on custom mime types, but it's specifically not
      intended to be used together. If you're going to make a custom mime type,
      you don't need a variant. Variants are for variations on a single mime
      types.
      2d3a6a0c
  29. 03 12月, 2013 1 次提交
  30. 20 6月, 2013 1 次提交
  31. 12 4月, 2013 1 次提交
  32. 26 3月, 2013 1 次提交
  33. 06 3月, 2013 1 次提交
  34. 06 1月, 2013 1 次提交
  35. 14 12月, 2012 1 次提交
    • T
      Replace some global Hash usages with the new thread safe cache. · 45448a57
      thedarkone 提交于
      Summary of the changes:
       * Add thread_safe gem.
       * Use thread safe cache for digestor caching.
       * Replace manual synchronization with ThreadSafe::Cache in Relation::Delegation.
       * Replace @attribute_method_matchers_cache Hash with ThreadSafe::Cache.
       * Use TS::Cache to avoid the synchronisation overhead on listener retrieval.
       * Replace synchronisation with TS::Cache usage.
       * Use a preallocated array for performance/memory reasons.
       * Update the controllers cache to the new AS::Dependencies::ClassCache API.
         The original @controllers cache no longer makes much sense after @tenderlove's
         changes in 7b6bfe84 and f345e238.
       * Use TS::Cache in the connection pool to avoid locking overhead.
       * Use TS::Cache in ConnectionHandler.
      45448a57
  36. 30 10月, 2012 1 次提交