aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/builder/association.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-07-22 18:11:36 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-07-22 18:11:36 -0700
commit7085aae9019f5b6bab242471fe3c1be2997423ed (patch)
tree1571a38d818f25528886178e8a97f3dcff1af850 /activerecord/lib/active_record/associations/builder/association.rb
parentbb1492e334e2d2efccb9d3c111648b895f626633 (diff)
downloadrails-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/builder/association.rb')
-rw-r--r--activerecord/lib/active_record/associations/builder/association.rb12
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