xml_mapper 0.5.0 → 0.5.1

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.rdoc CHANGED
@@ -79,8 +79,10 @@ Declarative mapping of XML files to ruby attributes
79
79
  text :producer => { :contributions => :producer } # assigns to content at xpath :performer to attributes[:contributions][:producer]
80
80
  end
81
81
 
82
- after_map do # is called after attributes are extracted, self references the extracted attributes
82
+ after_map do # is called after attributes are extracted, self references the extracted attributes
83
83
  self[:tracks_count] = self[:tracks].length
84
+ self[:xml_path] = self.xml_path # lets you access the xml_path when called with attributes_from_xml_path
85
+ self[:other_tracks_count] = self.node.search("track").count # lets you access the current xml node (in this case the whole doc)
84
86
  end
85
87
 
86
88
  # to be used for after_map callbacks
@@ -92,7 +94,7 @@ Declarative mapping of XML files to ruby attributes
92
94
  == How to call
93
95
 
94
96
  * MyMapper.attributes_from_xml(xml)
95
- * MyMapper.attributes_from_xml_path(xml) (also sets :xml_path)
97
+ * MyMapper.attributes_from_xml_path(xml)
96
98
 
97
99
  == Output
98
100
  {
@@ -105,7 +107,7 @@ Declarative mapping of XML files to ruby attributes
105
107
  :explicit_lyrics=>false, :contributions=>{:performer=>"Mos Def", :producer=>"DJ Premier"}, :isrc=>"2345"
106
108
  }
107
109
  ],
108
- :tracks_count=>2, :released_in=>1999, :xml_path=>"/Users/tobias/Projects/xml_mapper/spec/fixtures/base.xml",
110
+ :tracks_count=>2, :released_in=>1999,
109
111
  :released_on=>#<Date: 4902927/2,0,2299161>, :artist_name=>"Mos Def",
110
112
  :contributions=>[ {:name=>"Mos Def", :role=>"artist"}, {:name=>"DJ Premier", :role=>"producer"} ]
111
113
  :artist_id=>1212, :country=>"DE"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.5.1
data/lib/xml_mapper.rb CHANGED
@@ -68,6 +68,10 @@ class XmlMapper
68
68
  def mapper
69
69
  @mapper ||= self.new
70
70
  end
71
+
72
+ def include_mapper(clazz)
73
+ self.mapper.mappings += clazz.mapper.mappings
74
+ end
71
75
  end
72
76
 
73
77
  def initialize
@@ -761,4 +761,59 @@ describe "XmlMapper" do
761
761
  end
762
762
  end
763
763
  end
764
+
765
+ describe "#include_mapper" do
766
+ before(:each) do
767
+ @clazz = create_class
768
+ end
769
+
770
+ class Submapper < XmlMapper
771
+ text :title, :released_on
772
+ end
773
+
774
+ it "is callable" do
775
+ @clazz.include_mapper(Submapper)
776
+ end
777
+
778
+ it "works" do
779
+ xml = %(
780
+ <album>
781
+ <artist_name>Mos Def</artist_name>
782
+ <title>Black on Both Sides</title>
783
+ <released_on>2011-03-01</released_on>
784
+ </album>
785
+ )
786
+ @clazz.text "artist_name" => :artist_name
787
+ @clazz.include_mapper(Submapper)
788
+ @clazz.attributes_from_xml(xml).should == { :artist_name => "Mos Def", :title => "Black on Both Sides", :released_on => "2011-03-01" }
789
+ end
790
+
791
+ it "works for many keyword" do
792
+ xml = %(
793
+ <album>
794
+ <title>Album Title</title>
795
+ <released_on>1999-01-01</released_on>
796
+ <tracks>
797
+ <track>
798
+ <title>Track 1</title>
799
+ <released_on>1999-02-01</released_on>
800
+ </track>
801
+ <track>
802
+ <title>Track 2</title>
803
+ <released_on>1999-03-01</released_on>
804
+ </track>
805
+ </tracks>
806
+ </album>
807
+ )
808
+ @clazz.many "tracks/track" => :tracks do
809
+ include_mapper Submapper
810
+ end
811
+ @clazz.attributes_from_xml(xml).should == {
812
+ :tracks=>[
813
+ {
814
+ :released_on=>"1999-02-01", :title=>"Track 1"}, {:released_on=>"1999-03-01", :title=>"Track 2"}
815
+ ]
816
+ }
817
+ end
818
+ end
764
819
  end
