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