clinth3o-acdc 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/lib/acdc/body.rb CHANGED
@@ -38,9 +38,9 @@ module AcDc
38
38
  else
39
39
  raise ArgumentError.new("Type is invalid") unless val.is_a?(type)
40
40
  end
41
- elements.update(key => type.new(val,options_for(key),key))
41
+ elements.update(key => type.new(val, options_for(key)))
42
42
  else
43
- elements.update(key => Element(val,options_for(key),key))
43
+ elements.update(key => Element(val, options_for(key)))
44
44
  end
45
45
  end
46
46
  end
@@ -51,7 +51,7 @@ module AcDc
51
51
  xml = Builder::XmlMarkup.new
52
52
  attrs = attributes.inject({}){|acc,attr| acc.update(attr[1].to_hash)}
53
53
  xml.tag!(tag_name,attrs){ |body|
54
- elements.each do |key, elem|
54
+ elements.sort{|a,b| a[1].sequence <=> b[1].sequence}.each do |key, elem|
55
55
  body << elem.acdc
56
56
  end
57
57
  }
@@ -76,17 +76,22 @@ module AcDc
76
76
  def inherited(child)
77
77
  child.instance_variable_set('@declared_elements', @declared_elements)
78
78
  child.instance_variable_set('@declared_attributes', @declared_attributes)
79
+ child.instance_variable_set('@element_sequence', @element_sequence)
79
80
  end
80
81
 
81
82
  # Declare an Element for this Body
83
+ # Sequence of elements (XML Schema sequence) is taken care of by the order
84
+ # the elements are declared in the class definition.
82
85
  #@param [Symbol] name A name to assign the Element (tag name)
83
86
  #@param [Class] type A type to use for the element (enforcement)
84
87
  #@option options [Boolean] :single False if object is a collection
88
+ #@option options [String] :tag String determining the name to use in the XML tag
85
89
  def element(*options)
86
90
  name = options.first
87
- type = options.second || nil
91
+ type = options.second || nil unless options.second.is_a?(Hash)
88
92
  opts = options.extract_options!
89
- declared_elements.update(name => opts.merge(:type => type))
93
+ opts.merge!(:tag => name) if opts[:tag].nil?
94
+ declared_elements.update(name => opts.merge(:type => type, :sequence => next_sequence))
90
95
  end
91
96
 
92
97
  # Declare an attribute for this Body
@@ -137,6 +142,11 @@ module AcDc
137
142
  klass = name.constantize
138
143
  klass.new(value_from_node(node), :attributes => attrs)
139
144
  end
145
+
146
+ def next_sequence
147
+ @element_sequence ||= 0
148
+ @element_sequence = @element_sequence +=1
149
+ end
140
150
  end
141
151
 
142
152
  private
@@ -156,7 +166,7 @@ module AcDc
156
166
  def write(method_id, *args, &block)
157
167
  key = method_id.to_s.gsub(/\=$/,"").to_sym
158
168
  if elements.has_key?(key)
159
- elements.update(key => Element(args.first,options_for(key),key))
169
+ elements.update(key => Element(args.first, options_for(key)))
160
170
  else
161
171
  attributes.update(key => Attribute(key,args.first))
162
172
  end
data/lib/acdc/element.rb CHANGED
@@ -8,9 +8,9 @@ module AcDc
8
8
  # Constructor with the following:
9
9
  #@param [Object] value Any value to place in the tags
10
10
  #@option options [Boolean] :single False if object is a collection
11
- #@param [String] tag A tag name to use if not Element
12
- def initialize(value, options={}, tag=nil)
13
- @tag = tag ||= self.class.to_s.split("::").last
11
+ #@option options [String] :tag A tag name to use if not Element
12
+ def initialize(value, options={})
13
+ @tag = options[:tag] ||= self.class.to_s.split("::").last
14
14
  @value = value
15
15
  @options = options
16
16
  @attributes = options.delete(:attributes)
@@ -33,8 +33,8 @@ module AcDc
33
33
  end
34
34
 
35
35
  # The name to use for the tag
36
- def tag_name
37
- tag.to_s.camelize
36
+ def tag_name
37
+ tag.to_s
38
38
  end
39
39
 
40
40
  # Overridden to compare the values and not the whole object
@@ -44,6 +44,10 @@ module AcDc
44
44
  value.eql?(other.value)
45
45
  end
46
46
 
47
+ def sequence
48
+ @options[:sequence]
49
+ end
50
+
47
51
  private
48
52
  def tag_content
49
53
  (attributes.nil? or attributes.empty?) ? tag_name : [tag_name,attributes]
data/lib/acdc.rb CHANGED
@@ -9,7 +9,7 @@ require File.join(File.dirname(__FILE__),"acdc","body")
9
9
 
10
10
  module AcDc
11
11
 
12
- VERSION = [0,1,4] unless defined?(AcDc::VERSION)
12
+ VERSION = [0,1,5] unless defined?(AcDc::VERSION)
13
13
 
14
14
  if defined?(JAIL_BREAK)
15
15
  Element.class_eval{ alias :to_s :acdc }
@@ -19,8 +19,8 @@ module AcDc
19
19
  end
20
20
 
21
21
  # Will construct a AcDc::Element classs
22
- def Element(value, options = {}, name = nil)
23
- AcDc::Element.new(value,options,name)
22
+ def Element(value, options = {})
23
+ AcDc::Element.new(value,options)
24
24
  end
25
25
 
26
26
  # Will construct a AcDc::Attribute class
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clinth3o-acdc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Clint Hill