oxmlk 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/examples/example.rb +1 -0
- data/examples/xml/example.xml +1 -1
- data/examples/xml/phrk.xml +32 -0
- data/lib/oxmlk/attr.rb +5 -4
- data/lib/oxmlk/elem.rb +5 -3
- data/lib/oxmlk.rb +19 -5
- data/oxmlk.gemspec +3 -2
- data/spec/oxmlk/attr_spec.rb +4 -0
- data/spec/oxmlk/elem_spec.rb +4 -0
- data/spec/oxmlk_spec.rb +29 -3
- metadata +3 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
data/examples/example.rb
CHANGED
data/examples/xml/example.xml
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
<Response>
|
2
|
+
<Play loop="2">http://foo.com/cowbell.mp3</Play>
|
3
|
+
<Say voice="man" loop="4" language="en">Josh</Say>
|
4
|
+
<Gather action="/digit.php" method="GET" timeout="10" finishOnKey="4" numDigits="3">
|
5
|
+
<Say>Robinson</Say>
|
6
|
+
<Play>http://foo.com/cowbell.mp3</Play>
|
7
|
+
</Gather>
|
8
|
+
<Record action="http://foo.edu/handleRecording.php" method="GET" maxLength="20" finishOnKey="123*"/>
|
9
|
+
<Say voice="man" loop="4" language="en">Josh</Say>
|
10
|
+
<Redirect>http://www.foo.com/nextInstructions</Redirect>
|
11
|
+
<Pause length="10"/>
|
12
|
+
<Hangup/>
|
13
|
+
<Dial callerid="1234567">
|
14
|
+
<Number sendDigits="ww3">344444</Number>
|
15
|
+
</Dial>
|
16
|
+
|
17
|
+
|
18
|
+
<Rule name="open" mode="all">
|
19
|
+
<Conditions>
|
20
|
+
<Schedule mode="all" tz_offset="-7" time="08:00-17:00" year="2009-2020" month="jan-dec" day_of_week="mon-fri" day_of_month="10-20"/>
|
21
|
+
<Tags mode="all" include="monkey" exclude="tacobell"/>
|
22
|
+
</Conditions>
|
23
|
+
|
24
|
+
<Match>
|
25
|
+
<Tag>open</Tag>
|
26
|
+
</Match>
|
27
|
+
|
28
|
+
<NoMatch>
|
29
|
+
<Tag>closed</Tag>
|
30
|
+
</NoMatch>
|
31
|
+
</Rule>
|
32
|
+
</Response>
|
data/lib/oxmlk/attr.rb
CHANGED
@@ -7,15 +7,16 @@ module OxMlk
|
|
7
7
|
Symbol => :to_sym.to_proc,
|
8
8
|
:bool => proc {|a| fetch_bool(a)})
|
9
9
|
|
10
|
-
attr_reader :accessor, :setter,:from, :as, :procs, :tag
|
10
|
+
attr_reader :accessor, :setter,:from, :as, :procs, :tag_proc, :tag
|
11
11
|
|
12
12
|
def initialize(name,o={},&block)
|
13
13
|
name = name.to_s
|
14
14
|
@accessor = name.chomp('?').intern
|
15
15
|
@setter = "#{@accessor}=".intern
|
16
|
-
@from = o
|
17
|
-
@
|
18
|
-
@
|
16
|
+
@from = o[:from]
|
17
|
+
@tag_proc = o[:tag_proc].to_proc rescue proc {|x| x}
|
18
|
+
@tag = (from || (@tag_proc.call(accessor.to_s) rescue accessor)).to_s
|
19
|
+
@as = o[:as] || (:bool if name.ends_with?('?'))
|
19
20
|
@procs = ([*as].map {|k| PROCS[k]} + [block]).compact
|
20
21
|
end
|
21
22
|
|
data/lib/oxmlk/elem.rb
CHANGED
@@ -11,11 +11,13 @@ module OxMlk
|
|
11
11
|
:value => proc {|e| e.value},
|
12
12
|
:bool => proc {|e| fetch_bool(e)})
|
13
13
|
|
14
|
-
attr_reader :accessor, :setter, :collection, :from, :as, :in, :procs, :block, :tag
|
14
|
+
attr_reader :accessor, :setter, :collection, :from, :as, :in, :procs, :block, :tag_proc, :tag
|
15
15
|
|
16
16
|
def initialize(name,o={},&blk)
|
17
|
-
@
|
18
|
-
@
|
17
|
+
@tag_proc = o[:tag_proc].to_proc rescue proc {|x| x}
|
18
|
+
@base_tag = name.to_s.chomp('?')
|
19
|
+
@tag = @tag_proc.call(@base_tag) rescue @base_tag
|
20
|
+
@accessor = @base_tag.intern
|
19
21
|
@setter = "#{@accessor}=".intern
|
20
22
|
@collection = o[:as].is_a?(Array)
|
21
23
|
|
data/lib/oxmlk.rb
CHANGED
@@ -27,22 +27,33 @@ module OxMlk
|
|
27
27
|
end
|
28
28
|
|
29
29
|
module ClassMethods
|
30
|
-
attr_accessor :ox_attrs, :ox_elems
|
30
|
+
attr_accessor :ox_attrs, :ox_elems, :tag_proc
|
31
31
|
|
32
32
|
def ox_attr(name,o={})
|
33
|
-
new_attr = Attr.new(name, o)
|
33
|
+
new_attr = Attr.new(name, o.reverse_merge(:tag_proc => @tag_proc))
|
34
34
|
@ox_attrs << new_attr
|
35
35
|
attr_accessor new_attr.accessor
|
36
36
|
end
|
37
37
|
|
38
38
|
def ox_elem(name,o={})
|
39
|
-
new_elem = Elem.new(name, o)
|
39
|
+
new_elem = Elem.new(name, o.reverse_merge(:tag_proc => @tag_proc))
|
40
40
|
@ox_elems << new_elem
|
41
41
|
attr_accessor new_elem.accessor
|
42
42
|
end
|
43
43
|
|
44
|
-
def ox_tag(tag=
|
45
|
-
|
44
|
+
def ox_tag(tag=nil,&block)
|
45
|
+
raise 'you can only set tag or a block, not both.' if tag && block
|
46
|
+
|
47
|
+
@base_tag ||= self.to_s.split('::').last
|
48
|
+
@ox_tag ||= case tag
|
49
|
+
when String
|
50
|
+
tag
|
51
|
+
when Proc, Symbol, nil
|
52
|
+
@tag_proc = (block || tag || :to_s).to_proc
|
53
|
+
@tag_proc.call(@base_tag) rescue tag.to_s
|
54
|
+
else
|
55
|
+
raise 'you passed something weird'
|
56
|
+
end
|
46
57
|
end
|
47
58
|
|
48
59
|
def ox?
|
@@ -70,6 +81,9 @@ module OxMlk
|
|
70
81
|
ox
|
71
82
|
end
|
72
83
|
|
84
|
+
def xml_convention(converter=nil)
|
85
|
+
@xml_convention = converter
|
86
|
+
end
|
73
87
|
end
|
74
88
|
|
75
89
|
end
|
data/oxmlk.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{oxmlk}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Josh Robinson"]
|
12
|
-
s.date = %q{2009-09-
|
12
|
+
s.date = %q{2009-09-03}
|
13
13
|
s.description = %q{OxMlk gives you a simple way to map you ruby objects to XML and then convert one to the other.}
|
14
14
|
s.email = %q{hexorx@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"examples/twitter.rb",
|
29
29
|
"examples/xml/amazon.xml",
|
30
30
|
"examples/xml/example.xml",
|
31
|
+
"examples/xml/phrk.xml",
|
31
32
|
"examples/xml/posts.xml",
|
32
33
|
"examples/xml/twitter.xml",
|
33
34
|
"lib/oxmlk.rb",
|
data/spec/oxmlk/attr_spec.rb
CHANGED
data/spec/oxmlk/elem_spec.rb
CHANGED
@@ -124,6 +124,10 @@ describe OxMlk::Elem do
|
|
124
124
|
it 'should add :in + / to all items in array of ox objects' do
|
125
125
|
ox_elem(:name, :as => [OxKlass,OxKlass], :in => :friends).xpath.should == 'friends/name|friends/name'
|
126
126
|
end
|
127
|
+
|
128
|
+
it 'should be :tag_proc.call(name) if :tag_proc is set' do
|
129
|
+
ox_elem(:name, :tag_proc => :upcase).xpath.should == 'NAME'
|
130
|
+
end
|
127
131
|
end
|
128
132
|
end
|
129
133
|
|
data/spec/oxmlk_spec.rb
CHANGED
@@ -24,7 +24,7 @@ describe OxMlk::InstanceMethods do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'should set elements' do
|
27
|
-
@oxml.children.map(&:name).should == ['name','number','number','email','friends']
|
27
|
+
@oxml.children.map(&:name).should == ['name','lame','number','number','email','friends']
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should set content to text node' do
|
@@ -84,7 +84,6 @@ describe OxMlk::ClassMethods do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
describe '#from_xml' do
|
87
|
-
|
88
87
|
it 'should return an instance of class' do
|
89
88
|
@klass.from_xml('<person/>').should be_a(@klass)
|
90
89
|
end
|
@@ -125,7 +124,7 @@ describe OxMlk::ClassMethods do
|
|
125
124
|
|
126
125
|
describe '#ox_elems' do
|
127
126
|
it 'should return a list of elements' do
|
128
|
-
@klass.ox_elems.size.should ==
|
127
|
+
@klass.ox_elems.size.should == 4
|
129
128
|
end
|
130
129
|
end
|
131
130
|
|
@@ -137,6 +136,33 @@ describe OxMlk::ClassMethods do
|
|
137
136
|
it 'should default to class name with module removed' do
|
138
137
|
Test::Example.ox_tag.should == 'Example'
|
139
138
|
end
|
139
|
+
|
140
|
+
describe 'procs and blocs' do
|
141
|
+
before(:each) do
|
142
|
+
@klass = Class.new do
|
143
|
+
include OxMlk
|
144
|
+
|
145
|
+
def self.to_s
|
146
|
+
'ExampleTest'
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'should apply proc if set' do
|
152
|
+
@klass.ox_tag(proc {|x| x.upcase}).should == 'EXAMPLETEST'
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'should apply :sym.to_proc if set' do
|
156
|
+
@klass.ox_tag(:downcase).should == 'exampletest'
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'should apply block if passed' do
|
160
|
+
@klass.ox_tag do |x|
|
161
|
+
x.underscore
|
162
|
+
end
|
163
|
+
@klass.ox_tag.should == 'example_test'
|
164
|
+
end
|
165
|
+
end
|
140
166
|
end
|
141
167
|
end
|
142
168
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oxmlk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Robinson
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-03 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -63,6 +63,7 @@ files:
|
|
63
63
|
- examples/twitter.rb
|
64
64
|
- examples/xml/amazon.xml
|
65
65
|
- examples/xml/example.xml
|
66
|
+
- examples/xml/phrk.xml
|
66
67
|
- examples/xml/posts.xml
|
67
68
|
- examples/xml/twitter.xml
|
68
69
|
- lib/oxmlk.rb
|