om 1.7.0.rc1 → 1.7.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -11,7 +11,7 @@ tmtags
11
11
  .\#*
12
12
 
13
13
  ## VIM
14
- *.swp
14
+ *.sw[po]
15
15
 
16
16
  ## PROJECT::GENERAL
17
17
  coverage
@@ -22,4 +22,4 @@ doc
22
22
  .yardoc
23
23
 
24
24
  ## PROJECT::SPECIFIC
25
-
25
+ Gemfile.lock
data/lib/om/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Om
2
- VERSION = "1.7.0.rc1"
2
+ VERSION = "1.7.0.rc2"
3
3
  end
@@ -69,7 +69,7 @@ module OM
69
69
 
70
70
  def val=(args)
71
71
  @document.ng_xml_will_change!
72
- new_values = sanitize_new_values(args.first)
72
+ new_values = term.sanitize_new_values(args.first)
73
73
  new_values.keys.sort { |a,b| a.to_i <=> b.to_i }.each do |y|
74
74
  z = new_values[y]
75
75
  ## If we pass something that already has an index on it, we should be able to add it.
@@ -82,20 +82,6 @@ module OM
82
82
  end
83
83
  end
84
84
 
85
- def sanitize_new_values(new_values)
86
- # Sanitize new_values to always be a hash with indexes
87
- case new_values
88
- when Hash
89
- new_values.each {|k, v| v = serialize(v) }
90
- when Array
91
- nv = new_values.dup
92
- new_values = {}
93
- nv.each {|v| new_values[nv.index(v).to_s] = serialize(v)}
94
- else
95
- new_values = {"0"=>serialize(new_values)}
96
- end
97
- new_values
98
- end
99
85
 
100
86
  def term_child_by_name(term, name)
101
87
  if (term.kind_of? NamedTermProxy)
@@ -109,35 +95,9 @@ module OM
109
95
  query = xpath
110
96
  trim_text = !query.index("text()").nil?
111
97
  val = @document.find_by_xpath(query).collect {|node| (trim_text ? node.text.strip : node.text) }
112
- deserialize(val)
113
- end
114
-
115
- # @param string
116
- # @return [String,Date,Integer]
117
- def deserialize(val)
118
- case term.type
119
- when :date
120
- val.map { |v| Date.parse(v)}
121
- when :integer
122
- val.map { |v| v.to_i}
123
- else
124
- val
125
- end
98
+ term.deserialize(val)
126
99
  end
127
100
 
128
- # @param val [String,Date,Integer]
129
- def serialize (val)
130
- case term.type
131
- when :date
132
- val.to_s
133
- when :integer
134
- val.to_s
135
- else
136
- val
137
- end
138
-
139
- end
140
-
141
101
  def nodeset
142
102
  query = xpath
143
103
  trim_text = !query.index("text()").nil?
data/lib/om/xml/term.rb CHANGED
@@ -203,6 +203,50 @@ class OM::XML::Term
203
203
  end
204
204
 
205
205
 
206
+ def sanitize_new_values(new_values)
207
+ # Sanitize new_values to always be a hash with indexes
208
+ case new_values
209
+ when Hash
210
+ new_values.each {|k, v| v = serialize(v) }
211
+ when Array
212
+ nv = new_values.dup
213
+ new_values = {}
214
+ nv.each {|v| new_values[nv.index(v).to_s] = serialize(v)}
215
+ else
216
+ new_values = {"0"=>serialize(new_values)}
217
+ end
218
+ new_values
219
+ end
220
+
221
+ # @param val [String,Date,Integer]
222
+ def serialize (val)
223
+ case type
224
+ when :date, :integer
225
+ val.to_s
226
+ when :boolean
227
+ val.to_s
228
+ else
229
+ val
230
+ end
231
+ end
232
+
233
+ # @param string
234
+ # @return [String,Date,Integer]
235
+ def deserialize(val)
236
+ case type
237
+ when :date
238
+ #TODO use present?
239
+ val.map { |v| !v.empty? ? Date.parse(v) : nil}
240
+ when :integer
241
+ #TODO use blank?
242
+ val.map { |v| v.empty? ? nil : v.to_i}
243
+ when :boolean
244
+ val.map { |v| v == 'true' }
245
+ else
246
+ val
247
+ end
248
+ end
249
+
206
250
  def self.from_node(mapper_xml)
