nokogiri-happymapper 0.3.3 → 0.3.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/Manifest CHANGED
@@ -18,6 +18,7 @@ lib/happymapper/text_node.rb
18
18
  lib/happymapper/version.rb
19
19
  nokogiri-happymapper.gemspec
20
20
  spec/fixtures/address.xml
21
+ spec/fixtures/ambigous_items.xml
21
22
  spec/fixtures/analytics.xml
22
23
  spec/fixtures/commit.xml
23
24
  spec/fixtures/current_weather.xml
data/README CHANGED
@@ -19,6 +19,7 @@ http://github.com/dam5s/happymapper/
19
19
  == EXAMPLES:
20
20
 
21
21
  Here is a simple example that maps Twitter statuses and users.
22
+ require 'happymapper'
22
23
 
23
24
  class User
24
25
  include HappyMapper
@@ -54,7 +55,7 @@ http://github.com/dam5s/happymapper/tree/master/examples/
54
55
 
55
56
  == INSTALL:
56
57
 
57
- * sudo gem install nokogiri-happymapper -s http://gemcutter.org
58
+ * sudo gem install nokogiri-happymapper
58
59
 
59
60
  == TICKETS:
60
61
 
data/Rakefile CHANGED
@@ -5,10 +5,10 @@ require 'spec/rake/spectask'
5
5
  require "lib/happymapper/version"
6
6
 
7
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)"
8
+ p.description = "Object to XML Mapping Library, using Nokogiri (fork from John Nunemaker's Happymapper)"
9
9
  p.install_message = "May you have many happy mappings!"
10
10
  p.url = "http://github.com/dam5s/happymapper"
11
- p.author = "Damien Le Berrigaud, John Nunemaker, David Bolton, Roland Swingler"
11
+ p.author = "Damien Le Berrigaud, John Nunemaker, David Bolton, Roland Swingler, Etienne Vallette d'Osia"
12
12
  p.email = "damien@meliondesign.com"
13
13
  p.extra_deps = ['nokogiri >=1.4.0']
14
14
  p.need_tar_gz = false
@@ -93,7 +93,11 @@ module HappyMapper
93
93
 
94
94
  # This is the entry point into the parsing pipeline, so the default
95
95
  # namespace prefix registered here will propagate down
96
- namespaces = options[:namespaces] || xml.namespaces
96
+ namespaces = options[:namespaces]
97
+ namespaces ||= {}
98
+ namespaces = namespaces.merge(xml.collect_namespaces) if xml.respond_to?(:collect_namespaces)
99
+ namespaces = namespaces.merge(xml.namespaces)
100
+
97
101
  if namespaces.has_key?("xmlns")
98
102
  namespace ||= DEFAULT_NS
99
103
  namespaces[namespace] = namespaces.delete("xmlns")
@@ -101,18 +105,24 @@ module HappyMapper
101
105
  namespace ||= DEFAULT_NS
102
106
  end
103
107
 
104
- xpath = root ? '/' : './/'
105
- xpath += "#{namespace}:" if namespace
106
- #puts "parse: #{xpath}"
107
-
108
- nodes = []
109
- # when finding nodes, do it in this order:
110
- # 1. specified tag
111
- # 2. name of element
112
- # 3. tag_name (derived from class name by default)
113
- [options[:tag], options[:name], tag_name].compact.each do |xpath_ext|
114
- nodes = node.xpath(xpath + xpath_ext.to_s, namespaces)
115
- break if nodes && nodes.size > 0
108
+ nodes = options.fetch(:nodes) do
109
+ xpath = (root ? '/' : './/')
110
+ xpath = options[:xpath].to_s.sub(/([^\/])$/, '\1/') if options[:xpath]
111
+ xpath += "#{namespace}:" if namespace
112
+ #puts "parse: #{xpath}"
113
+
114
+ nodes = []
115
+
116
+ # when finding nodes, do it in this order:
117
+ # 1. specified tag
118
+ # 2. name of element
119
+ # 3. tag_name (derived from class name by default)
120
+ [options[:tag], options[:name], tag_name].compact.each do |xpath_ext|
121
+ nodes = node.xpath(xpath + xpath_ext.to_s, namespaces)
122
+ break if nodes && !nodes.empty?
123
+ end
124
+
125
+ nodes
116
126
  end
117
127
 
118
128
  collection = nodes.collect do |n|
@@ -1,3 +1,3 @@
1
1
  module HappyMapper
2
- Version = '0.3.3'
2
+ Version = '0.3.4'
3
3
  end
@@ -2,22 +2,22 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{nokogiri-happymapper}
5
- s.version = "0.3.3"
5
+ s.version = "0.3.4"
6
6
 
