Sha256: e7bfd8156d9683526691cb05198df87af3b82144e025bdd446c81a37cf7b749c
Contents?: true
Size: 1.76 KB
Versions: 2
Compression:
Stored size: 1.76 KB
Contents
module Datadog InvalidOptionError = Class.new(StandardError) # Configurable provides configuration methods for a given class/module module Configurable IDENTITY = ->(x) { x } def self.included(base) base.singleton_class.send(:include, ClassMethods) end # ClassMethods module ClassMethods def set_option(name, value) __assert_valid!(name) __options[name][:value] = __options[name][:setter].call(value) __options[name][:set_flag] = true end def get_option(name) __assert_valid!(name) return __options[name][:default] unless __options[name][:set_flag] __options[name][:value] end def to_h __options.each_with_object({}) do |(key, _), hash| hash[key] = get_option(key) end end def reset_options! __options.each do |name, meta| set_option(name, meta[:default]) end end def sorted_options Configuration::Resolver.new(__dependency_graph).call end private def option(name, meta = {}, &block) name = name.to_sym meta[:setter] ||= (block || IDENTITY) meta[:depends_on] ||= [] __options[name] = meta end def __options @__options ||= {} end def __assert_valid!(name) return if __options.key?(name) raise(InvalidOptionError, "#{__pretty_name} doesn't have the option: #{name}") end def __pretty_name entry = Datadog.registry.find { |el| el.klass == self } return entry.name if entry to_s end def __dependency_graph __options.each_with_object({}) do |(name, meta), graph| graph[name] = meta[:depends_on] end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ddtrace-0.11.0.beta1 | lib/ddtrace/configurable.rb |
ddtrace-0.10.0 | lib/ddtrace/configurable.rb |