1. 28 8月, 2015 4 次提交
    • X
      revises 877e42e2 · cbe7899f
      Xavier Noria 提交于
      * A string in the example lacked quotes.
      
      * The tests asserted stuff about :last_name, whereas
        test params do not have that key.
      
      * But, the first one passed, why? After hitting my head against
        the wall and doing some obscure rituals realized the new
        #require had an important typo, wanted to iterate over the
        array argument (key), but it ran over its own hash keys
        (method #keys).
      
      * Modified the test to prevent the same typo to happen again.
      
      * The second test assigned to an unused variable safe_params
        that has been therefore removed.
      
      * Grammar of the second test description.
      
      * Since I was on it, reworded both test descriptions.
      cbe7899f
    • G
      [Feature] params.require requires array of params · 877e42e2
      Gaurish Sharma 提交于
      This PR adds ability to accept arrays which allows you to require multiple values in one method. so instead of this:
      
      ```ruby
      params.require(:person).require(:first_name)
      params.require(:person).require(:last_name)
      ```
      
      Here it will be one line for each params, so say if I require 10params, it will be 10lines of repeated code which is not dry. So I have added new method which does this in one line:
      
      ```ruby
      params.require(:person).require([:first_name, :last_name])
      ```
      
      Comments welcome
      877e42e2
    • A
      Revert "this always sets :public to false, so just do that" · bf203e47
      Aaron Patterson 提交于
      This reverts commit cae2b5bb.
      
      I am an idiot.
      bf203e47
    • A
      cae2b5bb
  2. 27 8月, 2015 7 次提交
  3. 26 8月, 2015 3 次提交
  4. 23 8月, 2015 2 次提交
  5. 17 8月, 2015 1 次提交
  6. 12 8月, 2015 1 次提交
  7. 08 8月, 2015 1 次提交
  8. 06 8月, 2015 6 次提交
  9. 30 7月, 2015 1 次提交
    • S
      Decrease string allocations in url_options · 83ee043c
      schneems 提交于
      The request.script_name is dup-d which allocates an extra string. It is most commonly an empty string "". We can save a ton of string allocations by checking first if the string is empty, if so we can use a frozen empty string instead of duplicating an empty string.
      
      This change buys us 35,714 bytes of memory and 893 fewer objects per request.
      83ee043c
  10. 28 7月, 2015 1 次提交
  11. 26 7月, 2015 1 次提交
    • M
      Fix params_wrapper doc [ci skip] · edda07b2
      Mehmet Emin İNAÇ 提交于
      This feature also works with `PUT`, `PATCH` and `DELETE` requests.
      Also developers can add `:url_encoded_form` and `:multipart_form`
      into the `:format` for wrapping url encoded or multipart form data.
      edda07b2
  12. 22 7月, 2015 2 次提交
    • A
      drop conditionals in conversion logic · 5046d517
      Aaron Patterson 提交于
      there is no reason to `convert_hashes_to_parameters` with an assignemt
      flag.  The caller knows whether or not it wants the value assigned.  We
      should just change the uncommon case (not writing to the underlying
      hash) to just call the conversion method and return that value.
      5046d517
    • A
      rearrange logic to use positive branches · c75153d2
      Aaron Patterson 提交于
      only hashes are converted to parameter objects, so lets add a branch for
      them.  This also removes a is_a? test for Parameters so we can be
      abstracted from the class.
      c75153d2
  13. 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
  14. 19 7月, 2015 2 次提交
  15. 18 7月, 2015 7 次提交