7
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"]
9
- s.date = %q{2010-03-19}
10
- s.description = %q{object to xml mapping library, using nokogiri (fork from John Nunemaker's Happymapper)}
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
11
  s.email = %q{damien@meliondesign.com}
12
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/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"]
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
14
  s.homepage = %q{http://github.com/dam5s/happymapper}
15
15
  s.post_install_message = %q{May you have many happy mappings!}
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Nokogiri-happymapper", "--main", "README"]
17
17
  s.require_paths = ["lib"]
18
18
  s.rubyforge_project = %q{nokogiri-happymapper}
19
- s.rubygems_version = %q{1.3.5}
20
- s.summary = %q{object to xml mapping library, using nokogiri (fork from John Nunemaker's 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
21
 
22
22
  if s.respond_to? :specification_version then
23
23
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ambigous>
3
+ <my-items>
4
+ <item>
5
+ <name>My first item</name>
6
+ <item><name>My first internal item</name></item>
7
+ </item>
8
+ <item>
9
+ <name>My second item</name>
10
+ <item><name>My second internal item</name></item>
11
+ </item>
12
+ <item>
13
+ <name>My third item</name>
14
+ <item><name>My third internal item</name></item>
15
+ </item>
16
+ </my-items>
17
+ <others-items>
18
+ <item>
19
+ <name>Other item</name>
20
+ </item>
21
+ <others-items>
22
+ </ambigous>
@@ -378,6 +378,16 @@ module Dictionary
378
378
  end
379
379
  end
380
380
 
381
+ module AmbigousItems
382
+ class Item
383
+ include HappyMapper
384
+
385
+ tag 'item'
386
+ element :name, String
387
+ element :item, String
388
+ end
389
+ end
390
+
381
391
  describe HappyMapper do
382
392
 
383
393
  describe "being included into another class" do
@@ -386,12 +396,12 @@ describe HappyMapper do
386
396
  include HappyMapper
387
397
 
388
398
  def self.to_s
389
- 'Foo'
399
+ 'Boo'
390
400
  end
391
401
  end
392
402
  end
393
403
 
394
- class Foo; include HappyMapper end
404
+ class Boo; include HappyMapper end
395
405
 
396
406
  it "should set attributes to an array" do
397
407
  @klass.attributes.should == []
@@ -453,7 +463,7 @@ describe HappyMapper do
453
463
  end
454
464
 
455
465
  it "should default tag name to lowercase class" do
456
- @klass.tag_name.should == 'foo'
466
+ @klass.tag_name.should == 'boo'
457
467
  end
458
468
 
459
469
  it "should default tag name of class in modules to the last constant lowercase" do
@@ -467,7 +477,7 @@ describe HappyMapper do
467
477
  end
468
478
 
469
479
  it "should allow setting a namespace" do
470
- @klass.namespace(namespace = "foo")
480
+ @klass.namespace(namespace = "boo")
471
481
  @klass.namespace.should == namespace
472
482
  end
473
483
 
@@ -732,4 +742,10 @@ describe HappyMapper do
732
742
  '<em>white</em> cockatoo'
733
743
  end
734
744
  end
745
+
746
+ it "should parse ambigous items" do
747
+ items = AmbigousItems::Item.parse(fixture_file('ambigous_items.xml'),
748
+ :xpath => '/ambigous/my-items')
749
+ items.map(&:name).should == %w(first second third).map{|s| "My #{s} item" }
750
+ end
735
751
  end
metadata CHANGED
@@ -1,28 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nokogiri-happymapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 3
8
+ - 4
9
+ version: 0.3.4
5
10
  platform: ruby
6
11
  authors:
7
- - Damien Le Berrigaud, John Nunemaker, David Bolton, Roland Swingler
12
+ - Damien Le Berrigaud, John Nunemaker, David Bolton, Roland Swingler, Etienne Vallette d'Osia
8
13
  autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-03-19 00:00:00 +11:00
17
+ date: 2010-06-24 00:00:00 +10:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: nokogiri
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 4
30
+ - 0
23
31
  version: 1.4.0
24
- version:
25
- description: object to xml mapping library, using nokogiri (fork from John Nunemaker's Happymapper)
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: Object to XML Mapping Library, using Nokogiri (fork from John Nunemaker's Happymapper)
26
35
  email: damien@meliondesign.com
27
36
  executables: []
28
37
 
@@ -58,6 +67,7 @@ files:
58
67
  - lib/happymapper/version.rb
59
68
  - nokogiri-happymapper.gemspec
60
69
  - spec/fixtures/address.xml
70
+ - spec/fixtures/ambigous_items.xml
61
71
  - spec/fixtures/analytics.xml
62
72
  - spec/fixtures/commit.xml
63
73
  - spec/fixtures/current_weather.xml
@@ -101,20 +111,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
111
  requirements:
102
112
  - - ">="
103
113
  - !ruby/object:Gem::Version
114
+ segments:
115
+ - 0
104
116
  version: "0"
105
- version:
106
117
  required_rubygems_version: !ruby/object:Gem::Requirement
107
118
  requirements:
108
119
  - - ">="
109
120
  - !ruby/object:Gem::Version
121
+ segments:
122
+ - 1
123
+ - 2
110
124
  version: "1.2"
111
- version:
112
125
  requirements: []
113
126
 
114
127
  rubyforge_project: nokogiri-happymapper
115
- rubygems_version: 1.3.5
128
+ rubygems_version: 1.3.6
116
129
  signing_key:
117
130
  specification_version: 3
118
- summary: object to xml mapping library, using nokogiri (fork from John Nunemaker's Happymapper)
131
+ summary: Object to XML Mapping Library, using Nokogiri (fork from John Nunemaker's Happymapper)
119
132
  test_files: []
120
133