class Datadog::Core::Pin
customized behavior or attributes, like an eigenclass.
This is useful if you want the object to reflect
A {Datadog::Core::Pin} sets metadata on a particular object.
def self.get_from(obj)
def self.get_from(obj) return nil unless obj.respond_to? :datadog_pin obj.datadog_pin end
def self.set_on(obj, **options)
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 [](name)
def [](name) @options[name] end
def []=(name, value)
def []=(name, value) @options[name] = value end
def datadog_pin
def datadog_pin @datadog_pin end
def datadog_pin=(pin)
def datadog_pin=(pin) @datadog_pin = pin end
def initialize(**options)
def initialize(**options) @options = options end
def key?(name)
def key?(name) @options.key?(name) end
def onto(obj)
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
def to_s
def to_s pretty_options = options.to_a.map { |k, v| "#{k}:#{v}" }.join(', ') "Pin(#{pretty_options})" end