Module: JSON::Schematized::BasicWrapper::SchematizedHash
- Defined in:
- lib/json/schematized/basic_wrapper.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object
127
128
129
130
131
132
133
134
135
136
137
138
139
|
# File 'lib/json/schematized/basic_wrapper.rb', line 127
def method_missing(name, *args)
key = name.to_s
if key =~ /=\z/
key = $`.to_sym
if json_schema[:properties][key]
self[key] = args.first
else
super
end
else
read_attribute key
end
end
|
Class Method Details
.ensure_structure!(json, schema) ⇒ Object
194
195
196
197
198
199
200
201
202
203
204
205
|
# File 'lib/json/schematized/basic_wrapper.rb', line 194
def self.ensure_structure!(json, schema)
meta = schema[:properties]
meta.each_pair do |key, schema|
if !json.has_key?(key.to_s) && schema[:required]
json[key.to_s] = case schema[:type]
when "object" then {}
when "array" then []
else nil
end
end
end
end
|
Instance Method Details
#[]=(key, value) ⇒ Object
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
# File 'lib/json/schematized/basic_wrapper.rb', line 149
def []=(key, value)
if meta = json_schema[:properties][key.to_sym]
case meta[:type]
when "array"
collection = BasicWrapper.build_collection(subclasses_namespace, key, meta[:items])
new_value = collection.class.new
new_value.coerce_members_to(collection.first, meta[:items])
new_value.mass_assign!(value) if value.is_a?(Array)
value = new_value
when "object"
model_class = BasicWrapper.build_model(subclasses_namespace, key, meta)
new_value = model_class.new
new_value.json_schema = meta
new_value.mass_assign!(value) if value.is_a?(Hash)
value = new_value
end
end
super(key.to_s, value)
end
|
#mass_assign!(hash) ⇒ Object
169
170
171
172
173
174
175
176
|
# File 'lib/json/schematized/basic_wrapper.rb', line 169
def mass_assign!(hash)
return unless hash.is_a?(Hash)
hash.each_pair do |key, value|
self[key] = value
end
ensure
SchematizedHash.ensure_structure!(self, json_schema)
end
|
#read_attribute(name) ⇒ Object
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
# File 'lib/json/schematized/basic_wrapper.rb', line 178
def read_attribute(name)
name = name.to_s
value = self[name]
if !has_key?(name) && (meta = json_schema[:properties][name.to_sym])
case meta[:type]
when "array"
self[name] = []
value = self[name]
when "object"
self[name] = {}
value = self[name]
end
end
value
end
|
#respond_to?(method_name) ⇒ Boolean
141
142
143
|
# File 'lib/json/schematized/basic_wrapper.rb', line 141
def respond_to?(method_name)
json_schema[:properties].has_key?(method_name.to_sym) || super
end
|
#subclasses_namespace ⇒ Object
145
146
147
|
# File 'lib/json/schematized/basic_wrapper.rb', line 145
def subclasses_namespace
self.class
end
|