aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | fix typo in in define_model_callbacks comment [ci skip]Ryan Selk2014-10-031-1/+1
| | | |
* | | | add notes for `define_model_callbacks` [ci skip]Kuldeep Aggarwal2014-10-031-0/+3
| | | |
* | | | Disallow appended newlines when parsing as integerMichael Genereux2014-10-021-1/+1
| |_|/ |/| | | | | \Z allows appended newlines where \z does not.
* | | Merge pull request #17088 from robin850/jruby-devRafael Mendonça França2014-10-011-0/+1
|\ \ \ | | | | | | | | Follow up to #16613
| * | | Follow up to #16613Robin Dupret2014-09-281-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since we want this flag to be enabled anytime we are running the tests under JRuby, let's enable this at the Rakefile level so people get the performance boost on their local checkout. Moreover, we avoid having to update this particular line anytime the option changes on the JRuby side. The only drawback is that we have to define it in every Rakefile but there's no big deal, this is already the case for other options.
* | | | Refactor callback setup in to use lambda instead of evalPablo Herrero2014-09-302-3/+5
| | | |
* | | | Reduce allocations when running AR callbacks.Pete Higgins2014-09-282-2/+2
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Inspired by @tenderlove's work in c363fff29f060e6a2effe1e4bb2c4dd4cd805d6e, this reduces the number of strings allocated when running callbacks for ActiveRecord instances. I measured that using this script: ``` require 'objspace' require 'active_record' require 'allocation_tracer' ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:" ActiveRecord::Base.connection.instance_eval do create_table(:articles) { |t| t.string :name } end class Article < ActiveRecord::Base; end a = Article.create name: "foo" a = Article.find a.id N = 10 result = ObjectSpace::AllocationTracer.trace do N.times { Article.find a.id } end result.sort.each do |k,v| p k => v end puts "total: #{result.values.map(&:first).inject(:+)}" ``` When I run this against master and this branch I get this output: ``` pete@balloon:~/projects/rails/activerecord$ git checkout master M Gemfile Switched to branch 'master' pete@balloon:~/projects/rails/activerecord$ bundle exec ruby benchmark_allocation_with_callback_send.rb > allocations_before pete@balloon:~/projects/rails/activerecord$ git checkout remove-dynamic-send-on-built-in-callbacks M Gemfile Switched to branch 'remove-dynamic-send-on-built-in-callbacks' pete@balloon:~/projects/rails/activerecord$ bundle exec ruby benchmark_allocation_with_callback_send.rb > allocations_after pete@balloon:~/projects/rails/activerecord$ diff allocations_before allocations_after 39d38 < {["/home/pete/projects/rails/activesupport/lib/active_support/callbacks.rb", 81]=>[40, 0, 0, 0, 0, 0]} 42c41 < total: 630 --- > total: 590 ``` In addition to this, there are two micro-optimizations present: * Using `block.call if block` vs `yield if block_given?` when the block was being captured already. ``` pete@balloon:~/projects$ cat benchmark_block_call_vs_yield.rb require 'benchmark/ips' def block_capture_with_yield &block yield if block_given? end def block_capture_with_call &block block.call if block end def no_block_capture yield if block_given? end Benchmark.ips do |b| b.report("block_capture_with_yield") { block_capture_with_yield } b.report("block_capture_with_call") { block_capture_with_call } b.report("no_block_capture") { no_block_capture } end pete@balloon:~/projects$ ruby benchmark_block_call_vs_yield.rb Calculating ------------------------------------- block_capture_with_yield 124979 i/100ms block_capture_with_call 138340 i/100ms no_block_capture 136827 i/100ms ------------------------------------------------- block_capture_with_yield 5703108.9 (±2.4%) i/s - 28495212 in 4.999368s block_capture_with_call 6840730.5 (±3.6%) i/s - 34169980 in 5.002649s no_block_capture 5821141.4 (±2.8%) i/s - 29144151 in 5.010580s ``` * Defining and calling methods instead of using send. ``` pete@balloon:~/projects$ cat benchmark_method_call_vs_send.rb require 'benchmark/ips' class Foo def tacos nil end end my_foo = Foo.new Benchmark.ips do |b| b.report('send') { my_foo.send('tacos') } b.report('call') { my_foo.tacos } end pete@balloon:~/projects$ ruby benchmark_method_call_vs_send.rb Calculating ------------------------------------- send 97736 i/100ms call 151142 i/100ms ------------------------------------------------- send 2683730.3 (±2.8%) i/s - 13487568 in 5.029763s call 8005963.9 (±2.7%) i/s - 40052630 in 5.006604s ``` The result of this is making typical ActiveRecord operations slightly faster: https://gist.github.com/phiggins/e46e51dcc7edb45b5f98
* | | Preparing for 4.2.0.beta2 releaseRafael Mendonça França2014-09-261-1/+1
| | |
* | | Added test for exception message for validate methodPrathamesh Sonpatki2014-09-231-1/+3
| | | | | | | | | | | | - Test case for https://github.com/rails/rails/pull/16851
* | | Move the array to a constantGodfrey Chan2014-09-231-3/+4
| | |
* | | Update error message for validate methodPrathamesh Sonpatki2014-09-201-1/+6
| | | | | | | | | | | | | | | - Improve the error message by suggesting that the user may have intended to call validates instead of validate method.
* | | [ci skip] ActiveModel CHANGELOG docs fixesAkshay Vishnoi2014-09-181-8/+11
| | |
* | | use `allow_blank` option insteadKuldeep Aggarwal2014-09-141-1/+1
| | |
* | | Default to sorting user's test cases for nowGodfrey Chan2014-09-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Goals: 1. Default to :random for newly generated applications 2. Default to :sorted for existing applications with a warning 3. Only show the warning once 4. Only show the warning if the app actually uses AS::TestCase Fixes #16769
* | | For now, we will keep sorting the tests.Matthew Draper2014-09-051-1/+1
| | | | | | | | | | | | | | | This reverts commits e969c928463e329fd6529ac59cad96385c538ffb and bd2b3fbe54e750ba97469a7896e8d143d6dfd465.
* | | Remove example fileRafael Mendonça França2014-09-041-30/+0
| | | | | | | | | | | | | | | | | | This documentation should be in the guides. Closes #16691
* | | Leave all our tests as order_dependent! for nowMatthew Draper2014-09-021-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | We're seeing too many failures to believe otherwise. This reverts commits bc116a55ca3dd9f63a1f1ca7ade3623885adcc57, cbde413df3839e06dd14e3c220e9800af91e83ab, bf0a67931dd8e58f6f878b9510ae818ae1f29a3a, and 2440933fe2c27b27bcafcd9019717800db2641aa.
* | | Refer to the library name instead of the constantRobin Dupret2014-08-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | When we are loading a component and we want to know its version, we are actually not speaking about the constant but the library itself. [ci skip] [Godfrey Chan & Xavier Noria]
* | | Merge branch 'master' of github.com:rails/railsDavid Heinemeier Hansson2014-08-298-43/+27
|\ \ \
| * | | Move model definition to test/models for test order indenendencyAkira Matsuda2014-08-283-29/+15
| | | |
| * | | No need to sort testsAkira Matsuda2014-08-281-1/+1
| | | | | | | | | | | | | | | | Dir.glob result must be already sorted anyway
| * | | Merge pull request #16661 from edogawaconan/doc-fixYves Senn2014-08-271-1/+1
| |\ \ \ | | | | | | | | | | Update documentation to match change in #5942 [ci skip]
| | * | | Update documentation to match change in #5942 [ci skip]edogawaconan2014-08-241-1/+1
| | | | |
| * | | | Merge pull request #16689 from ankit1910/improve-englishEileen M. Uchitelle2014-08-251-2/+2
| |\ \ \ \ | | | | | | | | | | | | [ci skip] make assert messages consistent
| | * | | | [ci skip] make assert messages consistentankit19102014-08-251-2/+2
| | |/ / /
| * / / / Use ActiveSupport::Concern instead of the traditinal wayYukio Mizuta2014-08-251-7/+7
| |/ / /
| * | | Using `each_with_object` instead of `reduce`Attila Domokos2014-08-221-2/+2
| | | | | | | | | | | | | | | | | | | | This way no new object allocation is taking place. Thanks @jeremy for the suggestion!
| * | | Replacing an each with reduceAttila Domokos2014-08-211-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The functionality has not changed, but the code is more elegant by using `reduce` instead of `each`. This way no accumulator needs to be declared, no explicit return is needed.
* | | | Preparing for 4.2.0.beta1 releaseDavid Heinemeier Hansson2014-08-191-1/+1
|/ / /
* | | Check attributes passed to create_with and whereRafael Mendonça França2014-08-181-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the request parameters are passed to create_with and where they can be used to do mass assignment when used in combination with Relation#create. Fixes CVE-2014-3514 Conflicts: activerecord/lib/active_record/relation/query_methods.rb
* | | No need to check model_name anymoreRafael Mendonça França2014-08-171-4/+2
| | |
* | | Merge pull request #15889 from carnesmedia/model-nameRafael Mendonça França2014-08-176-8/+12
|\ \ \ | | | | | | | | | | | | Use #model_name on instances instead of classes
| * | | Use #model_name on instances instead of classesAmiel Martin2014-06-246-8/+12
| | | | | | | | | | | | | | | | | | | | | | | | This allows rails code to be more confdent when asking for a model name, instead of having to ask for the class. Rails core discussion here: https://groups.google.com/forum/#!topic/rubyonrails-core/ThSaXw9y1F8
* | | | Don't expose these new APIs yet (added in 877ea78 / #16189)Godfrey Chan2014-08-161-14/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | WARNING: don't use them! They might change or go away between future beta/RC/ patch releases! Also added a CHANGELOG entry for this.
* | | | Implement `_was` and `changes` for in-place mutations of AR attributesSean Griffin2014-08-161-3/+16
| | | |
* | | | AM, AP, AV, and AMo tests are already order_independent!Akira Matsuda2014-08-131-5/+0
| | | |
* | | | Nobody sucks so nobody should call this awful method nameRafael Mendonça França2014-08-121-1/+1
| | | |
* | | | users_dont_suck_but_only_we_suck_and_only_our_tests_are_order_dependent!Akira Matsuda2014-08-121-0/+5
| | | | | | | | | | | | | | | | | | | | Calling ActiveSupport::TestCase.i_suck_and_my_tests_are_order_dependent! in AS::TestCase makes everyone's tests order dependent, which should never be done by the framework.
* | | | Fix typo [ci skip]Carlos Antonio da Silva2014-08-071-1/+1
| | | |
* | | | Allow password to contain spaces only.Yevhene Shemet2014-08-063-2/+18
| |/ / |/| |
* | | Call public methods rather than class_eval'ingCarlos Antonio da Silva2014-08-051-4/+2
| |/ |/|
* | Merge pull request #15959 from aditya-kapoor/remove-unneeded-casesRafael Mendonça França2014-07-292-26/+17
|\ \ | | | | | | remove unneeded test model for ActiveModel test cases.
| * | remove unneeded test model for ActiveModel test cases.Aditya Kapoor2014-06-282-26/+17
| | |
* | | Fix example code of `EachValidator` [ci skip]Chun-wei Kuo2014-07-281-1/+1
| | | | | | | | | | | | | | | We have to specify the `:title` option to really use the `TitleValidator` defined above.
* | | Merge branch 'rm-remove-mocha'Rafael Mendonça França2014-07-191-0/+2
|\ \ \ | | | | | | | | | | | | | | | | Conflicts: actionpack/test/abstract_unit.rb
| * | | Stop requiring mocha automaticallyRafael Mendonça França2014-07-191-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We are planning to remove mocha from our test suite because of performance problems. To make this possible we should stop require mocha on ActionSupport::TestCase. This should not affect applications since users still need to add mocha to Gemfile and this already load mocha. Added FIXME notes to place that still need mocha removal
* | | | %i doesn't work on 1.9Aaron Patterson2014-07-171-1/+1
| | | |
* | | | Merge pull request #16210 from sonnym/assert_valid_keys_in_validateMatthew Draper2014-07-183-0/+19
|\ \ \ \ | | | | | | | | | | | | | | | Check for valid options in validate method
| * | | | check for valid options in validate methodsonnym2014-07-173-0/+18
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change prevents a certain class of user error which results when mistakenly using the `validate` class method instead of the `validates` class method. Only apply when all arguments are symbols, because some validations use the `validate` method and pass in additional options, namely the `LenghValidator` via the `ActiveMode::Validations::validates_with` method.
* | | | Make restore_attributes publicRafael Mendonça França2014-07-172-10/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Also make it accept a list of attributes to be changed. This will make possible to restore only a subset of the changed attributes. Closes #16203