Sha256: 5d33388af7ce89c4ef1f3f018999ace6abffe0bba781cd7e60d8feafad9cc2b8

Contents?: true

Size: 1.49 KB

Versions: 7

Compression:

Stored size: 1.49 KB

Contents

require 'active_record'
module ConnectionManager 
  class MethodRecorder  
    attr_accessor :classes_to_call
    
    def initialize(classes_to_call=[])
      self.classes_to_call = classes_to_call
    end
    
    # A place to store our methods and thier variables
    def recordings
      @recordings ||= {}
    end
    
    def execute_recordings
      results = []
      classes_to_call.each do |class_to_call|
        called = nil
        recordings.each do |name,args|
          args = args[0] if [Array, Hash].include?args[0].class 
          if called.nil?
            if args.blank?
              called = class_to_call.send(name.to_sym)         
            else
              called = class_to_call.send(name.to_sym, args)
            end
          else
            if args.blank?
              called = called.send(name.to_sym)
            else
              called = called.send(name.to_sym, args)
            end
          end
        end
        if called.is_a?(Array)
          results = (results | called)
        else
          results << called
        end   
      end
      results
    end
    
    # Create recorder classes for methods that might be called on a ActiveRecord
    # model in the process of building a query
    (ActiveRecord::FinderMethods.instance_methods | ActiveRecord::QueryMethods.instance_methods).each do |method|
      define_method(method) do |*args|
        recordings[method] = args 
        self
      end
    end
    
    def execute
      execute_recordings
    end
  end  
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
connection_manager-0.2.6 lib/connection_manager/method_recorder.rb
connection_manager-0.2.5 lib/connection_manager/method_recorder.rb
connection_manager-0.2.4 lib/connection_manager/method_recorder.rb
connection_manager-0.2.3 lib/connection_manager/method_recorder.rb
connection_manager-0.2.2 lib/connection_manager/method_recorder.rb
connection_manager-0.2.1 lib/connection_manager/method_recorder.rb
connection_manager-0.2.0 lib/connection_manager/method_recorder.rb