Permalink
Commits on Nov 26, 2012
  1. Length validation handles correctly nil. Fix #7180

    When nil or empty string are not allowed, they are not valid.
    committed Aug 7, 2012
  2. Merge pull request #8316 from roberto/assert_template_validate_options

    assert_template: validating option keys
    
    It only handles the keys locals, partial, layout and count.
    
        assert_template(foo: "bar") # raises ArgumentError
        assert_template(leiaute: "test") # raises ArgumentError
    carlosantoniodasilva committed Nov 26, 2012
  3. Merge pull request #8317 from latortuga/cache-digest-opt-out

    Add explicit opt-out for fragment cache digesting
    dhh committed Nov 26, 2012
  4. Add explicit opt-out for fragment cache digesting

    This add support for sending an explicit opt-out of the "Russian-doll"
    cache digest feature on a case-by-case basis. This is useful when cache-
    expiration needs to be performed manually and it would be otherwise
    difficult to know the exact name of a digested cache key.
    
    More information: rails/cache_digests#16
    latortuga committed Nov 26, 2012
  5. Merge pull request #8302 from roberto/assert_template_empty_string

    assert_template("") will now fail no matter whether a template has been rendered or not.
    carlosantoniodasilva committed Nov 26, 2012
Commits on Nov 25, 2012
  1. Merge pull request #8311 from alisdair/dirty-nullable-datetime

    Don't call will_change! for datetime nil->"".
    carlosantoniodasilva committed Nov 25, 2012
  2. Don't call will_change! for datetime nil->"".

    Setting a nil datetime attribute to a blank string should not cause the
    attribute to be dirty.
    
    Fix #8310
    alisdair committed Nov 25, 2012
Commits on Nov 24, 2012
  1. Merge pull request #8306 from senny/documentation_for_hidden_field_id

    Document :hidden_field_id option for fields_for [ci skip]
    carlosantoniodasilva committed Nov 24, 2012
  2. Fix changelog entry about fast_string_to_time fix

    Introduced in 53ca22f.
    Thanks @rochefort. [ci skip]
    carlosantoniodasilva committed Nov 24, 2012
  3. Refector a bit to remove extra slice iteration and splat call

    This yields a small bit of performance improvement when building the
    defaults from constraints, specially considering that it's rather common
    for constraints to be empty.
    
    Also, there's a bit of duplicated code in here that I have to check
    before extracting.
    carlosantoniodasilva committed Nov 24, 2012
  4. Simplify scope options recovery by using merge!

    Instead of iterating again over the options and setting one by one, we
    can just merge the recover hash back to the scope one since all keys
    match.
    carlosantoniodasilva committed Nov 23, 2012
  5. Normalize scope recovering :blocks option name

    Use the same :blocks key in the recover hash to revert the scope options
    later.
    carlosantoniodasilva committed Nov 23, 2012
Commits on Nov 23, 2012
  1. `assert_template` fails with empty string when a template has been re…

    …ndered
    
    For instance, it prevents false positive in this case:
    
        file = nil
        get :index
        assert_template("#{file}")
    roberto committed Nov 23, 2012
