Class: Packer::DataObject
- Inherits:
-
Object
- Object
- Packer::DataObject
show all
- Defined in:
- lib/packer/dataobject.rb
Defined Under Namespace
Classes: DataValidationError, ExclusiveKeyError
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#__add_array_of_array_of_strings(key, values, exclusives = []) ⇒ Object
-
#__add_array_of_hashes(key, values, exclusives = []) ⇒ Object
-
#__add_array_of_ints(key, values, exclusives = []) ⇒ Object
-
#__add_array_of_strings(key, values, exclusives = []) ⇒ Object
-
#__add_boolean(key, bool, exclusives = []) ⇒ Object
-
#__add_hash(key, data, exclusives = []) ⇒ Object
-
#__add_integer(key, data, exclusives = []) ⇒ Object
-
#__add_json(key, data, exclusives = []) ⇒ Object
-
#__add_string(key, data, exclusives = []) ⇒ Object
-
#__exclusive_key_error(key, exclusives) ⇒ Object
-
#add_key_dependencies(key_deps) ⇒ Object
-
#add_required(*keys) ⇒ Object
-
#deep_copy ⇒ Object
-
#initialize ⇒ DataObject
constructor
A new instance of DataObject.
-
#validate ⇒ Object
-
#validate_key_dependencies ⇒ Object
-
#validate_required ⇒ Object
Constructor Details
Returns a new instance of DataObject.
8
9
10
11
12
|
# File 'lib/packer/dataobject.rb', line 8
def initialize
self.data = {}
self.required = []
self.key_dependencies = {}
end
|
Instance Attribute Details
#data ⇒ Object
Returns the value of attribute data.
4
5
6
|
# File 'lib/packer/dataobject.rb', line 4
def data
@data
end
|
#key_dependencies ⇒ Object
Returns the value of attribute key_dependencies.
6
7
8
|
# File 'lib/packer/dataobject.rb', line 6
def key_dependencies
@key_dependencies
end
|
#required ⇒ Object
Returns the value of attribute required.
5
6
7
|
# File 'lib/packer/dataobject.rb', line 5
def required
@required
end
|
Instance Method Details
#__add_array_of_array_of_strings(key, values, exclusives = []) ⇒ Object
84
85
86
87
88
89
90
91
92
|
# File 'lib/packer/dataobject.rb', line 84
def __add_array_of_array_of_strings(key, values, exclusives = [])
self.__exclusive_key_error(key, exclusives)
raise TypeError.new() unless Array.try_convert(values)
self.data[key.to_s] = []
values.each do |v|
raise TypeError.new() unless Array.try_convert(v)
self.data[key.to_s].push(v.to_ary.map(&:to_s))
end
end
|
#__add_array_of_hashes(key, values, exclusives = []) ⇒ Object
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/packer/dataobject.rb', line 94
def __add_array_of_hashes(key, values, exclusives = [])
self.__exclusive_key_error(key, exclusives)
raise TypeError.new() unless Array.try_convert(values)
self.data[key.to_s] = []
values.each do |v|
raise TypeError.new() unless v.is_a?(Hash)
self.data[key.to_s].push({})
v.keys.each do |k|
self.data[key.to_s][-1][k] = v[k].to_s
end
end
end
|
#__add_array_of_ints(key, values, exclusives = []) ⇒ Object
107
108
109
110
111
|
# File 'lib/packer/dataobject.rb', line 107
def __add_array_of_ints(key, values, exclusives = [])
self.__exclusive_key_error(key, exclusives)
raise TypeError.new() unless Array.try_convert(values)
self.data[key.to_s] = values.to_ary.map(&:to_i)
end
|
#__add_array_of_strings(key, values, exclusives = []) ⇒ Object
78
79
80
81
82
|
# File 'lib/packer/dataobject.rb', line 78
def __add_array_of_strings(key, values, exclusives = [])
self.__exclusive_key_error(key, exclusives)
raise TypeError.new() unless Array.try_convert(values)
self.data[key.to_s] = values.to_ary.map(&:to_s)
end
|
#__add_boolean(key, bool, exclusives = []) ⇒ Object
124
125
126
127
128
129
130
131
|
# File 'lib/packer/dataobject.rb', line 124
def __add_boolean(key, bool, exclusives = [])
self.__exclusive_key_error(key, exclusives)
if bool
self.data[key.to_s] = true
else
self.data[key.to_s] = false
end
end
|
#__add_hash(key, data, exclusives = []) ⇒ Object
133
134
135
136
137
138
139
140
|
# File 'lib/packer/dataobject.rb', line 133
def __add_hash(key, data, exclusives = [])
self.__exclusive_key_error(key, exclusives)
raise TypeError.new() unless data.is_a?(Hash)
self.data[key.to_s] = {}
data.keys.each do |k|
self.data[key.to_s][k] = data[k].to_s
end
end
|
#__add_integer(key, data, exclusives = []) ⇒ Object
118
119
120
121
|
# File 'lib/packer/dataobject.rb', line 118
def __add_integer(key, data, exclusives = [])
self.__exclusive_key_error(key, exclusives)
self.data[key.to_s] = data.to_i
end
|
#__add_json(key, data, exclusives = []) ⇒ Object
143
144
145
146
147
148
149
150
|
# File 'lib/packer/dataobject.rb', line 143
def __add_json(key, data, exclusives = [])
self.__exclusive_key_error(key, exclusives)
raise TypeError.new() unless data.is_a?(Hash)
self.data[key.to_s] = {}
data.keys.each do |k|
self.data[key.to_s][k] = data[k]
end
end
|
#__add_string(key, data, exclusives = []) ⇒ Object
113
114
115
116
|
# File 'lib/packer/dataobject.rb', line 113
def __add_string(key, data, exclusives = [])
self.__exclusive_key_error(key, exclusives)
self.data[key.to_s] = data.to_s
end
|
#__exclusive_key_error(key, exclusives) ⇒ Object
69
70
71
72
73
74
75
76
|
# File 'lib/packer/dataobject.rb', line 69
def __exclusive_key_error(key, exclusives)
exclusives.each do |e|
if self.data.has_key? e
raise ExclusiveKeyError.new("Only one of #{exclusives} can be used at a time")
end
end
true
end
|
#add_key_dependencies(key_deps) ⇒ Object
58
59
60
|
# File 'lib/packer/dataobject.rb', line 58
def add_key_dependencies(key_deps)
self.key_dependencies.merge!(key_deps)
end
|
#add_required(*keys) ⇒ Object
52
53
54
55
56
|
# File 'lib/packer/dataobject.rb', line 52
def add_required(*keys)
keys.each do |k|
self.required.push(k)
end
end
|
#deep_copy ⇒ Object
62
63
64
|
# File 'lib/packer/dataobject.rb', line 62
def deep_copy
Marshal.load(Marshal.dump(self.data))
end
|
#validate ⇒ Object
17
18
19
20
21
22
23
|
# File 'lib/packer/dataobject.rb', line 17
def validate
validate_required
validate_key_dependencies
true
end
|
#validate_key_dependencies ⇒ Object
42
43
44
45
46
47
48
49
50
|
# File 'lib/packer/dataobject.rb', line 42
def validate_key_dependencies
self.data.keys.each do |data_key|
if self.key_dependencies.has_key? data_key
if ! (self.key_dependencies[data_key] - self.data.keys).empty?
raise DataValidationError.new("Key #{data_key} requires that keys be defined: #{self.key_dependencies[data_key]}")
end
end
end
end
|
#validate_required ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/packer/dataobject.rb', line 25
def validate_required
self.required.each do |r|
if (r.is_a? Array) && (r.length > 0)
if r.length - (r - self.data.keys).length == 0
raise DataValidationError.new("Missing one required setting from the set #{r}")
end
if r.length - (r - self.data.keys).length > 1
raise DataValidationError.new("Found more than one exclusive setting in data from set #{r}")
end
else
if ! self.data.keys.include? r
raise DataValidationError.new("Missing required setting #{r}")
end
end
end
end
|