207
251
  name = mapper_xml.attribute("name").text.to_sym
208
252
  attributes = {}
@@ -11,8 +11,14 @@ module OM::XML::TermValueOperators
11
11
  #if value is on line by itself sometimes does not trim leading and trailing whitespace for a text node so will detect and fix it
12
12
  trim_text = !xpath.nil? && !xpath.index("text()").nil?
13
13
  find_by_terms(*term_pointer).each {|node| result << (trim_text ? node.text.strip : node.text) }
14
- # find_by_terms(*OM.destringify(term_pointer)).each {|node| result << node.text }
15
- return result
14
+
15
+ if term_pointer.length == 1 && term_pointer.first.kind_of?(String)
16
+ logger.warn "Passing a xpath to term_values means that OM can not properly find the associated term. Pass a term pointer instead."
17
+ result
18
+ else
19
+ term = self.class.terminology.retrieve_term(*OM.pointers_to_flat_array(OM.destringify(term_pointer), false))
20
+ term.deserialize(result)
21
+ end
16
22
  end
17
23
 
18
24
  # alias for term_values
@@ -40,16 +46,10 @@ module OM::XML::TermValueOperators
40
46
  template_pointer = OM.pointers_to_flat_array(pointer,false)
41
47
  hn = OM::XML::Terminology.term_hierarchical_name(*pointer)
42
48
 
49
+ term = self.class.terminology.retrieve_term( *OM.pointers_to_flat_array(pointer,false) )
50
+
43
51
  # Sanitize new_values to always be a hash with indexes
44
- case new_values
45
- when Hash
46
- when Array
47
- nv = new_values.dup
48
- new_values = {}
49
- nv.each {|v| new_values[nv.index(v).to_s] = v}
50
- else
51
- new_values = {"0"=>new_values}
52
- end
52
+ new_values = term.sanitize_new_values(new_values)
53
53
 
54
54
  # Populate the response hash appropriately, using hierarchical names for terms as keys rather than the given pointers.
55
55
  result.delete(term_pointer)
@@ -65,7 +65,6 @@ module OM::XML::TermValueOperators
65
65
  end
66
66
 
67
67
  # Fill out the pointer completely if the final term is a NamedTermProxy
68
- term = self.class.terminology.retrieve_term( *OM.pointers_to_flat_array(pointer,false) )
69
68
  if term.kind_of? OM::XML::NamedTermProxy
70
69
  pointer.pop
71
70
  pointer = pointer.concat(term.proxy_pointer)
@@ -9,45 +9,126 @@ describe "element values" do
9
9
  t.root(:path => "outer", :xmlns => nil)
10
10
  t.my_date(:type=>:date)
11
11
  t.my_int(:type=>:integer)
12
+ t.active(:type=>:boolean)
13
+ t.wrapper do
14
+ t.inner_date(:type=>:date)
15
+ end
12
16
  end
13
17
  end
14
18
  end
15
19
 
16
- subject do
17
- ElementValueTerminology.from_xml <<-EOF
20
+
21
+ describe "when the xml template has existing values" do
22
+ subject do
23
+ ElementValueTerminology.from_xml <<-EOF
18
24
  <outer outerId="hypatia:outer" type="outer type">
19
25
  <my_date>2012-10-30</my_date>
20
26
  <my_int>7</my_int>
27
+ <active>true</active>
21
28
  </outer>
22
29
  EOF
23
- end
24
-
25
- describe "Reading from xml" do
26
- it "should handle date" do
27
- subject.my_date.should == [Date.parse('2012-10-30')]
28
30
  end
