xml_mapper 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
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