aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/aggregations.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2018-06-25 14:22:32 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2018-06-25 14:22:32 -0700
commit657060b5f8c14fc6249fc19231f703a7c749d84e (patch)
tree5404526cd7e88996cf5f96123468e4c66415172a /activerecord/lib/active_record/aggregations.rb
parent83247916c934a92f0f9d69ee13cd8532c3d16d0e (diff)
downloadrails-657060b5f8c14fc6249fc19231f703a7c749d84e.tar.gz
rails-657060b5f8c14fc6249fc19231f703a7c749d84e.tar.bz2
rails-657060b5f8c14fc6249fc19231f703a7c749d84e.zip
Lazily add `Aggregations` to `composed_of` models
`composed_of` is a fairly rare method to call on models. This commit adds the `Aggregations` module to models that call `composed_of` so that models that *don't* call `composed_of` don't need to instantiate the `aggregation_cache` hash. This saves one hash allocation per model instance that doesn't use `composed_of`
Diffstat (limited to 'activerecord/lib/active_record/aggregations.rb')
-rw-r--r--activerecord/lib/active_record/aggregations.rb4
1 files changed, 4 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/aggregations.rb b/activerecord/lib/active_record/aggregations.rb
index 27a641f05b..7286837ac7 100644
--- a/activerecord/lib/active_record/aggregations.rb
+++ b/activerecord/lib/active_record/aggregations.rb
@@ -225,6 +225,10 @@ module ActiveRecord
def composed_of(part_id, options = {})
options.assert_valid_keys(:class_name, :mapping, :allow_nil, :constructor, :converter)
+ unless self < Aggregations
+ include Aggregations
+ end
+
name = part_id.id2name
class_name = options[:class_name] || name.camelize
mapping = options[:mapping] || [ name, name ]