Sha256: e097ea2de6c5db30e9ff27bf82242122d1452dbd66f2f6a00a4ee4d8b5855e9a

Contents?: true

Size: 1.96 KB

Versions: 6

Compression:

Stored size: 1.96 KB

Contents

module DbCharmer
  module ActionController
    module ForceSlaveReads

      module ClassMethods
        @@db_charmer_force_slave_reads_actions = {}
        def force_slave_reads(params)
          @@db_charmer_force_slave_reads_actions[self.name] = {
            :except => params[:except] ? [*params[:except]].map(&:to_s) : [],
            :only => params[:only] ? [*params[:only]].map(&:to_s) : []
          }
        end

        def force_slave_reads_options
          @@db_charmer_force_slave_reads_actions[self.name]
        end

        def force_slave_reads_action?(name = nil)
          name = name.to_s

          options = force_slave_reads_options
          # If no options were defined for this controller, all actions are not forced to use slaves
          return false unless options

          # Actions where force_slave_reads mode was turned off
          return false if options[:except].include?(name)

          # Only for these actions force_slave_reads was turned on
          return options[:only].include?(name) if options[:only].any?

          # If :except is not empty, we're done with the checks and rest of the actions are should force slave reads
          # Otherwise, all the actions are not in force_slave_reads mode
          options[:except].any?
        end
      end

      module InstanceMethods
        def self.included(base)
          base.alias_method_chain :perform_action, :forced_slave_reads
        end

        def force_slave_reads!
          @db_charmer_force_slave_reads = true
        end

        def dont_force_slave_reads!
          @db_charmer_force_slave_reads = false
        end

        def force_slave_reads?
          @db_charmer_force_slave_reads || self.class.force_slave_reads_action?(params[:action])
        end

      protected

        def perform_action_with_forced_slave_reads
          DbCharmer.with_controller(self) do
            perform_action_without_forced_slave_reads
          end
        end
      end

    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
db-charmer-1.7.0.pre6 lib/db_charmer/action_controller/force_slave_reads.rb
db-charmer-1.7.0.pre5 lib/db_charmer/action_controller/force_slave_reads.rb
db-charmer-1.7.0.pre4 lib/db_charmer/action_controller/force_slave_reads.rb
db-charmer-1.7.0.pre3 lib/db_charmer/action_controller/force_slave_reads.rb
db-charmer-1.7.0.pre2 lib/db_charmer/action_controller/force_slave_reads.rb
db-charmer-1.7.0.pre1 lib/db_charmer/action_controller/force_slave_reads.rb