1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
# frozen_string_literal: true
module Grape
module Util
# Base for classes which need to operate with own values kept
# in the hash and inherited values kept in a Hash-like object.
class BaseInheritable
attr_accessor :inherited_values, :new_values
# @param inherited_values [Object] An object implementing an interface
# of the Hash class.
def initialize(inherited_values = nil)
@inherited_values = inherited_values || {}
@new_values = {}
end
def delete(key)
new_values.delete key
end
def initialize_copy(other)
super
self.inherited_values = other.inherited_values
self.new_values = other.new_values.dup
end
def keys
if new_values.any?
combined = inherited_values.keys
combined.concat(new_values.keys)
combined.uniq!
combined
else
inherited_values.keys
end
end
def key?(name)
inherited_values.key?(name) || new_values.key?(name)
end
end
end
end
|