acdc 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/acdc.rb +1 -1
- data/lib/acdc/body.rb +32 -14
- metadata +2 -2
data/lib/acdc.rb
CHANGED
data/lib/acdc/body.rb
CHANGED
@@ -33,17 +33,11 @@ module AcDc
|
|
33
33
|
values.each do |key,val|
|
34
34
|
if self.class.declared_elements.has_key?(key)
|
35
35
|
type = options_for(key)[:type]
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
42
|
-
if type.ancestors.include?(Body)
|
43
|
-
elements.update(key => type.new(val.to_hash.merge(:sequence => options_for(key)[:sequence])))
|
44
|
-
else
|
45
|
-
elements.update(key => type.new(val, options_for(key)))
|
46
|
-
end
|
36
|
+
validate(type,key,val)
|
37
|
+
if type and type.ancestors.include?(Body)
|
38
|
+
elements.update(key => type.new(val.to_hash.merge(:sequence => options_for(key)[:sequence])))
|
39
|
+
elsif type
|
40
|
+
elements.update(key => type.new(val, options_for(key)))
|
47
41
|
else
|
48
42
|
elements.update(key => Element(val, options_for(key)))
|
49
43
|
end
|
@@ -97,7 +91,7 @@ module AcDc
|
|
97
91
|
# Sequence of elements (XML Schema sequence) is taken care of by the order
|
98
92
|
# the elements are declared in the class definition.
|
99
93
|
#@param [Symbol] name A name to assign the Element (tag name)
|
100
|
-
#@param [Class] type A type to use for the element (enforcement)
|
94
|
+
#@param [Class] type A type to use for the element (use this for type enforcement)
|
101
95
|
#@option options [Boolean] :single False if object is a collection
|
102
96
|
#@option options [String] :tag String determining the name to use in the XML tag
|
103
97
|
def element(*options)
|
@@ -165,13 +159,30 @@ module AcDc
|
|
165
159
|
|
166
160
|
private
|
167
161
|
|
162
|
+
def validate(type, key, val)
|
163
|
+
if type
|
164
|
+
if val.respond_to?(:each)
|
165
|
+
val.each {|v| raise ArgumentError.new("#{val.class} type is invalid. #{self.class} #{key} requires #{type}.") unless v.is_a?(type)}
|
166
|
+
else
|
167
|
+
unless val.is_a?(type)
|
168
|
+
raise ArgumentError.new("#{val.class} type is invalid. #{self.class} #{key} requires #{type}.")
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
168
174
|
def options_for(key)
|
169
175
|
self.class.declared_elements[key]
|
170
176
|
end
|
171
177
|
|
172
178
|
def read(method_id)
|
173
179
|
if elements.has_key?(method_id)
|
174
|
-
elements[method_id]
|
180
|
+
obj = elements[method_id]
|
181
|
+
if obj.is_a?(Body)
|
182
|
+
elements[method_id]
|
183
|
+
else
|
184
|
+
elements[method_id].value
|
185
|
+
end
|
175
186
|
else
|
176
187
|
attributes[method_id].value
|
177
188
|
end
|
@@ -180,7 +191,14 @@ module AcDc
|
|
180
191
|
def write(method_id, *args, &block)
|
181
192
|
key = method_id.to_s.gsub(/\=$/,"").to_sym
|
182
193
|
if elements.has_key?(key)
|
183
|
-
|
194
|
+
type = options_for(key)[:type]
|
195
|
+
if type and type.ancestors.include?(Body)
|
196
|
+
elements.update(key => type.new(args.first.to_hash, options_for(key)))
|
197
|
+
elsif type
|
198
|
+
elements.update(key => type.new(args.first, options_for(key)))
|
199
|
+
else
|
200
|
+
elements.update(key => Element(args.first, options_for(key)))
|
201
|
+
end
|
184
202
|
else
|
185
203
|
attributes.update(key => Attribute(key,args.first))
|
186
204
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acdc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Clint Hill
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-03 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|