xml_mapper 0.5.6 → 0.5.7

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.6
1
+ 0.5.7
data/lib/xml_mapper.rb CHANGED
@@ -4,7 +4,7 @@ require "date"
4
4
  require "time"
5
5
 
6
6
  class XmlMapper
7
- attr_accessor :mappings, :after_map_block, :within_xpath
7
+ attr_accessor :mappings, :after_map_block, :within_xpath, :selector_mode
8
8
 
9
9
  class << self
10
10
  attr_accessor :mapper
@@ -75,6 +75,10 @@ class XmlMapper
75
75
  @mapper ||= self.new
76
76
  end
77
77
 
78
+ def selector_mode(style)
79
+ self.mapper.selector_mode = style
80
+ end
81
+
78
82
  def include_mapper(clazz)
79
83
  self.mapper.mappings += clazz.mapper.mappings
80
84
  end
@@ -82,6 +86,7 @@ class XmlMapper
82
86
 
83
87
  def initialize
84
88
  self.mappings = []
89
+ self.selector_mode = :search
85
90
  end
86
91
 
87
92
  def extract_options_from_args(args)
@@ -155,7 +160,7 @@ class XmlMapper
155
160
 
156
161
  def value_from_doc_and_mapping(doc, mapping, xml_path = nil)
157
162
  if mapping[:type] == :many
158
- mapping[:options][:mapper].attributes_from_xml(doc.search(mapping[:xpath]).to_a, xml_path)
163
+ mapping[:options][:mapper].attributes_from_xml(doc.send(self.selector_mode, mapping[:xpath]).to_a, xml_path)
159
164
  else
160
165
  node = mapping[:xpath].length == 0 ? doc : doc.xpath(mapping[:xpath]).first
161
166
  if mapping[:type] == :exists
@@ -873,4 +873,19 @@ describe "XmlMapper" do
873
873
 
874
874
  Mapper.attributes_from_xml(xml).should == { :title => "Black on Both Sides" }
875
875
  end
876
+
877
+ it "allows forcing xpath style selectors" do
878
+ mapper = create_class.new
879
+ mapper.add_mapping(:many, { "tracks/track" => :tracks }, :mapper => XmlMapper.new)
880
+ mapper.selector_mode = :xpath
881
+ node = mock("nokogiri node")
882
+ node.should_receive(:send).with(:xpath, "tracks/track")
883
+ Nokogiri.stub(:XML).and_return {node}
884
+ xml = %(
885
+ <album>
886
+ <title>Black on Both Sides</title>
887
+ </album>
888
+ )
889
+ mapper.attributes_from_xml(xml)
890
+ end
876
891
  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.6"
8
+ s.version = "0.5.7"
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-04-18}
12
+ s.date = %q{2011-08-02}
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 = [
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: 7
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 6
10
- version: 0.5.6
9
+ - 7
10
+ version: 0.5.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Schwab
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-18 00:00:00 Z
18
+ date: 2011-08-02 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  requirement: &id001 !ruby/object:Gem::Requirement