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)

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

def to_s

def to_s
  pretty_options = options.to_a.map { |k, v| "#{k}:#{v}" }.join(', ')
  "Pin(#{pretty_options})"
end