unhappymapper 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +479 -0
- data/TODO +0 -0
- data/lib/happymapper/attribute.rb +3 -0
- data/lib/happymapper/element.rb +3 -0
- data/lib/happymapper/item.rb +250 -0
- data/lib/happymapper/text_node.rb +3 -0
- data/lib/happymapper.rb +574 -0
- data/spec/fixtures/address.xml +8 -0
- data/spec/fixtures/ambigous_items.xml +22 -0
- data/spec/fixtures/analytics.xml +61 -0
- data/spec/fixtures/analytics_profile.xml +127 -0
- data/spec/fixtures/commit.xml +52 -0
- data/spec/fixtures/current_weather.xml +89 -0
- data/spec/fixtures/dictionary.xml +20 -0
- data/spec/fixtures/family_tree.xml +21 -0
- data/spec/fixtures/inagy.xml +86 -0
- data/spec/fixtures/lastfm.xml +355 -0
- data/spec/fixtures/multiple_namespaces.xml +170 -0
- data/spec/fixtures/multiple_primitives.xml +5 -0
- data/spec/fixtures/pita.xml +133 -0
- data/spec/fixtures/posts.xml +23 -0
- data/spec/fixtures/product_default_namespace.xml +17 -0
- data/spec/fixtures/product_no_namespace.xml +10 -0
- data/spec/fixtures/product_single_namespace.xml +10 -0
- data/spec/fixtures/quarters.xml +19 -0
- data/spec/fixtures/radar.xml +21 -0
- data/spec/fixtures/statuses.xml +422 -0
- data/spec/fixtures/subclass_namespace.xml +50 -0
- data/spec/happymapper_attribute_spec.rb +21 -0
- data/spec/happymapper_element_spec.rb +21 -0
- data/spec/happymapper_item_spec.rb +115 -0
- data/spec/happymapper_spec.rb +941 -0
- data/spec/happymapper_text_node_spec.rb +21 -0
- data/spec/happymapper_to_xml_namespaces_spec.rb +196 -0
- data/spec/happymapper_to_xml_spec.rb +196 -0
- data/spec/ignay_spec.rb +95 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/xpath_spec.rb +88 -0
- metadata +150 -0
@@ -0,0 +1,115 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
|
3
|
+
module Foo
|
4
|
+
class Bar; end
|
5
|
+
end
|
6
|
+
|
7
|
+
describe HappyMapper::Item do
|
8
|
+
|
9
|
+
describe "new instance" do
|
10
|
+
before do
|
11
|
+
@item = HappyMapper::Item.new(:foo, String, :tag => 'foobar')
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should accept a name" do
|
15
|
+
@item.name.should == 'foo'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should accept a type' do
|
19
|
+
@item.type.should == String
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should accept :tag as an option' do
|
23
|
+
@item.tag.should == 'foobar'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should have a method_name" do
|
27
|
+
@item.method_name.should == 'foo'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#constant" do
|
32
|
+
it "should just use type if constant" do
|
33
|
+
item = HappyMapper::Item.new(:foo, String)
|
34
|
+
item.constant.should == String
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should convert string type to constant" do
|
38
|
+
item = HappyMapper::Item.new(:foo, 'String')
|
39
|
+
item.constant.should == String
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should convert string with :: to constant" do
|
43
|
+
item = HappyMapper::Item.new(:foo, 'Foo::Bar')
|
44
|
+
item.constant.should == Foo::Bar
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#method_name" do
|
49
|
+
it "should convert dashes to underscores" do
|
50
|
+
item = HappyMapper::Item.new(:'foo-bar', String, :tag => 'foobar')
|
51
|
+
item.method_name.should == 'foo_bar'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#xpath" do
|
56
|
+
it "should default to tag" do
|
57
|
+
item = HappyMapper::Item.new(:foo, String, :tag => 'foobar')
|
58
|
+
item.xpath.should == 'foobar'
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should prepend with .// if options[:deep] true" do
|
62
|
+
item = HappyMapper::Item.new(:foo, String, :tag => 'foobar', :deep => true)
|
63
|
+
item.xpath.should == './/foobar'
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should prepend namespace if namespace exists" do
|
67
|
+
item = HappyMapper::Item.new(:foo, String, :tag => 'foobar')
|
68
|
+
item.namespace = 'v2'
|
69
|
+
item.xpath.should == 'v2:foobar'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "typecasting" do
|
74
|
+
it "should work with Strings" do
|
75
|
+
item = HappyMapper::Item.new(:foo, String)
|
76
|
+
[21, '21'].each do |a|
|
77
|
+
item.typecast(a).should == '21'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should work with Integers" do
|
82
|
+
item = HappyMapper::Item.new(:foo, Integer)
|
83
|
+
[21, 21.0, '21'].each do |a|
|
84
|
+
item.typecast(a).should == 21
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should work with Floats" do
|
89
|
+
item = HappyMapper::Item.new(:foo, Float)
|
90
|
+
[21, 21.0, '21'].each do |a|
|
91
|
+
item.typecast(a).should == 21.0
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should work with Times" do
|
96
|
+
item = HappyMapper::Item.new(:foo, Time)
|
97
|
+
item.typecast('2000-01-01 01:01:01.123456').should == Time.local(2000, 1, 1, 1, 1, 1, 123456)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should work with Dates" do
|
101
|
+
item = HappyMapper::Item.new(:foo, Date)
|
102
|
+
item.typecast('2000-01-01').should == Date.new(2000, 1, 1)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should work with DateTimes" do
|
106
|
+
item = HappyMapper::Item.new(:foo, DateTime)
|
107
|
+
item.typecast('2000-01-01 00:00:00').should == DateTime.new(2000, 1, 1, 0, 0, 0)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should work with Boolean" do
|
111
|
+
item = HappyMapper::Item.new(:foo, Boolean)
|
112
|
+
item.typecast('false').should == false
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|