module Scorpion::Rails::ActiveRecord::Association
Adds dependency injection to ActiveRecord::Base model associations.
Public Class Methods
infect( klass )
click to toggle source
Propagate the module inheritance to all derived classes so that we can always overlay our interception methods on the top-most overriden method.
# File lib/scorpion/rails/active_record/association.rb, line 32 def self.infect( klass ) klass.class_exec do def self.inherited( from ) Scorpion::Rails::ActiveRecord::Association.infect( from ) super end end overlay( klass ) end
inherited( from )
click to toggle source
Calls superclass method
# File lib/scorpion/rails/active_record/association.rb, line 34 def self.inherited( from ) Scorpion::Rails::ActiveRecord::Association.infect( from ) super end
overlay( klass )
click to toggle source
Overlay interception methods on the klass.
# File lib/scorpion/rails/active_record/association.rb, line 44 def self.overlay( klass ) [ :load_target, :target, :reader, :writer, :scope ].each do |method| next unless klass.instance_methods.include? method mod = Module.new do module_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{ method }( *args, &block ) sting! super end RUBY end klass.prepend mod end end
prepended( base )
click to toggle source
Make sure we override the methods of child classes as well.
Calls superclass method
# File lib/scorpion/rails/active_record/association.rb, line 24 def self.prepended( base ) infect base super end
Public Instance Methods
scorpion( scope = nil )
click to toggle source
Calls superclass method
Scorpion::Method#scorpion
# File lib/scorpion/rails/active_record/association.rb, line 15 def scorpion( scope = nil ) super || owner.scorpion( scope ) end