Sha256: a7626f16996b659fea92ccef8d6bf34ffe98cecfa0bd004925e79fd41194d460

Contents?: true

Size: 1.86 KB

Versions: 1

Compression:

Stored size: 1.86 KB

Contents

module FreshConnection
  module Extend
    module ArRelation
      def self.included(base)
        base.alias_method_chain :exec_queries, :fresh_connection

        if FreshConnection.rails_4?
          base.__send__(:include, ForRails4)
        elsif FreshConnection.rails_3?
          base.__send__(:include, ForRails3)
        end
      end

      def calculate(operation, column_name, options = {})
        slave_access = enable_slave_access && options[:readonly] != false
        @klass.manage_access(slave_access) { super }
      end

      private

      def exec_queries_with_fresh_connection
        return @records if loaded?

        @klass.manage_access(enable_slave_access) do
          exec_queries_without_fresh_connection
        end
      end

      module ForRails4
        def pluck(*args)
          @klass.manage_access(enable_slave_access) { super }
        end

        private

        def enable_slave_access
          connection.open_transactions == 0 && (readonly_value.nil? || readonly_value)
        end
      end

      module ForRails3
        def pluck(column_name)
          if column_name.is_a?(Symbol) && column_names.include?(column_name.to_s)
            column_name = "#{connection.quote_table_name(table_name)}.#{connection.quote_column_name(column_name)}"
          end

          result = @klass.manage_access(enable_slave_access) do
            klass.connection.select_all(select(column_name).arel, nil)
          end

          return result if result.nil? || result.empty?

          last_columns = result.last.keys.last

          result.map do |attributes|
            klass.type_cast_attribute(last_columns, klass.initialize_attributes(attributes))
          end
        end

        private

        def enable_slave_access
          connection.open_transactions == 0 && (@readonly_value.nil? || @readonly_value)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fresh_connection-0.2.6 lib/fresh_connection/extend/ar_relation.rb