Sha256: 7954b5b83be85f1cfd20359ca624819143ea2fab4fe49ed32af716cd306e1f99

Contents?: true

Size: 1.04 KB

Versions: 3

Compression:

Stored size: 1.04 KB

Contents

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

      class InstrumenterDecorator < ActiveSupport::BasicObject
        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

3 entries across 3 versions & 1 rubygems

Version Path
ar-octopus-0.6.1 lib/octopus/rails3/abstract_adapter.rb
ar-octopus-0.6.0 lib/octopus/rails3/abstract_adapter.rb
ar-octopus-0.5.0 lib/octopus/rails3/abstract_adapter.rb