Sha256: b8de87b1048627cedc209f578798a165762dfa41b1f6c9f786aa946597d78b32

Contents?: true

Size: 1.67 KB

Versions: 10

Compression:

Stored size: 1.67 KB

Contents

# Author: Stephen Sykes

module SlimScrooge
  module FindBySql
    def self.included(base)
      ActiveRecord::Base.extend ClassMethods
      class << base
        alias_method_chain :find_by_sql, :slim_scrooge
      end
    end

    module ClassMethods
      def find_by_sql_with_slim_scrooge(sql)
        return find_by_sql_without_slim_scrooge(sql) if sql.is_a?(Array) # don't mess with user's custom query
        callsite_key = SlimScrooge::Callsites.callsite_key(sql)
        if SlimScrooge::Callsites.has_key?(callsite_key)
          find_with_callsite_key(sql, callsite_key)
        elsif callsite = SlimScrooge::Callsites.create(sql, callsite_key, name)  # new site that is scroogeable
          rows = connection.select_all(sql, "#{name} Load SlimScrooged 1st time")
          rows.collect! {|row| instantiate(MonitoredHash[row, {}, callsite])}
        else
          find_by_sql_without_slim_scrooge(sql)
        end
      end

      private

      def find_with_callsite_key(sql, callsite_key)
        if callsite = SlimScrooge::Callsites[callsite_key]
          seen_columns = callsite.seen_columns.dup          # dup so cols aren't changed underneath us
          rows = connection.select_all(callsite.scrooged_sql(seen_columns, sql), "#{name} Load SlimScrooged")
          rows.collect! {|row| MonitoredHash[{}, row, callsite]}
          result_set = SlimScrooge::ResultSet.new(rows.dup, callsite_key, seen_columns)
          rows.collect! do |row|
            row.result_set = result_set
            instantiate(row)
          end
        else
          find_by_sql_without_slim_scrooge(sql)
        end
      end
    end
  end
end

ActiveRecord::Base.send(:include, SlimScrooge::FindBySql)

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
slim_scrooge-1.0.12 lib/slim_scrooge/slim_scrooge.rb
slim_scrooge-1.0.11 lib/slim_scrooge/slim_scrooge.rb
slim_scrooge-1.0.10 lib/slim_scrooge/slim_scrooge.rb
slim_scrooge-1.0.9 lib/slim_scrooge/slim_scrooge.rb
slim_scrooge-1.0.7 lib/slim_scrooge/slim_scrooge.rb
refinerycms-0.9.6.22 vendor/plugins/slim_scrooge/lib/slim_scrooge/slim_scrooge.rb
refinerycms-0.9.6.21 vendor/plugins/slim_scrooge/lib/slim_scrooge/slim_scrooge.rb
slim_scrooge-1.0.5 lib/slim_scrooge/slim_scrooge.rb
slim_scrooge-1.0.4 lib/slim_scrooge/slim_scrooge.rb
slim_scrooge-1.0.3 lib/slim_scrooge/slim_scrooge.rb