Sha256: 175079309a5ceac68caa2ac5b83f4cf0117023d5e22fb435c5195020d1da099e

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

# Implementation courtesy of db-charmer.
module Octopus
  module AbstractAdapter
    module OctopusShard

      parent = ActiveSupport::BasicObject
      if Octopus.rails4?
        parent = ActiveSupport::ProxyObject
      end

      class InstrumenterDecorator < parent
        def initialize(adapter, instrumenter)
          @adapter = adapter
          @instrumenter = instrumenter
        end

        def instrument(name, payload = {}, &block)
          payload[:octopus_shard] ||= @adapter.octopus_shard
          @instrumenter.instrument(name, payload, &block)
        end

        def method_missing(meth, *args, &block)
          @instrumenter.send(meth, *args, &block)
        end
      end

      def self.included(base)
        base.alias_method_chain :initialize, :octopus_shard
      end

      def octopus_shard
        @config[:octopus_shard]
      end

      def initialize_with_octopus_shard(*args)
        initialize_without_octopus_shard(*args)
        @instrumenter = InstrumenterDecorator.new(self, @instrumenter)
      end

    end
  end
end

ActiveRecord::ConnectionAdapters::AbstractAdapter.send(:include, Octopus::AbstractAdapter::OctopusShard)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ar-octopus-0.8.1 lib/octopus/rails3/abstract_adapter.rb