diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-07-22 18:11:36 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-07-22 18:11:36 -0700 |
commit | 7085aae9019f5b6bab242471fe3c1be2997423ed (patch) | |
tree | 1571a38d818f25528886178e8a97f3dcff1af850 /activerecord/lib/active_record/associations | |
parent | bb1492e334e2d2efccb9d3c111648b895f626633 (diff) | |
download | rails-7085aae9019f5b6bab242471fe3c1be2997423ed.tar.gz rails-7085aae9019f5b6bab242471fe3c1be2997423ed.tar.bz2 rails-7085aae9019f5b6bab242471fe3c1be2997423ed.zip |
extend by adding relationships rather than monkey patching
Diffstat (limited to 'activerecord/lib/active_record/associations')
-rw-r--r-- | activerecord/lib/active_record/associations/builder/association.rb | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/associations/builder/association.rb b/activerecord/lib/active_record/associations/builder/association.rb index cd0642c592..07c7bf58f9 100644 --- a/activerecord/lib/active_record/associations/builder/association.rb +++ b/activerecord/lib/active_record/associations/builder/association.rb @@ -14,9 +14,11 @@ module ActiveRecord::Associations::Builder class Association #:nodoc: class << self attr_accessor :valid_options + attr_accessor :extensions end self.valid_options = [:class_name, :foreign_key, :validate] + self.extensions = [] attr_reader :model, :name, :scope, :options, :reflection @@ -48,14 +50,14 @@ module ActiveRecord::Associations::Builder @model.generated_feature_methods end - include Module.new { def build(*args); end } - def build validate_options define_accessors configure_dependency if options[:dependent] @reflection = model.create_reflection(macro, name, scope, options, model) - super(@model, @reflection) # provides an extension point + Association.extensions.each do |extension| + extension.build @model, @reflection + end @reflection end @@ -64,13 +66,13 @@ module ActiveRecord::Associations::Builder end def valid_options - Association.valid_options + (Association.valid_options + Association.extensions.map(&:valid_options)).flatten end def validate_options options.assert_valid_keys(valid_options) end - + # Defines the setter and getter methods for the association # class Post < ActiveRecord::Base # has_many :comments |