mapricot 0.0.4
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/History.txt +23 -0
- data/License.txt +19 -0
- data/README.rdoc +119 -0
- data/benchmark/benchmarks.rb +127 -0
- data/examples/facebook_api.rb +86 -0
- data/examples/lastfm_api.rb +42 -0
- data/examples/lastfm_api_no_request.rb +127 -0
- data/examples/readme_examples.rb +82 -0
- data/examples/xml_with_attributes.rb +26 -0
- data/lib/mapricot/abstract_doc.rb +119 -0
- data/lib/mapricot/associations.rb +100 -0
- data/lib/mapricot/attribute.rb +22 -0
- data/lib/mapricot/base.rb +81 -0
- data/lib/mapricot.rb +12 -0
- data/mapricot.gemspec +40 -0
- data/test/has_attribute/test_has_attribute.rb +42 -0
- data/test/has_many/test_has_many_ids.rb +55 -0
- data/test/has_many/test_has_many_nested.rb +81 -0
- data/test/has_one/test_has_one_id.rb +25 -0
- data/test/has_one/test_has_one_nested.rb +31 -0
- data/test/suite.rb +20 -0
- data/test/test_abstract_doc.rb +41 -0
- data/test/test_mapricot.rb +89 -0
- data/test/test_mapricot_readme.rb +105 -0
- metadata +123 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'mapricot'))
|
3
|
+
|
4
|
+
# !!!!!!!!!!!!!!!!!!
|
5
|
+
# Please look at test_mapricot_readme.rb first!!
|
6
|
+
# !!!!!!!!!!!!!!!!!!
|
7
|
+
|
8
|
+
class FeedA < Mapricot::Base
|
9
|
+
has_one :bar
|
10
|
+
end
|
11
|
+
|
12
|
+
class TestFeedA < Test::Unit::TestCase
|
13
|
+
|
14
|
+
def test_no_bar
|
15
|
+
feeda = FeedA.new(:xml => "<no></no>")
|
16
|
+
assert feeda.bar.nil?
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_empty_bar
|
20
|
+
feeda = FeedA.new(:xml => "<bar></bar>")
|
21
|
+
assert feeda.bar.empty?
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_full_bar
|
25
|
+
@feed = FeedA.new(:xml => "<bar>is full</bar>")
|
26
|
+
assert_equal "is full", @feed.bar
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
class FeedB < Mapricot::Base
|
34
|
+
has_many :bars
|
35
|
+
end
|
36
|
+
|
37
|
+
class TestFeedB < Test::Unit::TestCase
|
38
|
+
def test_many_empty_bars
|
39
|
+
feedb = FeedB.new(:xml => "<notag></notag>")
|
40
|
+
assert feedb.bars.is_a?(Array)
|
41
|
+
assert feedb.bars.empty?
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_full_bars
|
45
|
+
feedb = FeedB.new(:xml => %(
|
46
|
+
<response>
|
47
|
+
<bar>wet</bar>
|
48
|
+
<bar>full</bar>
|
49
|
+
</response>
|
50
|
+
))
|
51
|
+
|
52
|
+
assert_equal "wet", feedb.bars.first
|
53
|
+
assert_equal "full", feedb.bars.last
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
class FeedC < Mapricot::Base
|
60
|
+
has_many :bars, :xml
|
61
|
+
end
|
62
|
+
|
63
|
+
class Bar < Mapricot::Base
|
64
|
+
has_one :name
|
65
|
+
has_many :patrons
|
66
|
+
end
|
67
|
+
|
68
|
+
class TestFeedC < Test::Unit::TestCase
|
69
|
+
def test_many_empty_bars
|
70
|
+
feedc = FeedC.new(:xml => "<no></no>")
|
71
|
+
assert feedc.bars.empty?
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_many_bars
|
75
|
+
feedc = FeedC.new(:xml => %(
|
76
|
+
<response>
|
77
|
+
<bar>
|
78
|
+
<name>maroon saloon</name>
|
79
|
+
<patron>brett</patron>
|
80
|
+
<patron>chris</patron>
|
81
|
+
<patron>garon</patron>
|
82
|
+
<patron>mitch</patron>
|
83
|
+
</bar>
|
84
|
+
</response>
|
85
|
+
))
|
86
|
+
assert_equal "maroon saloon", feedc.bars.first.name
|
87
|
+
assert_equal ['brett', 'chris', 'garon', 'mitch'], feedc.bars.first.patrons
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'mapricot'))
|
3
|
+
|
4
|
+
|
5
|
+
# -------------------------- Test Example 1 of README.txt ------------------ #
|
6
|
+
class SimpleUser < Mapricot::Base
|
7
|
+
has_one :id, :integer
|
8
|
+
has_one :name, :string
|
9
|
+
has_many :pets, :string
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
class TestSimpleUser < Test::Unit::TestCase
|
14
|
+
def setup
|
15
|
+
xml = %(
|
16
|
+
<user>
|
17
|
+
<id>1</id>
|
18
|
+
<name>Bob</name>
|
19
|
+
<pet>cat</pet>
|
20
|
+
<pet>dog</pet>
|
21
|
+
</user>
|
22
|
+
)
|
23
|
+
|
24
|
+
@user = SimpleUser.new(:xml => xml)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_mapping
|
28
|
+
assert_equal 1, @user.id
|
29
|
+
assert_equal "Bob", @user.name
|
30
|
+
assert_equal ["cat", "dog"], @user.pets
|
31
|
+
end
|
32
|
+
end
|
33
|
+
# -------------------------------------------------------------------------- #
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
# -------------------------- Test Example 2 of README.txt ------------------ #
|
40
|
+
class User < Mapricot::Base
|
41
|
+
has_one :id, :integer
|
42
|
+
has_one :name # Tag type will default to :string
|
43
|
+
has_many :pets
|
44
|
+
has_one :location, :xml
|
45
|
+
has_many :hobbies, :xml
|
46
|
+
end
|
47
|
+
|
48
|
+
class Location < Mapricot::Base
|
49
|
+
has_attribute :code
|
50
|
+
has_one :city
|
51
|
+
has_one :state
|
52
|
+
end
|
53
|
+
|
54
|
+
class Hobby < Mapricot::Base
|
55
|
+
has_one :description, :string
|
56
|
+
has_one :number_of_years, :integer
|
57
|
+
end
|
58
|
+
|
59
|
+
class TestUser < Test::Unit::TestCase
|
60
|
+
def setup
|
61
|
+
xml = %(
|
62
|
+
<user>
|
63
|
+
<id>2</id>
|
64
|
+
<name>Sally</name>
|
65
|
+
<location code="ny123">
|
66
|
+
<city>New York</city>
|
67
|
+
<state>NY</state>
|
68
|
+
</location>
|
69
|
+
<hobby>
|
70
|
+
<description>Skiing</description>
|
71
|
+
<number_of_years>2</number_of_years>
|
72
|
+
</hobby>
|
73
|
+
<hobby>
|
74
|
+
<description>Hiking</description>
|
75
|
+
<number_of_years>3</number_of_years>
|
76
|
+
</hobby>
|
77
|
+
</user>
|
78
|
+
)
|
79
|
+
|
80
|
+
@user = User.new(:xml => xml)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_id_and_name
|
84
|
+
assert_equal @user.id, 2
|
85
|
+
assert_equal @user.name, "Sally"
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_location
|
89
|
+
assert_equal @user.location.city, "New York"
|
90
|
+
assert_equal @user.location.state, "NY"
|
91
|
+
assert_equal @user.location.code, "ny123"
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_hobbies
|
95
|
+
assert_equal @user.hobbies[0].description, "Skiing"
|
96
|
+
assert_equal @user.hobbies[0].number_of_years, 2
|
97
|
+
assert_equal @user.hobbies[1].description, "Hiking"
|
98
|
+
assert_equal @user.hobbies[1].number_of_years, 3
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_pets
|
102
|
+
assert @user.pets.empty? # Sally has no pets
|
103
|
+
end
|
104
|
+
end
|
105
|
+
# -------------------------------------------------------------------------- #
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mapricot
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Lou Zell
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-03-31 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: hpricot
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: nokogiri
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :runtime
|
43
|
+
version_requirements: *id002
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: libxml-ruby
|
46
|
+
prerelease: false
|
47
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
type: :runtime
|
55
|
+
version_requirements: *id003
|
56
|
+
description: XML to object mapper with an interface similar to ActiveRecord associations.
|
57
|
+
email: lzell11@gmail.com
|
58
|
+
executables: []
|
59
|
+
|
60
|
+
extensions: []
|
61
|
+
|
62
|
+
extra_rdoc_files:
|
63
|
+
- README.rdoc
|
64
|
+
files:
|
65
|
+
- README.rdoc
|
66
|
+
- History.txt
|
67
|
+
- License.txt
|
68
|
+
- mapricot.gemspec
|
69
|
+
- examples/facebook_api.rb
|
70
|
+
- examples/lastfm_api.rb
|
71
|
+
- examples/lastfm_api_no_request.rb
|
72
|
+
- examples/readme_examples.rb
|
73
|
+
- examples/xml_with_attributes.rb
|
74
|
+
- test/suite.rb
|
75
|
+
- test/test_abstract_doc.rb
|
76
|
+
- test/test_mapricot.rb
|
77
|
+
- test/test_mapricot_readme.rb
|
78
|
+
- test/has_attribute/test_has_attribute.rb
|
79
|
+
- test/has_many/test_has_many_ids.rb
|
80
|
+
- test/has_many/test_has_many_nested.rb
|
81
|
+
- test/has_one/test_has_one_id.rb
|
82
|
+
- test/has_one/test_has_one_nested.rb
|
83
|
+
- lib/mapricot.rb
|
84
|
+
- lib/mapricot/abstract_doc.rb
|
85
|
+
- lib/mapricot/associations.rb
|
86
|
+
- lib/mapricot/attribute.rb
|
87
|
+
- lib/mapricot/base.rb
|
88
|
+
- benchmark/benchmarks.rb
|
89
|
+
has_rdoc: true
|
90
|
+
homepage: http://github.com/lzell/mapricot
|
91
|
+
licenses: []
|
92
|
+
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options:
|
95
|
+
- --main
|
96
|
+
- README.rdoc
|
97
|
+
- --title
|
98
|
+
- Mapricot
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
segments:
|
106
|
+
- 0
|
107
|
+
version: "0"
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
version: "0"
|
115
|
+
requirements: []
|
116
|
+
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 1.3.6
|
119
|
+
signing_key:
|
120
|
+
specification_version: 3
|
121
|
+
summary: XML to object mapper
|
122
|
+
test_files: []
|
123
|
+
|