data/xml_mapper.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{xml_mapper}
8
- s.version = "0.5.0"
8
+ s.version = "0.5.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tobias Schwab"]
12
- s.date = %q{2011-01-10}
12
+ s.date = %q{2011-04-07}
13
13
  s.description = %q{Declarative XML to Ruby mapping}
14
14
  s.email = %q{tobias.schwab@dynport.de}
15
15
  s.extra_rdoc_files = [
@@ -43,7 +43,7 @@ Gem::Specification.new do |s|
43
43
  s.homepage = %q{http://github.com/dynport/xml_mapper}
44
44
  s.licenses = ["MIT"]
45
45
  s.require_paths = ["lib"]
46
- s.rubygems_version = %q{1.3.7}
46
+ s.rubygems_version = %q{1.6.2}
47
47
  s.summary = %q{Declarative XML to Ruby mapping}
48
48
  s.test_files = [
49
49
  "spec/example_spec.rb",
@@ -54,7 +54,6 @@ Gem::Specification.new do |s|
54
54
  ]
55
55
 
56
56
  if s.respond_to? :specification_version then
57
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
57
  s.specification_version = 3
59
58
 
60
59
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xml_mapper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
5
- prerelease: false
4
+ hash: 9
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 0
10
- version: 0.5.0
9
+ - 1
10
+ version: 0.5.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Schwab
@@ -15,14 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-10 00:00:00 +01:00
18
+ date: 2011-04-07 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- prerelease: false
23
22
  type: :runtime
24
- name: nokogiri
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
26
24
  none: false
27
25
  requirements:
28
26
  - - ">="
@@ -31,12 +29,12 @@ dependencies:
31
29
  segments:
32
30
  - 0
33
31
  version: "0"
34
- requirement: *id001
35
- - !ruby/object:Gem::Dependency
32
+ name: nokogiri
33
+ version_requirements: *id001
36
34
  prerelease: false
35
+ - !ruby/object:Gem::Dependency
37
36
  type: :development
38
- name: autotest
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ requirement: &id002 !ruby/object:Gem::Requirement
40
38
  none: false
41
39
  requirements:
42
40
  - - ">="
@@ -45,12 +43,12 @@ dependencies:
45
43
  segments:
46
44
  - 0
47
45
  version: "0"
48
- requirement: *id002
49
- - !ruby/object:Gem::Dependency
46
+ name: autotest
47
+ version_requirements: *id002
50
48
  prerelease: false
49
+ - !ruby/object:Gem::Dependency
51
50
  type: :development
52
- name: autotest-growl
53
- version_requirements: &id003 !ruby/object:Gem::Requirement
51
+ requirement: &id003 !ruby/object:Gem::Requirement
54
52
  none: false
55
53
  requirements:
56
54
  - - ">="
@@ -59,12 +57,12 @@ dependencies:
59
57
  segments:
60
58
  - 0
61
59
  version: "0"
62
- requirement: *id003
63
- - !ruby/object:Gem::Dependency
60
+ name: autotest-growl
61
+ version_requirements: *id003
64
62
  prerelease: false
63
+ - !ruby/object:Gem::Dependency
65
64
  type: :development
66
- name: rspec
67
- version_requirements: &id004 !ruby/object:Gem::Requirement
65
+ requirement: &id004 !ruby/object:Gem::Requirement
68
66
  none: false
69
67
  requirements:
70
68
  - - ~>
@@ -75,12 +73,12 @@ dependencies:
75
73
  - 1
76
74
  - 0
77
75
  version: 2.1.0
78
- requirement: *id004
79
- - !ruby/object:Gem::Dependency
76
+ name: rspec
77
+ version_requirements: *id004
80
78
  prerelease: false
79
+ - !ruby/object:Gem::Dependency
81
80
  type: :development
82
- name: ruby-debug
83
- version_requirements: &id005 !ruby/object:Gem::Requirement
81
+ requirement: &id005 !ruby/object:Gem::Requirement
84
82
  none: false
85
83
  requirements:
86
84
  - - ">="
@@ -89,12 +87,12 @@ dependencies:
89
87
  segments:
90
88
  - 0
91
89
  version: "0"
92
- requirement: *id005
93
- - !ruby/object:Gem::Dependency
90
+ name: ruby-debug
91
+ version_requirements: *id005
94
92
  prerelease: false
93
+ - !ruby/object:Gem::Dependency
95
94
  type: :development
96
- name: cucumber
97
- version_requirements: &id006 !ruby/object:Gem::Requirement
95
+ requirement: &id006 !ruby/object:Gem::Requirement
98
96
  none: false
99
97
  requirements:
100
98
  - - ">="
@@ -103,12 +101,12 @@ dependencies:
103
101
  segments:
104
102
  - 0
105
103
  version: "0"
106
- requirement: *id006
107
- - !ruby/object:Gem::Dependency
104
+ name: cucumber
105
+ version_requirements: *id006
108
106
  prerelease: false
107
+ - !ruby/object:Gem::Dependency
109
108
  type: :development
110
- name: bundler
111
- version_requirements: &id007 !ruby/object:Gem::Requirement
109
+ requirement: &id007 !ruby/object:Gem::Requirement
112
110
  none: false
113
111
  requirements:
114
112
  - - ~>
@@ -119,12 +117,12 @@ dependencies:
119
117
  - 0
120
118
  - 0
121
119
  version: 1.0.0
122
- requirement: *id007
123
- - !ruby/object:Gem::Dependency
120
+ name: bundler
121
+ version_requirements: *id007
124
122
  prerelease: false
123
+ - !ruby/object:Gem::Dependency
125
124
  type: :development
126
- name: jeweler
127
- version_requirements: &id008 !ruby/object:Gem::Requirement
125
+ requirement: &id008 !ruby/object:Gem::Requirement
128
126
  none: false
129
127
  requirements:
130
128
  - - ~>
@@ -135,12 +133,12 @@ dependencies:
135
133
  - 5
136
134
  - 1
137
135
  version: 1.5.1
138
- requirement: *id008
139
- - !ruby/object:Gem::Dependency
136
+ name: jeweler
137
+ version_requirements: *id008
140
138
  prerelease: false
139
+ - !ruby/object:Gem::Dependency
141
140
  type: :development
142
- name: rcov
143
- version_requirements: &id009 !ruby/object:Gem::Requirement
141
+ requirement: &id009 !ruby/object:Gem::Requirement
144
142
  none: false
145
143
  requirements:
146
144
  - - ">="
@@ -149,7 +147,9 @@ dependencies:
149
147
  segments:
150
148
  - 0
151
149
  version: "0"
152
- requirement: *id009
150
+ name: rcov
151
+ version_requirements: *id009
152
+ prerelease: false
153
153
  description: Declarative XML to Ruby mapping
154
154
  email: tobias.schwab@dynport.de
155
155
  executables: []
@@ -212,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
212
  requirements: []
213
213
 
214
214
  rubyforge_project:
215
- rubygems_version: 1.3.7
215
+ rubygems_version: 1.6.2
216
216
  signing_key:
217
217
  specification_version: 3
218
218
  summary: Declarative XML to Ruby mapping