29
- it "should handle ints" do
30
- subject.my_int.should == [7]
31
+ describe "reading values" do
32
+ it "should deserialize date" do
33
+ subject.my_date.should == [Date.parse('2012-10-30')]
34
+ end
35
+ it "should deserialize ints" do
36
+ subject.my_int.should == [7]
37
+ end
38
+ it "should deserialize boolean" do
39
+ subject.active.should == [true]
40
+ end
41
+ end
42
+ describe "Writing to xml" do
43
+ it "should serialize date" do
44
+ subject.my_date = [Date.parse('2012-09-22')]
45
+ subject.to_xml.should be_equivalent_to '<?xml version="1.0"?>
46
+ <outer outerId="hypatia:outer" type="outer type">
47
+ <my_date>2012-09-22</my_date>
48
+ <my_int>7</my_int>
49
+ <active>true</active>
50
+ </outer>'
51
+ end
52
+ it "should serialize ints" do
53
+ subject.my_int = [9]
54
+ subject.to_xml.should be_equivalent_to '<?xml version="1.0"?>
55
+ <outer outerId="hypatia:outer" type="outer type">
56
+ <my_date>2012-10-30</my_date>
57
+ <my_int>9</my_int>
58
+ <active>true</active>
59
+ </outer>'
60
+ end
61
+ it "should serialize boolean" do
62
+ subject.active = [false]
63
+ subject.to_xml.should be_equivalent_to '<?xml version="1.0"?>
64
+ <outer outerId="hypatia:outer" type="outer type">
65
+ <my_date>2012-10-30</my_date>
66
+ <my_int>7</my_int>
67
+ <active>false</active>
68
+ </outer>'
69
+ end
31
70
  end
32
71
  end
33
- describe "Writing to xml" do
34
- it "should handle date" do
35
- subject.my_date = [Date.parse('2012-09-22')]
36
- subject.to_xml.should be_equivalent_to '<?xml version="1.0"?>
37
- <outer outerId="hypatia:outer" type="outer type">
38
- <my_date>2012-09-22</my_date>
39
- <my_int>7</my_int>
40
- </outer>'
72
+
73
+ describe "when the xml template is empty" do
74
+ subject do
75
+ ElementValueTerminology.from_xml <<-EOF
76
+ <outer outerId="hypatia:outer" type="outer type">
77
+ <my_date></my_date>
78
+ <my_int></my_int>
79
+ <active></active>
80
+ </outer>
81
+ EOF
41
82
  end
42
- it "should handle ints" do
43
- subject.my_int = [9]
44
- subject.to_xml.should be_equivalent_to '<?xml version="1.0"?>
45
- <outer outerId="hypatia:outer" type="outer type">
46
- <my_date>2012-10-30</my_date>
47
- <my_int>9</my_int>
48
- </outer>'
83
+ describe "reading values" do
84
+ it "should deserialize date" do
85
+ subject.my_date.should == [nil]
86
+ end
87
+ it "should deserialize ints" do
88
+ subject.my_int.should == [nil]
89
+ end
90
+ it "should deserialize bools" do
91
+ subject.active.should == [false]
92
+ end
93
+ end
94
+ describe "Writing to xml" do
95
+ it "should serialize date" do
96
+ subject.my_date = [Date.parse('2012-09-22')]
97
+ subject.to_xml.should be_equivalent_to '<?xml version="1.0"?>
98
+ <outer outerId="hypatia:outer" type="outer type">
99
+ <my_date>2012-09-22</my_date>
100
+ <my_int></my_int>
101
+ <active/>
102
+ </outer>'
103
+ end
104
+ it "should serialize ints" do
105
+ subject.my_int = [9]
106
+ subject.to_xml.should be_equivalent_to '<?xml version="1.0"?>
107
+ <outer outerId="hypatia:outer" type="outer type">
108
+ <my_date></my_date>
109
+ <my_int>9</my_int>
110
+ <active/>
111
+ </outer>'
112
+ end
113
+ it "should serialize booleans" do
114
+ subject.active = [true]
115
+ subject.to_xml.should be_equivalent_to '<?xml version="1.0"?>
116
+ <outer outerId="hypatia:outer" type="outer type">
117
+ <my_date></my_date>
118
+ <my_int></my_int>
119
+ <active>true</active>
120
+ </outer>'
121
+ end
122
+ it "should serialize nil values" do
123
+ # I'm not sure that this is the correct behavior for this. Should it remove nodes or just blank them.
124
+ subject.my_int = [nil]
125
+ subject.my_date = [nil]
126
+ subject.active = [nil]
127
+ subject.to_xml.should be_equivalent_to '<?xml version="1.0"?>
128
+ <outer outerId="hypatia:outer" type="outer type">
129
+ </outer>'
130
+ end
49
131
  end