Commits on Nov 22, 2012
  1. Merge pull request #8291 from senny/8265_build_with_polymorphic_assoc…

    …iation
    
    prevent mass assignment of polymorphic type when using `build`
    
    Conflicts:
    	activerecord/CHANGELOG.md
    rafaelfranca committed Nov 22, 2012
  2. Merge pull request #8114 from guilleiguaran/use-symbols-in-scope

    Allow setting a symbol as path in scope on routes
    pixeltrix committed Nov 22, 2012
  3. Allow setting a symbol as path in scope on routes

    Was surprising found that this example doesn't work:
    
      scope :api do
        resources :users
      end
    
    and the right form to use it is:
    
      scope 'api' do
        resources :users
      end
    
    I think this should work similary as `namespace` where both are allowed.
    These two are equivalent:
    
      namespace :api do
        resources :users
      end
    
      namespace 'api' do
        resources :user
      end
    guilleiguaran committed Nov 3, 2012
  4. Remove private partial/template renderer methods

    Since now these objects are not cached anymore, there's no need to have
    these private methods, just instantiate each of them in the necessary
    place.
    carlosantoniodasilva committed Nov 20, 2012
  5. Merge branch 'deprecate-calculations-with-block'

    Follow up of the discussion from the original merge commit:
    rails@f9cb645#commitcomment-1414561
    
    We want to avoid people's mistakes with methods like count and sum when
    called with a block, that can easily lead to code performing poorly and
    that could be way better written with a db query.
    
    Please check the discussion there for more background.
    Closes #8268
    carlosantoniodasilva committed Nov 22, 2012
  6. Remove the #sum method from CollectionAssociation

    Since edd94ce, CollectionProxy
    delegates all calculation methods - except count - to the scope,
    which does basically what this method was doing, but since we're
    delegating from the proxy, the association method was never called.
    carlosantoniodasilva committed Nov 19, 2012
  7. Deprecate Relation#sum with a block.

    To perform a sum calculation over the array of elements, use to_a.sum(&block).
    
    Please check the discussion in f9cb645
    for more context.
    carlosantoniodasilva committed Nov 17, 2012
  8. Revert "Yield only one argument instead of splatting."

    This reverts commit f9cb645.
    
    Conflicts:
    	activerecord/CHANGELOG.md
    
    Revert "Allow blocks for count with ActiveRecord::Relation. Document and test that sum allows blocks"
    
    This reverts commit 9cc2bf6.
    
    Conflicts:
    	activerecord/lib/active_record/relation/calculations.rb
    carlosantoniodasilva committed Nov 17, 2012
Commits on Nov 21, 2012
  1. Don't allocate new strings in compiled attribute methods

    This improves memory and performance without having to use symbols which
    present DoS problems. Thanks @headius and @tenderlove for the
    suggestion.
    
    This was originally committed in
    f176501, and then reverted in
    d349490 due to it causing problems in a
    real application. This second attempt should solve that.
    
    Benchmark
    ---------
    
    require 'active_record'
    require 'benchmark/ips'
    
    ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
    
    class Post < ActiveRecord::Base
      connection.create_table :posts, force: true do |t|
        t.string :name
      end
    end
    
    post = Post.create name: 'omg'
    
    Benchmark.ips do |r|
      r.report('Post.new')          { Post.new name: 'omg' }
      r.report('post.name')         { post.name }
      r.report('post.name=')        { post.name = 'omg' }
      r.report('Post.find(1).name') { Post.find(1).name }
    end
    
    Before
    ------
    
    Calculating -------------------------------------
                Post.new      1419 i/100ms
               post.name      7538 i/100ms
              post.name=      3024 i/100ms
       Post.find(1).name       243 i/100ms
    -------------------------------------------------
                Post.new    20637.6 (±12.7%) i/s -     102168 in   5.039578s
               post.name  1167897.7 (±18.2%) i/s -    5186144 in   4.983077s
              post.name=    64305.6 (±9.6%) i/s -     317520 in   4.998720s
       Post.find(1).name     2678.8 (±10.8%) i/s -      13365 in   5.051265s
    
    After
    -----
    
    Calculating -------------------------------------
                Post.new      1431 i/100ms
               post.name      7790 i/100ms
              post.name=      3181 i/100ms
       Post.find(1).name       245 i/100ms
    -------------------------------------------------
                Post.new    21308.8 (±12.2%) i/s -     105894 in   5.053879s
               post.name  1534103.8 (±2.1%) i/s -    7634200 in   4.979405s
              post.name=    67441.0 (±7.5%) i/s -     337186 in   5.037871s
       Post.find(1).name     2681.9 (±10.6%) i/s -      13475 in   5.084511s
    jonleighton committed Oct 12, 2012
  2. Use secure password min cost option in its own tests for a speed up

    Around 0.564359s => 0.092244s speed up in my machine.
    carlosantoniodasilva committed Nov 20, 2012