vtd-xml 0.0.1-java → 0.0.2-java

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.md CHANGED
@@ -27,12 +27,18 @@ With the following example XML:
27
27
  <books>
28
28
  <book title="A Tale of Two Cities" sold="200000000" firstPublished="1859">
29
29
  <author name="Charles Dickens" />
30
+ <language>English</language>
31
+ <publisher>Chapman &amp; Hall</publisher>
30
32
  </book>
31
33
  <book title="The Lord of the Rings" sold="150000000" firstPublished="1954">
32
34
  <author name="J. R. R. Tolkien" />
35
+ <language>English</language>
36
+ <publisher>George Allen &amp; Unwin</publisher>
33
37
  </book>
34
38
  <book title="The Little Prince" sold="140000000" firstPublished="1943">
35
39
  <author name="Antoine de Saint-Exupéry" />
40
+ <language>French</language>
41
+ <publisher>Gallimard</publisher>
36
42
  </book>
37
43
  </books>
38
44
  ```
@@ -77,6 +83,16 @@ node.slice('title', 'missing')
77
83
  node.attributes # => returns every attribute
78
84
  ```
79
85
 
86
+ ### Node traversal
87
+
88
+ ``` ruby
89
+ node.with_first_child('language') do |child|
90
+ child.text # => "English"
91
+ end
92
+
93
+ node['title'] # => "A Tale of Two Cities"
94
+ ```
95
+
80
96
  **See the examples directory for more.**
81
97
 
82
98
  ## Contributing
@@ -43,12 +43,18 @@ module VTD
43
43
  '<books>',
44
44
  ' <book title="A Tale of Two Cities" sold="200000000" firstPublished="1859">',
45
45
  ' <author name="Charles Dickens" />',
46
+ ' <language>English</language>',
47
+ ' <publisher>Chapman &amp; Hall</publisher>',
46
48
  ' </book>',
47
49
  ' <book title="The Lord of the Rings" sold="150000000" firstPublished="1954">',
48
50
  ' <author name="J. R. R. Tolkien" />',
51
+ ' <language>English</language>',
52
+ ' <publisher>George Allen &amp; Unwin</publisher>',
49
53
  ' </book>',
50
54
  ' <book title="The Little Prince" sold="140000000" firstPublished="1943">',
51
55
  ' <author name="Antoine de Saint-Exupéry" />',
56
+ ' <language>French</language>',
57
+ ' <publisher>Gallimard</publisher>',
52
58
  ' </book>',
53
59
  '</books>'
54
60
  end
@@ -3,6 +3,11 @@ require 'vtd/xml/node/attributes'
3
3
  module VTD
4
4
  module Xml
5
5
  class Node
6
+ TYPES = {
7
+ first_child: com.ximpleware.VTDNav::FIRST_CHILD,
8
+ parent: com.ximpleware.VTDNav::PARENT
9
+ }
10
+
6
11
  include Attributes
7
12
 
8
13
  attr_reader :name, :text
@@ -22,11 +27,34 @@ module VTD
22
27
  @text ||= string_from_index @nav.get_text
23
28
  end
24
29
 
30
+ def with_first_child(name = nil)
31
+ if move_to(:first_child, name)
32
+ yield dup
33
+ move_to(:parent)
34
+ end
35
+ end
36
+
37
+ def inspect
38
+ %(#<#{self.class}:#{self.object_id} @current=#{@current} @nav=#{@nav}>)
39
+ end
40
+
25
41
  private
26
42
 
27
43
  def string_from_index(index)
28
44
  @nav.to_normalized_string(index) if index != -1
29
45
  end
46
+
47
+ def move_to(type, name = nil)
48
+ if name
49
+ @nav.to_element(find_type(type), name)
50
+ else
51
+ @nav.to_element(find_type(type))
52
+ end
53
+ end
54
+
55
+ def find_type(type)
56
+ TYPES[type] or raise ArgumentError, "Unknown node type: #{type.inspect}"
57
+ end
30
58
  end
31
59
  end
32
60
  end
@@ -1,5 +1,5 @@
1
1
  module VTD
2
2
  module Xml
3
- VERSION = '0.0.1'
3
+ VERSION = '0.0.2'
4
4
  end
5
5
  end
@@ -2,6 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe VTD::Xml::Parser do
4
4
  let(:parser) { VTD::Xml::Parser.new 'spec/fixtures/books.xml' }
5
+ let(:book) { parser.find('//book[1]').first }
5
6
 
6
7
  it 'will pull everything that matches your XPath' do
7
8
  expect(parser.find('//book/author').to_a.length).to eq(3)
@@ -15,7 +16,6 @@ describe VTD::Xml::Parser do
15
16
  end
16
17
 
17
18
  describe 'node attributes' do
18
- let(:book) { parser.find('//book[1]').first }
19
19
  let(:title) { 'A Tale of Two Cities' }
20
20
  let(:sold) { '200000000' }
21
21
  let(:published) { '1859' }
@@ -46,4 +46,36 @@ describe VTD::Xml::Parser do
46
46
  'title' => title, 'sold' => sold, 'firstPublished' => published)
47
47
  end
48
48
  end
49
+
50
+ describe 'node elements' do
51
+ it 'can access node child element' do
52
+ book.with_first_child do |child|
53
+ expect(child['name']).to eq('Charles Dickens')
54
+ end
55
+ end
56
+
57
+ it 'can access node child elements' do
58
+ book.with_first_child('publisher') do |child|
59
+ expect(child.text).to eq('Chapman & Hall')
60
+ end
61
+ end
62
+
63
+ it 'returns nil when no element is found' do
64
+ expect { |b|
65
+ book.with_first_child('soundtrack', &b)
66
+ }.to_not yield_control
67
+ end
68
+
69
+ it 'returns the cursor back to the initial position' do
70
+ book.with_first_child('publisher') {}
71
+
72
+ expect { |b|
73
+ book.with_first_child(&b)
74
+ }.to yield_with_args
75
+
76
+ book.with_first_child do |child|
77
+ expect(child['name']).to eq('Charles Dickens')
78
+ end
79
+ end
80
+ end
49
81
  end
@@ -5,10 +5,10 @@ require 'vtd/xml/version'
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = 'vtd-xml'
7
7
  gem.version = VTD::Xml::VERSION
8
- gem.platform = 'java'
8
+ gem.platform = 'java'
9
9
 
10
- gem.authors = ['James Conroy-Finn']
11
- gem.email = ['james@logi.cl']
10
+ gem.authors = ['James Conroy-Finn', 'Jesper Kjeldgaard']
11
+ gem.email = ['james@logi.cl', 'thejspr@gmail.com']
12
12
 
13
13
  gem.description = %q{VTD-XML for JRuby}
14
14
  gem.summary = %q{A thin wrapper around the VTD-XML Java library}
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vtd-xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: java
7
7
  authors:
8
8
  - James Conroy-Finn
9
+ - Jesper Kjeldgaard
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-02-18 00:00:00.000000000 Z
13
+ date: 2013-02-19 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rake
@@ -32,6 +33,7 @@ dependencies:
32
33
  description: VTD-XML for JRuby
33
34
  email:
34
35
  - james@logi.cl
36
+ - thejspr@gmail.com
35
37
  executables: []
36
38
  extensions: []
37
39
  extra_rdoc_files: []