50
132
  end
51
-
52
133
  end
53
134
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: om
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0.rc1
4
+ version: 1.7.0.rc2
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-13 00:00:00.000000000 Z
12
+ date: 2012-10-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -174,7 +174,6 @@ files:
174
174
  - GETTING_FANCY.textile
175
175
  - GETTING_STARTED.textile
176
176
  - Gemfile
177
- - Gemfile.lock
178
177
  - History.textile
179
178
  - LICENSE
180
179
  - QUERYING_DOCUMENTS.textile
data/Gemfile.lock DELETED
@@ -1,82 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- om (1.6.2)
5
- activemodel
6
- activesupport
7
- mediashelf-loggable
8
- nokogiri (>= 1.4.2)
9
-
10
- GEM
11
- remote: http://rubygems.org/
12
- specs:
13
- RedCloth (4.2.9)
14
- activemodel (3.2.8)
15
- activesupport (= 3.2.8)
16
- builder (~> 3.0.0)
17
- activesupport (3.2.8)
18
- i18n (~> 0.6)
19
- multi_json (~> 1.0)
20
- awesome_print (1.0.2)
21
- builder (3.0.0)
22
- columnize (0.3.6)
23
- debugger (1.2.0)
24
- columnize (>= 0.3.1)
25
- debugger-linecache (~> 1.1.1)
26
- debugger-ruby_core_source (~> 1.1.3)
27
- debugger-linecache (1.1.2)
28
- debugger-ruby_core_source (>= 1.1.1)
29
- debugger-ruby_core_source (1.1.3)
30
- diff-lcs (1.1.3)
31
- equivalent-xml (0.2.9)
32
- nokogiri (>= 1.4.3)
33
- i18n (0.6.0)
34
- linecache (0.46)
35
- rbx-require-relative (> 0.0.4)
36
- mediashelf-loggable (0.4.9)
37
- metaclass (0.0.1)
38
- mocha (0.12.3)
39
- metaclass (~> 0.0.1)
40
- multi_json (1.3.6)
41
- nokogiri (1.5.5)
42
- rake (0.9.2.2)
43
- rbx-require-relative (0.0.9)
44
- rcov (1.0.0)
45
- rspec (2.11.0)
46
- rspec-core (~> 2.11.0)
47
- rspec-expectations (~> 2.11.0)
48
- rspec-mocks (~> 2.11.0)
49
- rspec-core (2.11.1)
50
- rspec-expectations (2.11.2)
51
- diff-lcs (~> 1.1.3)
52
- rspec-mocks (2.11.2)
53
- ruby-debug (0.10.4)
54
- columnize (>= 0.1)
55
- ruby-debug-base (~> 0.10.4.0)
56
- ruby-debug-base (0.10.4)
57
- linecache (>= 0.3)
58
- simplecov (0.6.4)
59
- multi_json (~> 1.0)
60
- simplecov-html (~> 0.5.3)
61
- simplecov-html (0.5.3)
62
- simplecov-rcov (0.2.3)
63
- simplecov (>= 0.4.1)
64
- yard (0.8.2.1)
65
-
66
- PLATFORMS
67
- ruby
68
-
69
- DEPENDENCIES
70
- RedCloth (~> 4.2.9)
71
- awesome_print
72
- debugger
73
- equivalent-xml (>= 0.2.4)
74
- mocha (>= 0.9.8)
75
- om!
76
- rake
77
- rcov
78
- rspec (~> 2.0)
79
- ruby-debug
80
- simplecov
81
- simplecov-rcov
82
- yard