-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathbase_inheritable.rb
43 lines (37 loc) · 1.06 KB
/
base_inheritable.rb
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?
inherited_values.keys.tap do |combined|
combined.concat(new_values.keys)
combined.uniq!
end
else
inherited_values.keys
end
end
def key?(name)
inherited_values.key?(name) || new_values.key?(name)
end
end
end
end