nokogiri-happymapper 0.3.4 → 0.3.5
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/lib/happymapper.rb +10 -14
- data/spec/happymapper_spec.rb +24 -24
- data/spec/spec_helper.rb +2 -8
- metadata +62 -42
- data/History +0 -59
- data/License +0 -20
- data/Manifest +0 -46
- data/Rakefile +0 -28
- data/examples/amazon.rb +0 -34
- data/examples/current_weather.rb +0 -21
- data/examples/dashed_elements.rb +0 -20
- data/examples/family_tree.rb +0 -48
- data/examples/post.rb +0 -19
- data/examples/twitter.rb +0 -37
- data/lib/happymapper/version.rb +0 -3
- data/nokogiri-happymapper.gemspec +0 -34
- data/website/css/common.css +0 -47
- data/website/index.html +0 -98
data/lib/happymapper.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'nokogiri'
|
3
2
|
require 'date'
|
4
3
|
require 'time'
|
5
|
-
require 'rubygems'
|
6
|
-
require 'nokogiri'
|
7
4
|
|
8
5
|
class Boolean; end
|
9
6
|
class XmlContent; end
|
@@ -49,7 +46,7 @@ module HappyMapper
|
|
49
46
|
def has_xml_content
|
50
47
|
attr_accessor :xml_content
|
51
48
|
end
|
52
|
-
|
49
|
+
|
53
50
|
def has_one(name, type, options={})
|
54
51
|
element name, type, {:single => true}.merge(options)
|
55
52
|
end
|
@@ -96,7 +93,6 @@ module HappyMapper
|
|
96
93
|
namespaces = options[:namespaces]
|
97
94
|
namespaces ||= {}
|
98
95
|
namespaces = namespaces.merge(xml.collect_namespaces) if xml.respond_to?(:collect_namespaces)
|
99
|
-
namespaces = namespaces.merge(xml.namespaces)
|
100
96
|
|
101
97
|
if namespaces.has_key?("xmlns")
|
102
98
|
namespace ||= DEFAULT_NS
|
@@ -134,18 +130,18 @@ module HappyMapper
|
|
134
130
|
end
|
135
131
|
|
136
132
|
elements.each do |elem|
|
137
|
-
obj.send("#{elem.method_name}=",
|
133
|
+
obj.send("#{elem.method_name}=",
|
138
134
|
elem.from_xml_node(n, namespace, namespaces))
|
139
135
|
end
|
140
136
|
|
141
|
-
obj.send("#{@text_node.method_name}=",
|
137
|
+
obj.send("#{@text_node.method_name}=",
|
142
138
|
@text_node.from_xml_node(n, namespace, namespaces)) if @text_node
|
143
139
|
|
144
140
|
if obj.respond_to?('xml_content=')
|
145
141
|
n = n.children if n.respond_to?(:children)
|
146
|
-
obj.xml_content = n.to_xml
|
142
|
+
obj.xml_content = n.to_xml
|
147
143
|
end
|
148
|
-
|
144
|
+
|
149
145
|
obj
|
150
146
|
end
|
151
147
|
|
@@ -161,7 +157,7 @@ module HappyMapper
|
|
161
157
|
end
|
162
158
|
end
|
163
159
|
|
164
|
-
require
|
165
|
-
require
|
166
|
-
require
|
167
|
-
require
|
160
|
+
require 'happymapper/item'
|
161
|
+
require 'happymapper/attribute'
|
162
|
+
require 'happymapper/element'
|
163
|
+
require 'happymapper/text_node'
|
data/spec/happymapper_spec.rb
CHANGED
@@ -5,16 +5,16 @@ require 'uri'
|
|
5
5
|
module Analytics
|
6
6
|
class Property
|
7
7
|
include HappyMapper
|
8
|
-
|
8
|
+
|
9
9
|
tag 'property'
|
10
10
|
namespace 'dxp'
|
11
11
|
attribute :name, String
|
12
12
|
attribute :value, String
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
class Entry
|
16
16
|
include HappyMapper
|
17
|
-
|
17
|
+
|
18
18
|
tag 'entry'
|
19
19
|
element :id, String
|
20
20
|
element :updated, DateTime
|
@@ -22,10 +22,10 @@ module Analytics
|
|
22
22
|
element :table_id, String, :namespace => 'dxp', :tag => 'tableId'
|
23
23
|
has_many :properties, Property
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
class Feed
|
27
27
|
include HappyMapper
|
28
|
-
|
28
|
+
|
29
29
|
tag 'feed'
|
30
30
|
element :id, String
|
31
31
|
element :updated, DateTime
|
@@ -227,14 +227,14 @@ class Status
|
|
227
227
|
|
228
228
|
element :id, Integer
|
229
229
|
element :text, String
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
230
|
+
element :created_at, Time
|
231
|
+
element :source, String
|
232
|
+
element :truncated, Boolean
|
233
|
+
element :in_reply_to_status_id, Integer
|
234
|
+
element :in_reply_to_user_id, Integer
|
235
|
+
element :favorited, Boolean
|
236
|
+
element :non_existent, String, :tag => 'dummy', :namespace => 'fake'
|
237
|
+
has_one :user, User
|
238
238
|
end
|
239
239
|
|
240
240
|
class CurrentWeather
|
@@ -256,7 +256,7 @@ end
|
|
256
256
|
|
257
257
|
class Address
|
258
258
|
include HappyMapper
|
259
|
-
|
259
|
+
|
260
260
|
tag 'address'
|
261
261
|
element :street, String
|
262
262
|
element :postcode, String
|
@@ -323,7 +323,7 @@ module QuarterTest
|
|
323
323
|
# in an ideal world, the following elements would all be
|
324
324
|
# called 'quarter' with an attribute indicating which quarter
|
325
325
|
# it represented, but the refactoring that allows a single class
|
326
|
-
# to be used for all these differently named elements is the next
|
326
|
+
# to be used for all these differently named elements is the next
|
327
327
|
# best thing
|
328
328
|
has_one :details, QuarterTest::Details
|
329
329
|
has_one :q1, QuarterTest::Quarter, :tag => 'q1'
|
@@ -344,7 +344,7 @@ end
|
|
344
344
|
|
345
345
|
class Location
|
346
346
|
include HappyMapper
|
347
|
-
|
347
|
+
|
348
348
|
tag 'point'
|
349
349
|
namespace "geo"
|
350
350
|
element :latitude, String, :tag => "lat"
|
@@ -394,7 +394,7 @@ describe HappyMapper do
|
|
394
394
|
before do
|
395
395
|
@klass = Class.new do
|
396
396
|
include HappyMapper
|
397
|
-
|
397
|
+
|
398
398
|
def self.to_s
|
399
399
|
'Boo'
|
400
400
|
end
|
@@ -672,35 +672,35 @@ describe HappyMapper do
|
|
672
672
|
last_event.address.zip.should == '327506398'
|
673
673
|
track.tran_detail.cust_tran_id.should == '20090102-111321'
|
674
674
|
end
|
675
|
-
|
675
|
+
|
676
676
|
it "should be able to parse google analytics api xml" do
|
677
677
|
data = Analytics::Feed.parse(fixture_file('analytics.xml'))
|
678
678
|
data.id.should == 'http://www.google.com/analytics/feeds/accounts/nunemaker@gmail.com'
|
679
679
|
data.entries.size.should == 4
|
680
|
-
|
680
|
+
|
681
681
|
entry = data.entries[0]
|
682
682
|
entry.title.should == 'addictedtonew.com'
|
683
683
|
entry.properties.size.should == 4
|
684
|
-
|
684
|
+
|
685
685
|
property = entry.properties[0]
|
686
686
|
property.name.should == 'ga:accountId'
|
687
687
|
property.value.should == '85301'
|
688
688
|
end
|
689
|
-
|
689
|
+
|
690
690
|
it "should allow instantiating with a string" do
|
691
691
|
module StringFoo
|
692
692
|
class Bar
|
693
693
|
include HappyMapper
|
694
694
|
has_many :things, 'StringFoo::Thing'
|
695
695
|
end
|
696
|
-
|
696
|
+
|
697
697
|
class Thing
|
698
698
|
include HappyMapper
|
699
699
|
end
|
700
700
|
end
|
701
701
|
end
|
702
|
-
|
703
|
-
|
702
|
+
|
703
|
+
it "should parse family search xml" do
|
704
704
|
tree = FamilySearch::FamilyTree.parse(fixture_file('family_tree.xml'))
|
705
705
|
tree.version.should == '1.0.20071213.942'
|
706
706
|
tree.status_message.should == 'OK'
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,7 @@
|
|
1
|
-
|
2
|
-
require 'spec'
|
3
|
-
rescue LoadError
|
4
|
-
require 'rubygems'
|
5
|
-
gem 'rspec'
|
6
|
-
require 'spec'
|
7
|
-
end
|
1
|
+
require 'spec'
|
8
2
|
|
9
3
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'happymapper')
|
10
4
|
|
11
5
|
def fixture_file(filename)
|
12
6
|
File.read(File.dirname(__FILE__) + "/fixtures/#{filename}")
|
13
|
-
end
|
7
|
+
end
|
metadata
CHANGED
@@ -5,24 +5,29 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 5
|
9
|
+
version: 0.3.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
|
-
- Damien Le Berrigaud
|
12
|
+
- Damien Le Berrigaud
|
13
|
+
- John Nunemaker
|
14
|
+
- David Bolton
|
15
|
+
- Roland Swingler
|
16
|
+
- Etienne Vallette d'Osia
|
13
17
|
autorequire:
|
14
18
|
bindir: bin
|
15
19
|
cert_chain: []
|
16
20
|
|
17
|
-
date: 2010-
|
21
|
+
date: 2010-12-21 00:00:00 +01:00
|
18
22
|
default_executable:
|
19
23
|
dependencies:
|
20
24
|
- !ruby/object:Gem::Dependency
|
21
25
|
name: nokogiri
|
22
26
|
prerelease: false
|
23
27
|
requirement: &id001 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
24
29
|
requirements:
|
25
|
-
- -
|
30
|
+
- - ~>
|
26
31
|
- !ruby/object:Gem::Version
|
27
32
|
segments:
|
28
33
|
- 1
|
@@ -31,6 +36,21 @@ dependencies:
|
|
31
36
|
version: 1.4.0
|
32
37
|
type: :runtime
|
33
38
|
version_requirements: *id001
|
39
|
+
- !ruby/object:Gem::Dependency
|
40
|
+
name: rspec
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
segments:
|
48
|
+
- 1
|
49
|
+
- 2
|
50
|
+
- 9
|
51
|
+
version: 1.2.9
|
52
|
+
type: :development
|
53
|
+
version_requirements: *id002
|
34
54
|
description: Object to XML Mapping Library, using Nokogiri (fork from John Nunemaker's Happymapper)
|
35
55
|
email: damien@meliondesign.com
|
36
56
|
executables: []
|
@@ -40,32 +60,14 @@ extensions: []
|
|
40
60
|
extra_rdoc_files:
|
41
61
|
- README
|
42
62
|
- TODO
|
63
|
+
files:
|
43
64
|
- lib/happymapper.rb
|
44
65
|
- lib/happymapper/attribute.rb
|
45
66
|
- lib/happymapper/element.rb
|
46
67
|
- lib/happymapper/item.rb
|
47
68
|
- lib/happymapper/text_node.rb
|
48
|
-
- lib/happymapper/version.rb
|
49
|
-
files:
|
50
|
-
- History
|
51
|
-
- License
|
52
|
-
- Manifest
|
53
69
|
- README
|
54
|
-
- Rakefile
|
55
70
|
- TODO
|
56
|
-
- examples/amazon.rb
|
57
|
-
- examples/current_weather.rb
|
58
|
-
- examples/dashed_elements.rb
|
59
|
-
- examples/family_tree.rb
|
60
|
-
- examples/post.rb
|
61
|
-
- examples/twitter.rb
|
62
|
-
- lib/happymapper.rb
|
63
|
-
- lib/happymapper/attribute.rb
|
64
|
-
- lib/happymapper/element.rb
|
65
|
-
- lib/happymapper/item.rb
|
66
|
-
- lib/happymapper/text_node.rb
|
67
|
-
- lib/happymapper/version.rb
|
68
|
-
- nokogiri-happymapper.gemspec
|
69
71
|
- spec/fixtures/address.xml
|
70
72
|
- spec/fixtures/ambigous_items.xml
|
71
73
|
- spec/fixtures/analytics.xml
|
@@ -91,23 +93,17 @@ files:
|
|
91
93
|
- spec/happymapper_text_node_spec.rb
|
92
94
|
- spec/spec.opts
|
93
95
|
- spec/spec_helper.rb
|
94
|
-
- website/css/common.css
|
95
|
-
- website/index.html
|
96
96
|
has_rdoc: true
|
97
97
|
homepage: http://github.com/dam5s/happymapper
|
98
98
|
licenses: []
|
99
99
|
|
100
|
-
post_install_message:
|
101
|
-
rdoc_options:
|
102
|
-
|
103
|
-
- --inline-source
|
104
|
-
- --title
|
105
|
-
- Nokogiri-happymapper
|
106
|
-
- --main
|
107
|
-
- README
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options: []
|
102
|
+
|
108
103
|
require_paths:
|
109
104
|
- lib
|
110
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
111
107
|
requirements:
|
112
108
|
- - ">="
|
113
109
|
- !ruby/object:Gem::Version
|
@@ -115,19 +111,43 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
111
|
- 0
|
116
112
|
version: "0"
|
117
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
118
115
|
requirements:
|
119
116
|
- - ">="
|
120
117
|
- !ruby/object:Gem::Version
|
121
118
|
segments:
|
122
|
-
-
|
123
|
-
|
124
|
-
version: "1.2"
|
119
|
+
- 0
|
120
|
+
version: "0"
|
125
121
|
requirements: []
|
126
122
|
|
127
|
-
rubyforge_project:
|
128
|
-
rubygems_version: 1.3.
|
123
|
+
rubyforge_project:
|
124
|
+
rubygems_version: 1.3.7
|
129
125
|
signing_key:
|
130
126
|
specification_version: 3
|
131
|
-
summary:
|
132
|
-
test_files:
|
133
|
-
|
127
|
+
summary: Provides a simple way to map XML to Ruby Objects
|
128
|
+
test_files:
|
129
|
+
- spec/fixtures/address.xml
|
130
|
+
- spec/fixtures/ambigous_items.xml
|
131
|
+
- spec/fixtures/analytics.xml
|
132
|
+
- spec/fixtures/commit.xml
|
133
|
+
- spec/fixtures/current_weather.xml
|
134
|
+
- spec/fixtures/dictionary.xml
|
135
|
+
- spec/fixtures/family_tree.xml
|
136
|
+
- spec/fixtures/lastfm.xml
|
137
|
+
- spec/fixtures/multiple_namespaces.xml
|
138
|
+
- spec/fixtures/multiple_primitives.xml
|
139
|
+
- spec/fixtures/pita.xml
|
140
|
+
- spec/fixtures/posts.xml
|
141
|
+
- spec/fixtures/product_default_namespace.xml
|
142
|
+
- spec/fixtures/product_no_namespace.xml
|
143
|
+
- spec/fixtures/product_single_namespace.xml
|
144
|
+
- spec/fixtures/quarters.xml
|
145
|
+
- spec/fixtures/radar.xml
|
146
|
+
- spec/fixtures/statuses.xml
|
147
|
+
- spec/happymapper_attribute_spec.rb
|
148
|
+
- spec/happymapper_element_spec.rb
|
149
|
+
- spec/happymapper_item_spec.rb
|
150
|
+
- spec/happymapper_spec.rb
|
151
|
+
- spec/happymapper_text_node_spec.rb
|
152
|
+
- spec/spec.opts
|
153
|
+
- spec/spec_helper.rb
|
data/History
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
== 0.2.5
|
2
|
-
* 1 minor tweak
|
3
|
-
* Classes can now be strings instead of constants so you don't have to worry about class definition order (this was all for technicalpickles, enjoy!)
|
4
|
-
|
5
|
-
== 0.2.4
|
6
|
-
* 1 minor tweak
|
7
|
-
* Added a patch that allows even crazy namespaces to work
|
8
|
-
|
9
|
-
== 0.2.3
|
10
|
-
* 1 minor tweak
|
11
|
-
* bumped the version of libxml-ruby to 1.1.3
|
12
|
-
|
13
|
-
== 0.2.2
|
14
|
-
* 2 minor tweaks
|
15
|
-
* removed GC.start (libxml recommended this) as setting nodes to nil should be enough, specs run 3-4x faster (Brandon Keepers)
|
16
|
-
* renamed get_tag_name to tag_name (Brandon Keepers)
|
17
|
-
* removed libxml helpers as they are no longer needed
|
18
|
-
|
19
|
-
== 0.2.1
|
20
|
-
* 1 minor fix, 3 major enhancements
|
21
|
-
* fixed warnings about using XML::Parser (mojodna)
|
22
|
-
* Improved namespace support, now handles multiple namespaces and allows namespaces to be set item wide or on a per element basis (mojodna)
|
23
|
-
* Auto detect root nodes (mojodna)
|
24
|
-
* Type coercion (mojodna)
|
25
|
-
|
26
|
-
== 0.2.0
|
27
|
-
* 1 major enhancement, 2 minor ehancements
|
28
|
-
* Automatic handling of namespaces (part by Robert Lowrey and rest by John Nunemaker)
|
29
|
-
* Added :root option to tag method. This allows setting an object as the root element, which sets xpath to use / and sets single to true
|
30
|
-
* Now defaulting tag names for classes in modules to last constant downcased
|
31
|
-
|
32
|
-
== 0.1.7 2009-01-29
|
33
|
-
* 1 minor enhancement
|
34
|
-
* Support dashes in elements (Josh Nichols)
|
35
|
-
|
36
|
-
== 0.1.6 2009-01-17
|
37
|
-
* 1 minor enhancement:
|
38
|
-
* added support for nested collection elements (Justin Marney)
|
39
|
-
|
40
|
-
== 0.1.5 2009-01-05
|
41
|
-
* 1 major enhancement:
|
42
|
-
* Updated to latest version of libxml-ruby (lightningdb)
|
43
|
-
|
44
|
-
== 0.1.4 2009-01-05
|
45
|
-
* 1 major enhancement:
|
46
|
-
* Fixed parsing when the object is the root node. (Garret Alfert)
|
47
|
-
|
48
|
-
== 0.1.3 2008-12-31
|
49
|
-
* 1 major enhancement:
|
50
|
-
* Added parsing of attributes of elements that are also mapped, see current_weather.rb for example (jeremyf)
|
51
|
-
|
52
|
-
== 0.1.2 2008-12-12
|
53
|
-
* 1 major enhancement:
|
54
|
-
* Fixed that :deep only worked for first item (dvrensk)
|
55
|
-
|
56
|
-
== 0.1.0 2008-11-16
|
57
|
-
|
58
|
-
* 1 major enhancement:
|
59
|
-
* Initial release
|
data/License
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
Copyright (c) 2008 John Nunemaker
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
-
a copy of this software and associated documentation files (the
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
10
|
-
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
included in all copies or substantial portions of the Software.
|
13
|
-
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Manifest
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
History
|
2
|
-
License
|
3
|
-
Manifest
|
4
|
-
README
|
5
|
-
Rakefile
|
6
|
-
TODO
|
7
|
-
examples/amazon.rb
|
8
|
-
examples/current_weather.rb
|
9
|
-
examples/dashed_elements.rb
|
10
|
-
examples/family_tree.rb
|
11
|
-
examples/post.rb
|
12
|
-
examples/twitter.rb
|
13
|
-
lib/happymapper.rb
|
14
|
-
lib/happymapper/attribute.rb
|
15
|
-
lib/happymapper/element.rb
|
16
|
-
lib/happymapper/item.rb
|
17
|
-
lib/happymapper/text_node.rb
|
18
|
-
lib/happymapper/version.rb
|
19
|
-
nokogiri-happymapper.gemspec
|
20
|
-
spec/fixtures/address.xml
|
21
|
-
spec/fixtures/ambigous_items.xml
|
22
|
-
spec/fixtures/analytics.xml
|
23
|
-
spec/fixtures/commit.xml
|
24
|
-
spec/fixtures/current_weather.xml
|
25
|
-
spec/fixtures/dictionary.xml
|
26
|
-
spec/fixtures/family_tree.xml
|
27
|
-
spec/fixtures/lastfm.xml
|
28
|
-
spec/fixtures/multiple_namespaces.xml
|
29
|
-
spec/fixtures/multiple_primitives.xml
|
30
|
-
spec/fixtures/pita.xml
|
31
|
-
spec/fixtures/posts.xml
|
32
|
-
spec/fixtures/product_default_namespace.xml
|
33
|
-
spec/fixtures/product_no_namespace.xml
|
34
|
-
spec/fixtures/product_single_namespace.xml
|
35
|
-
spec/fixtures/quarters.xml
|
36
|
-
spec/fixtures/radar.xml
|
37
|
-
spec/fixtures/statuses.xml
|
38
|
-
spec/happymapper_attribute_spec.rb
|
39
|
-
spec/happymapper_element_spec.rb
|
40
|
-
spec/happymapper_item_spec.rb
|
41
|
-
spec/happymapper_spec.rb
|
42
|
-
spec/happymapper_text_node_spec.rb
|
43
|
-
spec/spec.opts
|
44
|
-
spec/spec_helper.rb
|
45
|
-
website/css/common.css
|
46
|
-
website/index.html
|
data/Rakefile
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rake'
|
3
|
-
require 'echoe'
|
4
|
-
require 'spec/rake/spectask'
|
5
|
-
require "lib/happymapper/version"
|
6
|
-
|
7
|
-
Echoe.new('nokogiri-happymapper', HappyMapper::Version) do |p|
|
8
|
-
p.description = "Object to XML Mapping Library, using Nokogiri (fork from John Nunemaker's Happymapper)"
|
9
|
-
p.install_message = "May you have many happy mappings!"
|
10
|
-
p.url = "http://github.com/dam5s/happymapper"
|
11
|
-
p.author = "Damien Le Berrigaud, John Nunemaker, David Bolton, Roland Swingler, Etienne Vallette d'Osia"
|
12
|
-
p.email = "damien@meliondesign.com"
|
13
|
-
p.extra_deps = ['nokogiri >=1.4.0']
|
14
|
-
p.need_tar_gz = false
|
15
|
-
end
|
16
|
-
|
17
|
-
desc 'Preps the gem for a new release'
|
18
|
-
task :prepare do
|
19
|
-
%w[manifest build_gemspec].each do |task|
|
20
|
-
Rake::Task[task].invoke
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
Rake::Task[:default].prerequisites.clear
|
25
|
-
task :default => :spec
|
26
|
-
Spec::Rake::SpecTask.new do |t|
|
27
|
-
t.spec_files = FileList["spec/**/*_spec.rb"]
|
28
|
-
end
|
data/examples/amazon.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
require File.join(dir, 'happymapper')
|
3
|
-
|
4
|
-
file_contents = File.read(dir + '/../spec/fixtures/pita.xml')
|
5
|
-
|
6
|
-
# The document `pita.xml` contains both a default namespace and the 'georss'
|
7
|
-
# namespace (for the 'point' element).
|
8
|
-
module PITA
|
9
|
-
class Item
|
10
|
-
include HappyMapper
|
11
|
-
|
12
|
-
tag 'Item' # if you put class in module you need tag
|
13
|
-
element :asin, String, :tag => 'ASIN'
|
14
|
-
element :detail_page_url, String, :tag => 'DetailPageURL'
|
15
|
-
element :manufacturer, String, :tag => 'Manufacturer', :deep => true
|
16
|
-
# this is the only element that exists in a different namespace, so it
|
17
|
-
# must be explicitly specified
|
18
|
-
element :point, String, :tag => 'point', :namespace => 'georss'
|
19
|
-
end
|
20
|
-
|
21
|
-
class Items
|
22
|
-
include HappyMapper
|
23
|
-
|
24
|
-
tag 'Items' # if you put class in module you need tag
|
25
|
-
element :total_results, Integer, :tag => 'TotalResults'
|
26
|
-
element :total_pages, Integer, :tag => 'TotalPages'
|
27
|
-
has_many :items, Item
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
item = PITA::Items.parse(file_contents, :single => true)
|
32
|
-
item.items.each do |i|
|
33
|
-
puts i.asin, i.detail_page_url, i.manufacturer, ''
|
34
|
-
end
|
data/examples/current_weather.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
require File.join(dir, 'happymapper')
|
3
|
-
|
4
|
-
file_contents = File.read(dir + '/../spec/fixtures/current_weather.xml')
|
5
|
-
|
6
|
-
class CurrentWeather
|
7
|
-
include HappyMapper
|
8
|
-
|
9
|
-
tag 'ob'
|
10
|
-
namespace 'aws'
|
11
|
-
element :temperature, Integer, :tag => 'temp'
|
12
|
-
element :feels_like, Integer, :tag => 'feels-like'
|
13
|
-
element :current_condition, String, :tag => 'current-condition', :attributes => {:icon => String}
|
14
|
-
end
|
15
|
-
|
16
|
-
CurrentWeather.parse(file_contents).each do |current_weather|
|
17
|
-
puts "temperature: #{current_weather.temperature}"
|
18
|
-
puts "feels_like: #{current_weather.feels_like}"
|
19
|
-
puts "current_condition: #{current_weather.current_condition}"
|
20
|
-
puts "current_condition.icon: #{current_weather.current_condition.icon}"
|
21
|
-
end
|
data/examples/dashed_elements.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
require File.join(dir, 'happymapper')
|
3
|
-
|
4
|
-
file_contents = File.read(dir + '/../spec/fixtures/commit.xml')
|
5
|
-
|
6
|
-
module GitHub
|
7
|
-
class Commit
|
8
|
-
include HappyMapper
|
9
|
-
|
10
|
-
tag "commit"
|
11
|
-
element :url, String
|
12
|
-
element :tree, String
|
13
|
-
element :message, String
|
14
|
-
element :id, String
|
15
|
-
element :'committed-date', Date
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
commit = GitHub::Commit.parse(file_contents)
|
20
|
-
puts commit.committed_date, commit.url, commit.id
|
data/examples/family_tree.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
require File.join(dir, 'happymapper')
|
3
|
-
|
4
|
-
file_contents = File.read(dir + '/../spec/fixtures/family_tree.xml')
|
5
|
-
|
6
|
-
module FamilySearch
|
7
|
-
class AlternateIds
|
8
|
-
include HappyMapper
|
9
|
-
|
10
|
-
tag 'alternateIds'
|
11
|
-
has_many :ids, String, :tag => 'id'
|
12
|
-
end
|
13
|
-
|
14
|
-
class Information
|
15
|
-
include HappyMapper
|
16
|
-
|
17
|
-
has_one :alternateIds, AlternateIds
|
18
|
-
end
|
19
|
-
|
20
|
-
class Person
|
21
|
-
include HappyMapper
|
22
|
-
|
23
|
-
attribute :version, String
|
24
|
-
attribute :modified, Time
|
25
|
-
attribute :id, String
|
26
|
-
has_one :information, Information
|
27
|
-
end
|
28
|
-
|
29
|
-
class Persons
|
30
|
-
include HappyMapper
|
31
|
-
has_many :person, Person
|
32
|
-
end
|
33
|
-
|
34
|
-
class FamilyTree
|
35
|
-
include HappyMapper
|
36
|
-
|
37
|
-
tag 'familytree'
|
38
|
-
attribute :version, String
|
39
|
-
attribute :status_message, String, :tag => 'statusMessage'
|
40
|
-
attribute :status_code, String, :tag => 'statusCode'
|
41
|
-
has_one :persons, Persons
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
familytree = FamilySearch::FamilyTree.parse(file_contents)
|
46
|
-
familytree.persons.person.each do |p|
|
47
|
-
puts p.id, p.information.alternateIds.ids, ''
|
48
|
-
end
|
data/examples/post.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
require File.join(dir, 'happymapper')
|
3
|
-
|
4
|
-
file_contents = File.read(dir + '/../spec/fixtures/posts.xml')
|
5
|
-
|
6
|
-
class Post
|
7
|
-
include HappyMapper
|
8
|
-
|
9
|
-
attribute :href, String
|
10
|
-
attribute :hash, String
|
11
|
-
attribute :description, String
|
12
|
-
attribute :tag, String
|
13
|
-
attribute :time, DateTime
|
14
|
-
attribute :others, Integer
|
15
|
-
attribute :extended, String
|
16
|
-
end
|
17
|
-
|
18
|
-
posts = Post.parse(file_contents)
|
19
|
-
posts.each { |post| puts post.description, post.href, post.extended, '' }
|
data/examples/twitter.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
require File.join(dir, 'happymapper')
|
3
|
-
|
4
|
-
file_contents = File.read(dir + '/../spec/fixtures/statuses.xml')
|
5
|
-
|
6
|
-
class User
|
7
|
-
include HappyMapper
|
8
|
-
|
9
|
-
element :id, Integer
|
10
|
-
element :name, String
|
11
|
-
element :screen_name, String
|
12
|
-
element :location, String
|
13
|
-
element :description, String
|
14
|
-
element :profile_image_url, String
|
15
|
-
element :url, String
|
16
|
-
element :protected, Boolean
|
17
|
-
element :followers_count, Integer
|
18
|
-
end
|
19
|
-
|
20
|
-
class Status
|
21
|
-
include HappyMapper
|
22
|
-
|
23
|
-
element :id, Integer
|
24
|
-
element :text, String
|
25
|
-
element :created_at, Time
|
26
|
-
element :source, String
|
27
|
-
element :truncated, Boolean
|
28
|
-
element :in_reply_to_status_id, Integer
|
29
|
-
element :in_reply_to_user_id, Integer
|
30
|
-
element :favorited, Boolean
|
31
|
-
has_one :user, User
|
32
|
-
end
|
33
|
-
|
34
|
-
statuses = Status.parse(file_contents)
|
35
|
-
statuses.each do |status|
|
36
|
-
puts status.user.name, status.user.screen_name, status.text, status.source, ''
|
37
|
-
end
|
data/lib/happymapper/version.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = %q{nokogiri-happymapper}
|
5
|
-
s.version = "0.3.4"
|
6
|
-
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["Damien Le Berrigaud, John Nunemaker, David Bolton, Roland Swingler, Etienne Vallette d'Osia"]
|
9
|
-
s.date = %q{2010-06-24}
|
10
|
-
s.description = %q{Object to XML Mapping Library, using Nokogiri (fork from John Nunemaker's Happymapper)}
|
11
|
-
s.email = %q{damien@meliondesign.com}
|
12
|
-
s.extra_rdoc_files = ["README", "TODO", "lib/happymapper.rb", "lib/happymapper/attribute.rb", "lib/happymapper/element.rb", "lib/happymapper/item.rb", "lib/happymapper/text_node.rb", "lib/happymapper/version.rb"]
|
13
|
-
s.files = ["History", "License", "Manifest", "README", "Rakefile", "TODO", "examples/amazon.rb", "examples/current_weather.rb", "examples/dashed_elements.rb", "examples/family_tree.rb", "examples/post.rb", "examples/twitter.rb", "lib/happymapper.rb", "lib/happymapper/attribute.rb", "lib/happymapper/element.rb", "lib/happymapper/item.rb", "lib/happymapper/text_node.rb", "lib/happymapper/version.rb", "nokogiri-happymapper.gemspec", "spec/fixtures/address.xml", "spec/fixtures/ambigous_items.xml", "spec/fixtures/analytics.xml", "spec/fixtures/commit.xml", "spec/fixtures/current_weather.xml", "spec/fixtures/dictionary.xml", "spec/fixtures/family_tree.xml", "spec/fixtures/lastfm.xml", "spec/fixtures/multiple_namespaces.xml", "spec/fixtures/multiple_primitives.xml", "spec/fixtures/pita.xml", "spec/fixtures/posts.xml", "spec/fixtures/product_default_namespace.xml", "spec/fixtures/product_no_namespace.xml", "spec/fixtures/product_single_namespace.xml", "spec/fixtures/quarters.xml", "spec/fixtures/radar.xml", "spec/fixtures/statuses.xml", "spec/happymapper_attribute_spec.rb", "spec/happymapper_element_spec.rb", "spec/happymapper_item_spec.rb", "spec/happymapper_spec.rb", "spec/happymapper_text_node_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "website/css/common.css", "website/index.html"]
|
14
|
-
s.homepage = %q{http://github.com/dam5s/happymapper}
|
15
|
-
s.post_install_message = %q{May you have many happy mappings!}
|
16
|
-
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Nokogiri-happymapper", "--main", "README"]
|
17
|
-
s.require_paths = ["lib"]
|
18
|
-
s.rubyforge_project = %q{nokogiri-happymapper}
|
19
|
-
s.rubygems_version = %q{1.3.6}
|
20
|
-
s.summary = %q{Object to XML Mapping Library, using Nokogiri (fork from John Nunemaker's Happymapper)}
|
21
|
-
|
22
|
-
if s.respond_to? :specification_version then
|
23
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
-
s.specification_version = 3
|
25
|
-
|
26
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
|
-
s.add_runtime_dependency(%q<nokogiri>, [">= 1.4.0"])
|
28
|
-
else
|
29
|
-
s.add_dependency(%q<nokogiri>, [">= 1.4.0"])
|
30
|
-
end
|
31
|
-
else
|
32
|
-
s.add_dependency(%q<nokogiri>, [">= 1.4.0"])
|
33
|
-
end
|
34
|
-
end
|
data/website/css/common.css
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
@media screen, projection {
|
2
|
-
/*
|
3
|
-
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
|
4
|
-
Code licensed under the BSD License:
|
5
|
-
http://developer.yahoo.net/yui/license.txt
|
6
|
-
version: 2.2.0
|
7
|
-
*/
|
8
|
-
body {font:13px arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}select, input, textarea {font:99% arial,helvetica,clean,sans-serif;}pre, code {font:115% monospace;*font-size:100%;}body * {line-height:1.22em;}
|
9
|
-
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}/*ol,ul {list-style:none;}*/caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;}
|
10
|
-
/* end of yahoo reset and fonts */
|
11
|
-
|
12
|
-
body {color:#333; background:#4b1a1a; line-height:1.3;}
|
13
|
-
p {margin:0 0 20px;}
|
14
|
-
a {color:#4b1a1a;}
|
15
|
-
a:hover {text-decoration:none;}
|
16
|
-
strong {font-weight:bold;}
|
17
|
-
em {font-style:italics;}
|
18
|
-
h1,h2,h3,h4,h5,h6 {font-weight:bold;}
|
19
|
-
h1 {font-size:197%; margin:30px 0; color:#4b1a1a;}
|
20
|
-
h2 {font-size:174%; margin:20px 0; color:#b8111a;}
|
21
|
-
h3 {font-size:152%; margin:10px 0;}
|
22
|
-
h4 {font-size:129%; margin:10px 0;}
|
23
|
-
pre {background:#eee; margin:0 0 20px; padding:20px; border:1px solid #ccc; font-size:100%; overflow:auto;}
|
24
|
-
code {font-size:100%; margin:0; padding:0;}
|
25
|
-
ul, ol {margin:10px 0 10px 25px;}
|
26
|
-
ol li {margin:0 0 10px;}
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
div#wrapper {background:#fff; width:560px; margin:0 auto; padding:20px; border:10px solid #bc8c46; border-width:0 10px;}
|
33
|
-
div#header {position:relative; border-bottom:1px dotted; margin:0 0 10px; padding:0 0 10px;}
|
34
|
-
div#header p {margin:0; padding:0;}
|
35
|
-
div#header h1 {margin:0; padding:0;}
|
36
|
-
ul#nav {position:absolute; top:0; right:0; list-style:none; margin:0; padding:0;}
|
37
|
-
ul#nav li {display:inline; padding:0 0 0 5px;}
|
38
|
-
ul#nav li a {}
|
39
|
-
div#content {}
|
40
|
-
div#footer {margin:40px 0 0; border-top:1px dotted; padding:10px 0 0;}
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
}
|
data/website/index.html
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
3
|
-
<head>
|
4
|
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
5
|
-
<title>HappyMapper by John Nunemaker</title>
|
6
|
-
<link rel="stylesheet" href="css/common.css" type="text/css" />
|
7
|
-
</head>
|
8
|
-
<body>
|
9
|
-
|
10
|
-
<div id="wrapper">
|
11
|
-
<div id="header">
|
12
|
-
<h1>HappyMapper</h1>
|
13
|
-
<p>Object to xml mapping library.</p>
|
14
|
-
|
15
|
-
<ul id="nav">
|
16
|
-
<li><a href="rdoc/">Docs</a></li>
|
17
|
-
<li><a href="http://github.com/jnunemaker/happymapper">Github</a></li>
|
18
|
-
<li><a href="http://jnunemaker.lighthouseapp.com/projects/20014-happy-mapper/overview">Lighthouse</a></li>
|
19
|
-
<li><a href="http://rubyforge.org/projects/happymapper/">Rubyforge</a></li>
|
20
|
-
</ul>
|
21
|
-
</div>
|
22
|
-
|
23
|
-
<div id="content">
|
24
|
-
<h2>Install</h2>
|
25
|
-
<pre><code>$ sudo gem install happymapper</code></pre>
|
26
|
-
|
27
|
-
<h2>Examples</h2>
|
28
|
-
|
29
|
-
<h3>Given the following xml:</h3>
|
30
|
-
<pre><code><statuses type="array">
|
31
|
-
<status>
|
32
|
-
<created_at>Sat Aug 09 05:38:12 +0000 2008</created_at>
|
33
|
-
<id>882281424</id>
|
34
|
-
<text>I so just thought the guy lighting the Olympic torch was falling when he began to run on the wall. Wow that would have been catastrophic.</text>
|
35
|
-
<source>web</source>
|
36
|
-
<truncated>false</truncated>
|
37
|
-
<in_reply_to_status_id>1234</in_reply_to_status_id>
|
38
|
-
<in_reply_to_user_id>12345</in_reply_to_user_id>
|
39
|
-
<favorited></favorited>
|
40
|
-
<user>
|
41
|
-
<id>4243</id>
|
42
|
-
<name>John Nunemaker</name>
|
43
|
-
<screen_name>jnunemaker</screen_name>
|
44
|
-
<location>Mishawaka, IN, US</location>
|
45
|
-
<description>Loves his wife, ruby, notre dame football and iu basketball</description>
|
46
|
-
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/53781608/Photo_75_normal.jpg</profile_image_url>
|
47
|
-
<url>http://addictedtonew.com</url>
|
48
|
-
<protected>false</protected>
|
49
|
-
<followers_count>486</followers_count>
|
50
|
-
</user>
|
51
|
-
</status>
|
52
|
-
</statuses></code></pre>
|
53
|
-
|
54
|
-
<h3>You could have the following objects:</h3>
|
55
|
-
|
56
|
-
<pre><code>class User
|
57
|
-
include HappyMapper
|
58
|
-
|
59
|
-
element :id, Integer
|
60
|
-
element :name, String
|
61
|
-
element :screen_name, String
|
62
|
-
element :location, String
|
63
|
-
element :description, String
|
64
|
-
element :profile_image_url, String
|
65
|
-
element :url, String
|
66
|
-
element :protected, Boolean
|
67
|
-
element :followers_count, Integer
|
68
|
-
end
|
69
|
-
|
70
|
-
class Status
|
71
|
-
include HappyMapper
|
72
|
-
|
73
|
-
element :id, Integer
|
74
|
-
element :text, String
|
75
|
-
element :created_at, Time
|
76
|
-
element :source, String
|
77
|
-
element :truncated, Boolean
|
78
|
-
element :in_reply_to_status_id, Integer
|
79
|
-
element :in_reply_to_user_id, Integer
|
80
|
-
element :favorited, Boolean
|
81
|
-
has_one :user, User
|
82
|
-
end
|
83
|
-
|
84
|
-
statuses = Status.parse(file_contents)
|
85
|
-
statuses.each do |status|
|
86
|
-
puts status.user.name, status.user.screen_name, status.text, status.source, ''
|
87
|
-
end</code></pre>
|
88
|
-
|
89
|
-
<h2>Support</h2>
|
90
|
-
<p>Conversations welcome in the <a href="http://groups.google.com/group/happymapper">google group</a> and bugs/features over at <a href="http://github.com/jnunemaker/happymapper/issues/">Github</a>.</p>
|
91
|
-
</div>
|
92
|
-
|
93
|
-
<div id="footer">
|
94
|
-
<p>Created by <a href="http://addictedtonew.com/about/">John Nunemaker</a></p>
|
95
|
-
</div>
|
96
|
-
</div>
|
97
|
-
</body>
|
98
|
-
</html>
|