Class: GDK::ConfigType::SettingsArray
- Inherits:
-
Base
- Object
- Base
- GDK::ConfigType::SettingsArray
show all
- Extended by:
- Forwardable
- Defined in:
- lib/gdk/config_type/settings_array.rb
Constant Summary
collapse
- ArrayAccessError =
Class.new(StandardError)
Instance Attribute Summary collapse
Attributes inherited from Base
#builder, #parent, #user_value
Instance Method Summary
collapse
Methods inherited from Base
#default_value, #root, #slug, #user_defined?, #validate!
Constructor Details
#initialize(parent:, builder:, size:) ⇒ SettingsArray
Returns a new instance of SettingsArray.
15
16
17
18
|
# File 'lib/gdk/config_type/settings_array.rb', line 15
def initialize(parent:, builder:, size:)
@size = size
super(parent: parent, builder: builder)
end
|
Instance Attribute Details
#elems ⇒ Object
Returns the value of attribute elems.
10
11
12
|
# File 'lib/gdk/config_type/settings_array.rb', line 10
def elems
@elems
end
|
#size ⇒ Object
Returns the value of attribute size.
10
11
12
|
# File 'lib/gdk/config_type/settings_array.rb', line 10
def size
@size
end
|
Instance Method Details
#dig(*slugs) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/gdk/config_type/settings_array.rb', line 34
def dig(*slugs)
slugs = slugs.first.to_s.split('.') if slugs.one?
index = Integer(slugs.shift, exception: false)
raise ArrayAccessError, "length on #{key} must be a positive number" if index.nil? || index.negative?
raise ArrayAccessError, "#{key} only has #{length} entries" if index >= length
return value[index] if slugs.empty?
value[index].dig(*slugs)
end
|
#dump!(user_only: false) ⇒ Object
65
66
67
|
# File 'lib/gdk/config_type/settings_array.rb', line 65
def dump!(user_only: false)
elems.map { |e| e.dump!(user_only: user_only) }
end
|
#inspect ⇒ Object
73
74
75
|
# File 'lib/gdk/config_type/settings_array.rb', line 73
def inspect
"#<#{self.class.name} slug:#{slug}, length:#{length}>"
end
|
#length ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/gdk/config_type/settings_array.rb', line 20
def length
@length ||= case size
when Proc
parent.instance_exec(&size)
when Numeric
size
when nil
yaml_array = parent.yaml[key] ||= []
yaml_array.length
else
raise ::ArgumentError, "size for #{key} must be a number, a proc, or nil (dynamic size)"
end
end
|
#parse(value) ⇒ Object
69
70
71
|
# File 'lib/gdk/config_type/settings_array.rb', line 69
def parse(value)
value
end
|
#read_value ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/gdk/config_type/settings_array.rb', line 50
def read_value
@elems = ::Array.new(length) do |i|
arr = parent.yaml[key] ||= []
yaml = arr[i] ||= {}
Class.new(parent.settings_klass).tap do |k|
k.class_exec(i, &blk)
end.new(key: i, parent: self, yaml: yaml)
end
end
|
#to_s ⇒ Object
46
47
48
|
# File 'lib/gdk/config_type/settings_array.rb', line 46
def to_s
dump!.to_yaml
end
|