class Grape::Util::BaseInheritable

that only inherit (never override) don’t carry an empty Hash each.
+@new_values+ is lazily allocated on first write so settings layers
in the hash and inherited values kept in a Hash-like object.
Base for classes which need to operate with own values kept

def delete(*keys)

def delete(*keys)
  return [] unless @new_values
  keys.map { |key| @new_values.delete(key) }
end

def initialize(inherited_values = nil)

Parameters:
  • inherited_values (Object) -- An object implementing an interface
def initialize(inherited_values = nil)
  @inherited_values = inherited_values || {}
  # @new_values stays nil until the first write.
end

def initialize_copy(other)

def initialize_copy(other)
  super
  @inherited_values = other.inherited_values
  @new_values = other.new_values&.dup
end

def key?(name)

def key?(name)
  @inherited_values.key?(name) || @new_values&.key?(name) || false
end

def keys

def keys
  return @inherited_values.keys if @new_values.nil? || @new_values.empty?
  (@inherited_values.keys + @new_values.keys).uniq
end