Sha256: 9a34ff94139ed611548d2e8e13b65d1a4086e3d6c12a98f71686b5c2f65a099c
Contents?: true
Size: 1.5 KB
Versions: 24
Compression:
Stored size: 1.5 KB
Contents
module Datadog module Core # A {Datadog::Core::Pin} sets metadata on a particular object. # # This is useful if you want the object to reflect # customized behavior or attributes, like an eigenclass. class Pin def self.get_from(obj) return nil unless obj.respond_to? :datadog_pin obj.datadog_pin end def self.set_on(obj, **options) if (pin = get_from(obj)) options.each { |k, v| pin[k] = v } else pin = new(**options) pin.onto(obj) end pin end def initialize(**options) @options = options end def [](name) @options[name] end def []=(name, value) @options[name] = value end def key?(name) @options.key?(name) end # rubocop:disable Style/TrivialAccessors def onto(obj) unless obj.respond_to? :datadog_pin= obj.instance_exec do def datadog_pin=(pin) @datadog_pin = pin end end end unless obj.respond_to? :datadog_pin obj.instance_exec do def datadog_pin @datadog_pin end end end obj.datadog_pin = self end # rubocop:enable Style/TrivialAccessors def to_s pretty_options = options.to_a.map { |k, v| "#{k}:#{v}" }.join(', ') "Pin(#{pretty_options})" end private attr_accessor :options end end end
Version data entries
24 entries across 24 versions & 1 rubygems