Sha256: f85e6fdc195186fd55c1933b17fcddbdea4c9570e5d16a418de531d3e9d6054b

Contents?: true

Size: 1.49 KB

Versions: 5

Compression:

Stored size: 1.49 KB

Contents

require 'active_support/per_thread_registry'
require 'influxer/metrics/scoping/default'
require 'influxer/metrics/scoping/named'

module Influxer
  module Scoping
    extend ActiveSupport::Concern

    class Error < StandardError; end;

    included do
      include Default
      include Named
    end

    module ClassMethods
      def current_scope #:nodoc:
        ScopeRegistry.value_for(:current_scope, name)
      end

      def current_scope=(scope) #:nodoc:
        ScopeRegistry.set_value_for(:current_scope, name, scope)
      end
    end

    class ScopeRegistry # :nodoc:
      extend ActiveSupport::PerThreadRegistry

      VALID_SCOPE_TYPES = [:current_scope]

      def initialize
        @registry = Hash.new { |hash, key| hash[key] = {} }
      end

      # Obtains the value for a given +scope_name+ and +variable_name+.
      def value_for(scope_type, variable_name)
        raise_invalid_scope_type!(scope_type)
        @registry[scope_type][variable_name]
      end

      # Sets the +value+ for a given +scope_type+ and +variable_name+.
      def set_value_for(scope_type, variable_name, value)
        raise_invalid_scope_type!(scope_type)
        @registry[scope_type][variable_name] = value
      end

      private

      def raise_invalid_scope_type!(scope_type)
        if !VALID_SCOPE_TYPES.include?(scope_type)
          raise ArgumentError, "Invalid scope type '#{scope_type}' sent to the registry. Scope types must be included in VALID_SCOPE_TYPES"
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
influxer-0.2.2 lib/influxer/metrics/scoping.rb
influxer-0.2.0 lib/influxer/metrics/scoping.rb
influxer-0.1.2 lib/influxer/metrics/scoping.rb
influxer-0.1.1 lib/influxer/metrics/scoping.rb
influxer-0.1.0 lib/influxer/metrics/scoping.rb