ryoba 1.0.0 → 2.0.0
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +16 -0
- data/Gemfile +3 -2
- data/README.md +19 -24
- data/Rakefile +0 -13
- data/lib/ryoba/error.rb +0 -0
- data/lib/ryoba/nokogiri/xml/document.rb +19 -0
- data/lib/ryoba/nokogiri/xml/node.rb +72 -20
- data/lib/ryoba/nokogiri/xml/searchable.rb +76 -12
- data/lib/ryoba/version.rb +1 -1
- data/lib/ryoba.rb +1 -0
- data/ryoba.gemspec +11 -13
- metadata +10 -69
- data/.gitignore +0 -9
- data/.travis.yml +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: dbea6a62f02bcec9504fb66b9f43619103cf4a90010e7bc56b66e650d2737e04
|
|
4
|
+
data.tar.gz: fd92a7df7d967d79ae34f527d5f0c025d1e06b53592f86f4264539a44339bf52
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 02d81589dd867ed1555ebb82123ff8cf132b571d3da5893517af6d4e7b7ccc99c54a704a271263fa0592064754329bf7d8e8692e18c9d436a5c95000d7e6d9ef
|
|
7
|
+
data.tar.gz: c0eede04b599c9d96f2f7294a778b0bc2ea53c13f17e2daeb8606e0b972e7b3776d3b94c2f6dd3c7aa33a7a94189d72b26509e20fc6fbd17d723bc7600ef4087
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
## 2.0.0
|
|
2
|
+
|
|
3
|
+
* [BREAKING] Drop support for Ruby < 3.4
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## 1.1.0
|
|
7
|
+
|
|
8
|
+
* Rename `Nokogiri::XML::Node#text!` to `#content!`, and alias as
|
|
9
|
+
`#text!` and `#inner_text!`
|
|
10
|
+
* Add `Nokogiri::XML::Node#content?`, and alias as `#inner_text?`
|
|
11
|
+
* Add `Nokogiri::XML::Document#uri`
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## 1.0.0
|
|
15
|
+
|
|
16
|
+
* Initial release
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -5,39 +5,34 @@
|
|
|
5
5
|
|
|
6
6
|
## API
|
|
7
7
|
|
|
8
|
-
- Nokogiri::XML::
|
|
9
|
-
- [
|
|
10
|
-
|
|
11
|
-
- [
|
|
12
|
-
- Nokogiri
|
|
13
|
-
|
|
14
|
-
- [
|
|
15
|
-
|
|
16
|
-
- [
|
|
17
|
-
- [
|
|
8
|
+
- [`Nokogiri::XML::Document`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Document)
|
|
9
|
+
- [`#uri`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Document:uri)
|
|
10
|
+
- [`Nokogiri::XML::Node`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Node)
|
|
11
|
+
- [`#content!`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Node:content%21)
|
|
12
|
+
- aliased as [`#inner_text!`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Node:inner_text%21)
|
|
13
|
+
- aliased as [`#text!`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Node:text%21)
|
|
14
|
+
- [`#content?`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Node:content%3F)
|
|
15
|
+
- aliased as [`#inner_text?`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Node:inner_text%3F)
|
|
16
|
+
- [`#matches!`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Node:matches%21)
|
|
17
|
+
- [`#uri`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Node:uri)
|
|
18
|
+
- [`Nokogiri::XML::Searchable`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Searchable)
|
|
19
|
+
- [`#ancestor`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Searchable:ancestor)
|
|
20
|
+
- [`#ancestor!`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Searchable:ancestor%21)
|
|
21
|
+
- [`#ancestors!`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Searchable:ancestors%21)
|
|
22
|
+
- [`#at!`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Searchable:at%21)
|
|
23
|
+
- [`#search!`](https://www.rubydoc.info/gems/ryoba/Nokogiri/XML/Searchable:search%21)
|
|
18
24
|
|
|
19
25
|
|
|
20
26
|
## Installation
|
|
21
27
|
|
|
22
|
-
Install
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
$ gem install ryoba
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Then require in your Ruby script:
|
|
29
|
-
|
|
30
|
-
```ruby
|
|
31
|
-
require "ryoba"
|
|
32
|
-
```
|
|
28
|
+
Install the [`ryoba` gem](https://rubygems.org/gems/ryoba).
|
|
33
29
|
|
|
34
30
|
|
|
35
31
|
## Contributing
|
|
36
32
|
|
|
37
|
-
Run `rake test` to run the tests.
|
|
38
|
-
interactive prompt that pre-loads the project code.
|
|
33
|
+
Run `rake test` to run the tests.
|
|
39
34
|
|
|
40
35
|
|
|
41
36
|
## License
|
|
42
37
|
|
|
43
|
-
[MIT License](
|
|
38
|
+
[MIT License](LICENSE.txt)
|
data/Rakefile
CHANGED
|
@@ -1,18 +1,5 @@
|
|
|
1
1
|
require "bundler/gem_tasks"
|
|
2
2
|
require "rake/testtask"
|
|
3
|
-
require "yard"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
YARD::Rake::YardocTask.new(:doc) do |t|
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
desc "Launch IRB with this gem pre-loaded"
|
|
10
|
-
task :irb do
|
|
11
|
-
require "ryoba"
|
|
12
|
-
require "irb"
|
|
13
|
-
ARGV.clear
|
|
14
|
-
IRB.start
|
|
15
|
-
end
|
|
16
3
|
|
|
17
4
|
Rake::TestTask.new(:test) do |t|
|
|
18
5
|
t.libs << "test"
|
data/lib/ryoba/error.rb
CHANGED
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require "uri"
|
|
2
|
+
|
|
3
|
+
class Nokogiri::XML::Document
|
|
4
|
+
|
|
5
|
+
# Constructs a URI from the Document's +url+, unless +url+ is nil.
|
|
6
|
+
#
|
|
7
|
+
# @example
|
|
8
|
+
# xml = Nokogiri::XML(<<-XML, "https://www.example.com/foo")
|
|
9
|
+
# <body>FOO</body>
|
|
10
|
+
# XML
|
|
11
|
+
#
|
|
12
|
+
# xml.uri # == URI("https://www.example.com/foo")
|
|
13
|
+
#
|
|
14
|
+
# @return [URI, nil]
|
|
15
|
+
def uri
|
|
16
|
+
URI(url) if url
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -2,25 +2,79 @@ require "uri"
|
|
|
2
2
|
|
|
3
3
|
class Nokogiri::XML::Node
|
|
4
4
|
|
|
5
|
-
# Equivalent to
|
|
5
|
+
# Equivalent to +content.strip+, but returns nil if the result is an
|
|
6
6
|
# empty string.
|
|
7
7
|
#
|
|
8
|
+
# @example
|
|
9
|
+
# xml = Nokogiri::XML(<<-XML)
|
|
10
|
+
# <body>
|
|
11
|
+
# <h1>
|
|
12
|
+
# Headline 1
|
|
13
|
+
# </h1>
|
|
14
|
+
# <h2> Headline 2 </h2>
|
|
15
|
+
# <h3> </h3>
|
|
16
|
+
# </body>
|
|
17
|
+
# XML
|
|
18
|
+
#
|
|
19
|
+
# xml.at("h1").content? # == "Headline 1"
|
|
20
|
+
# xml.at("h2").content? # == "Headline 2"
|
|
21
|
+
# xml.at("h3").content? # == nil
|
|
22
|
+
#
|
|
23
|
+
# @return [String, nil]
|
|
24
|
+
def content?
|
|
25
|
+
result = self.content.strip
|
|
26
|
+
result unless result.empty?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
alias_method :inner_text?, :content?
|
|
30
|
+
|
|
31
|
+
# Equivalent to +content.strip+, but raises an exception if the result
|
|
32
|
+
# is an empty string.
|
|
33
|
+
#
|
|
34
|
+
# @example
|
|
35
|
+
# xml = Nokogiri::XML(<<-XML)
|
|
36
|
+
# <body>
|
|
37
|
+
# <h1>
|
|
38
|
+
# Headline 1
|
|
39
|
+
# </h1>
|
|
40
|
+
# <h2> Headline 2 </h2>
|
|
41
|
+
# <h3> </h3>
|
|
42
|
+
# </body>
|
|
43
|
+
# XML
|
|
44
|
+
#
|
|
45
|
+
# xml.at("h1").content! # == "Headline 1"
|
|
46
|
+
# xml.at("h2").content! # == "Headline 2"
|
|
47
|
+
# xml.at("h3").content! # raises exception
|
|
48
|
+
#
|
|
8
49
|
# @return [String]
|
|
9
50
|
# @raise [Ryoba::Error]
|
|
10
|
-
# if
|
|
11
|
-
def
|
|
12
|
-
result = self.
|
|
51
|
+
# if +content.strip+ returns an empty string
|
|
52
|
+
def content!
|
|
53
|
+
result = self.content.strip
|
|
13
54
|
if result.empty?
|
|
14
55
|
raise Ryoba::Error.new("No text in:\n#{self.to_html}")
|
|
15
56
|
end
|
|
16
57
|
result
|
|
17
58
|
end
|
|
18
59
|
|
|
19
|
-
|
|
20
|
-
|
|
60
|
+
alias_method :inner_text!, :content!
|
|
61
|
+
alias_method :text!, :content!
|
|
62
|
+
|
|
63
|
+
# Like +Node#matches?+, but returns the Node if +selector+ matches,
|
|
64
|
+
# and raises an exception otherwise.
|
|
65
|
+
#
|
|
66
|
+
# @example
|
|
67
|
+
# xml = Nokogiri::XML(<<-XML)
|
|
68
|
+
# <body>
|
|
69
|
+
# <div id="a" class="c" />
|
|
70
|
+
# <div id="b" />
|
|
71
|
+
# </body>
|
|
72
|
+
# XML
|
|
73
|
+
#
|
|
74
|
+
# xml.at("#a").matches!(".c") # == Node div#a.c
|
|
75
|
+
# xml.at("#b").matches!(".c") # raises exception
|
|
21
76
|
#
|
|
22
77
|
# @param selector [String]
|
|
23
|
-
# selector to match
|
|
24
78
|
# @return [self]
|
|
25
79
|
# @raise [Ryoba::Error]
|
|
26
80
|
# if Node does not match +selector+
|
|
@@ -38,35 +92,33 @@ class Nokogiri::XML::Node
|
|
|
38
92
|
"form" => "action",
|
|
39
93
|
}
|
|
40
94
|
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
# {HTML_ELEMENT_URI_ATTRIBUTES}
|
|
44
|
-
#
|
|
45
|
-
#
|
|
95
|
+
# Builds a URI from a specified attribute. If no attribute is
|
|
96
|
+
# specified, an element-appropriate attribute is chosen from
|
|
97
|
+
# {HTML_ELEMENT_URI_ATTRIBUTES}, if possible. Relative URIs are
|
|
98
|
+
# converted to absolute URIs using the Node's +document.url+, if
|
|
99
|
+
# possible.
|
|
46
100
|
#
|
|
47
101
|
# @example
|
|
48
|
-
# xml = Nokogiri::XML(<<-XML, "http://localhost/qux")
|
|
102
|
+
# xml = Nokogiri::XML(<<-XML, "http://localhost/qux/")
|
|
49
103
|
# <body>
|
|
50
104
|
# <a href="https://www.example.com/foo">FOO</a>
|
|
51
|
-
# <
|
|
105
|
+
# <img src="/bar" />
|
|
106
|
+
# <div data-src="baz" />
|
|
52
107
|
# <p>blah</p>
|
|
53
108
|
# </body>
|
|
54
109
|
# XML
|
|
55
110
|
#
|
|
56
111
|
# xml.at("a").uri # == URI("https://www.example.com/foo")
|
|
57
|
-
# xml.at("
|
|
112
|
+
# xml.at("img").uri # == URI("http://localhost/bar")
|
|
113
|
+
# xml.at("div").uri("data-src") # == URI("http://localhost/qux/baz")
|
|
58
114
|
# xml.at("p").uri # == nil
|
|
59
115
|
#
|
|
60
116
|
# @param attribute_name [String]
|
|
61
|
-
# name of the attribute to return as a URI
|
|
62
117
|
# @return [URI, nil]
|
|
63
118
|
def uri(attribute_name = nil)
|
|
64
119
|
attribute_name ||= HTML_ELEMENT_URI_ATTRIBUTES[self.name]
|
|
65
120
|
url = self[attribute_name]
|
|
66
|
-
|
|
67
|
-
if url
|
|
68
|
-
self.document.url ? URI.join(self.document.url, url) : URI(url)
|
|
69
|
-
end
|
|
121
|
+
URI.join(*self.document.url, url) if url
|
|
70
122
|
end
|
|
71
123
|
|
|
72
124
|
end
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
module Nokogiri::XML::Searchable
|
|
2
2
|
|
|
3
|
-
# Like
|
|
4
|
-
#
|
|
3
|
+
# Like +#search+, but raises an exception if there are no results.
|
|
4
|
+
#
|
|
5
|
+
# @example
|
|
6
|
+
# xml = Nokogiri::XML(<<-XML)
|
|
7
|
+
# <body>
|
|
8
|
+
# <div id="a" />
|
|
9
|
+
# <div id="b" />
|
|
10
|
+
# </body>
|
|
11
|
+
# XML
|
|
12
|
+
#
|
|
13
|
+
# xml.search!("div") # == NodeSet [div#a, div#b]
|
|
14
|
+
# xml.search!("img") # raises exception
|
|
5
15
|
#
|
|
6
16
|
# @param queries [Array<String>]
|
|
7
|
-
# @return [
|
|
17
|
+
# @return [Nokogiri::XML::NodeSet]
|
|
8
18
|
# @raise [Ryoba::Error]
|
|
9
19
|
# if all queries yield no results
|
|
10
20
|
def search!(*queries)
|
|
@@ -15,8 +25,18 @@ module Nokogiri::XML::Searchable
|
|
|
15
25
|
results
|
|
16
26
|
end
|
|
17
27
|
|
|
18
|
-
# Like
|
|
19
|
-
#
|
|
28
|
+
# Like +#at+, but raises an exception if there are no results.
|
|
29
|
+
#
|
|
30
|
+
# @example
|
|
31
|
+
# xml = Nokogiri::XML(<<-XML)
|
|
32
|
+
# <body>
|
|
33
|
+
# <div id="a" />
|
|
34
|
+
# <div id="b" />
|
|
35
|
+
# </body>
|
|
36
|
+
# XML
|
|
37
|
+
#
|
|
38
|
+
# xml.at!("div") # == Node div#a
|
|
39
|
+
# xml.at!("img") # raises exception
|
|
20
40
|
#
|
|
21
41
|
# @param queries [Array<String>]
|
|
22
42
|
# @return [Nokogiri::XML::Element]
|
|
@@ -30,11 +50,27 @@ module Nokogiri::XML::Searchable
|
|
|
30
50
|
result
|
|
31
51
|
end
|
|
32
52
|
|
|
33
|
-
# Like
|
|
34
|
-
#
|
|
53
|
+
# Like +#ancestors+, but raises an exception if there are no matching
|
|
54
|
+
# ancestors.
|
|
55
|
+
#
|
|
56
|
+
# @example
|
|
57
|
+
# xml = Nokogiri::XML(<<-XML)
|
|
58
|
+
# <body>
|
|
59
|
+
# <div id="a">
|
|
60
|
+
# <div id="b">
|
|
61
|
+
# <img src="cat.jpg">
|
|
62
|
+
# </div>
|
|
63
|
+
# </div>
|
|
64
|
+
# </body>
|
|
65
|
+
# XML
|
|
66
|
+
#
|
|
67
|
+
# xml.at("img").ancestors! # == NodeSet [div#b, div#a, body]
|
|
68
|
+
# xml.at("img").ancestors!("div") # == NodeSet [div#b, div#a]
|
|
69
|
+
# xml.at("img").ancestors!("#a") # == NodeSet [div#a]
|
|
70
|
+
# xml.at("img").ancestors!("#z") # raises exception
|
|
35
71
|
#
|
|
36
72
|
# @param selector [String]
|
|
37
|
-
# @return [
|
|
73
|
+
# @return [Nokogiri::XML::NodeSet]
|
|
38
74
|
# @raise [Ryoba::Error]
|
|
39
75
|
# if no ancestors match +selector+
|
|
40
76
|
def ancestors!(selector = nil)
|
|
@@ -45,8 +81,22 @@ module Nokogiri::XML::Searchable
|
|
|
45
81
|
results
|
|
46
82
|
end
|
|
47
83
|
|
|
48
|
-
# Like
|
|
49
|
-
#
|
|
84
|
+
# Like +#ancestors+, but returns only the first matching ancestor.
|
|
85
|
+
#
|
|
86
|
+
# @example
|
|
87
|
+
# xml = Nokogiri::XML(<<-XML)
|
|
88
|
+
# <body>
|
|
89
|
+
# <div id="a">
|
|
90
|
+
# <div id="b">
|
|
91
|
+
# <img src="cat.jpg">
|
|
92
|
+
# </div>
|
|
93
|
+
# </div>
|
|
94
|
+
# </body>
|
|
95
|
+
# XML
|
|
96
|
+
#
|
|
97
|
+
# xml.at("img").ancestor # == Node div#b
|
|
98
|
+
# xml.at("img").ancestor("#a") # == Node div#a
|
|
99
|
+
# xml.at("img").ancestor("#z") # == nil
|
|
50
100
|
#
|
|
51
101
|
# @param selector [String]
|
|
52
102
|
# @return [Nokogiri::XML::Element, nil]
|
|
@@ -54,8 +104,22 @@ module Nokogiri::XML::Searchable
|
|
|
54
104
|
self.ancestors(selector).first
|
|
55
105
|
end
|
|
56
106
|
|
|
57
|
-
# Like
|
|
58
|
-
#
|
|
107
|
+
# Like {ancestors!}, but returns only the first matching ancestor.
|
|
108
|
+
#
|
|
109
|
+
# @example
|
|
110
|
+
# xml = Nokogiri::XML(<<-XML)
|
|
111
|
+
# <body>
|
|
112
|
+
# <div id="a">
|
|
113
|
+
# <div id="b">
|
|
114
|
+
# <img src="cat.jpg">
|
|
115
|
+
# </div>
|
|
116
|
+
# </div>
|
|
117
|
+
# </body>
|
|
118
|
+
# XML
|
|
119
|
+
#
|
|
120
|
+
# xml.at("img").ancestor! # == Node div#b
|
|
121
|
+
# xml.at("img").ancestor!("#a") # == Node div#a
|
|
122
|
+
# xml.at("img").ancestor!("#z") # raises exception
|
|
59
123
|
#
|
|
60
124
|
# @param selector [String]
|
|
61
125
|
# @return [Nokogiri::XML::Element]
|
data/lib/ryoba/version.rb
CHANGED
data/lib/ryoba.rb
CHANGED
data/ryoba.gemspec
CHANGED
|
@@ -1,29 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
lib = File.expand_path("../lib", __FILE__)
|
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require "ryoba/version"
|
|
1
|
+
require_relative "lib/ryoba/version"
|
|
5
2
|
|
|
6
3
|
Gem::Specification.new do |spec|
|
|
7
4
|
spec.name = "ryoba"
|
|
8
5
|
spec.version = Ryoba::VERSION
|
|
9
6
|
spec.authors = ["Jonathan Hefner"]
|
|
10
|
-
spec.email = ["jonathan
|
|
7
|
+
spec.email = ["jonathan@hefner.pro"]
|
|
11
8
|
|
|
12
9
|
spec.summary = %q{Nokogiri utility methods}
|
|
13
10
|
spec.homepage = "https://github.com/jonathanhefner/ryoba"
|
|
14
11
|
spec.license = "MIT"
|
|
12
|
+
spec.required_ruby_version = ">= 3.4"
|
|
13
|
+
|
|
14
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
|
15
|
+
spec.metadata["changelog_uri"] = spec.metadata["source_code_uri"] + "/blob/master/CHANGELOG.md"
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
# Specify which files should be added to the gem when it is released.
|
|
18
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
19
|
+
spec.files = Dir.chdir(__dir__) do
|
|
20
|
+
`git ls-files -z`.split("\x0").reject { |f| f.start_with?("test/", ".git") }
|
|
18
21
|
end
|
|
19
22
|
spec.bindir = "exe"
|
|
20
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
21
24
|
spec.require_paths = ["lib"]
|
|
22
25
|
|
|
23
|
-
spec.
|
|
24
|
-
|
|
25
|
-
spec.add_development_dependency "bundler", "~> 1.16"
|
|
26
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
|
27
|
-
spec.add_development_dependency "minitest", "~> 5.0"
|
|
28
|
-
spec.add_development_dependency "yard", "~> 0.9"
|
|
26
|
+
spec.add_dependency "nokogiri", ">= 1.6.6", "< 2.0"
|
|
29
27
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ryoba
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jonathan Hefner
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: nokogiri
|
|
@@ -30,77 +29,20 @@ dependencies:
|
|
|
30
29
|
- - "<"
|
|
31
30
|
- !ruby/object:Gem::Version
|
|
32
31
|
version: '2.0'
|
|
33
|
-
- !ruby/object:Gem::Dependency
|
|
34
|
-
name: bundler
|
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
|
36
|
-
requirements:
|
|
37
|
-
- - "~>"
|
|
38
|
-
- !ruby/object:Gem::Version
|
|
39
|
-
version: '1.16'
|
|
40
|
-
type: :development
|
|
41
|
-
prerelease: false
|
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
43
|
-
requirements:
|
|
44
|
-
- - "~>"
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: '1.16'
|
|
47
|
-
- !ruby/object:Gem::Dependency
|
|
48
|
-
name: rake
|
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
|
50
|
-
requirements:
|
|
51
|
-
- - "~>"
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: '10.0'
|
|
54
|
-
type: :development
|
|
55
|
-
prerelease: false
|
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
requirements:
|
|
58
|
-
- - "~>"
|
|
59
|
-
- !ruby/object:Gem::Version
|
|
60
|
-
version: '10.0'
|
|
61
|
-
- !ruby/object:Gem::Dependency
|
|
62
|
-
name: minitest
|
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
|
64
|
-
requirements:
|
|
65
|
-
- - "~>"
|
|
66
|
-
- !ruby/object:Gem::Version
|
|
67
|
-
version: '5.0'
|
|
68
|
-
type: :development
|
|
69
|
-
prerelease: false
|
|
70
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
71
|
-
requirements:
|
|
72
|
-
- - "~>"
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '5.0'
|
|
75
|
-
- !ruby/object:Gem::Dependency
|
|
76
|
-
name: yard
|
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
|
78
|
-
requirements:
|
|
79
|
-
- - "~>"
|
|
80
|
-
- !ruby/object:Gem::Version
|
|
81
|
-
version: '0.9'
|
|
82
|
-
type: :development
|
|
83
|
-
prerelease: false
|
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
85
|
-
requirements:
|
|
86
|
-
- - "~>"
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version: '0.9'
|
|
89
|
-
description:
|
|
90
32
|
email:
|
|
91
|
-
- jonathan
|
|
33
|
+
- jonathan@hefner.pro
|
|
92
34
|
executables: []
|
|
93
35
|
extensions: []
|
|
94
36
|
extra_rdoc_files: []
|
|
95
37
|
files:
|
|
96
|
-
-
|
|
97
|
-
- ".travis.yml"
|
|
38
|
+
- CHANGELOG.md
|
|
98
39
|
- Gemfile
|
|
99
40
|
- LICENSE.txt
|
|
100
41
|
- README.md
|
|
101
42
|
- Rakefile
|
|
102
43
|
- lib/ryoba.rb
|
|
103
44
|
- lib/ryoba/error.rb
|
|
45
|
+
- lib/ryoba/nokogiri/xml/document.rb
|
|
104
46
|
- lib/ryoba/nokogiri/xml/node.rb
|
|
105
47
|
- lib/ryoba/nokogiri/xml/searchable.rb
|
|
106
48
|
- lib/ryoba/version.rb
|
|
@@ -108,8 +50,9 @@ files:
|
|
|
108
50
|
homepage: https://github.com/jonathanhefner/ryoba
|
|
109
51
|
licenses:
|
|
110
52
|
- MIT
|
|
111
|
-
metadata:
|
|
112
|
-
|
|
53
|
+
metadata:
|
|
54
|
+
source_code_uri: https://github.com/jonathanhefner/ryoba
|
|
55
|
+
changelog_uri: https://github.com/jonathanhefner/ryoba/blob/master/CHANGELOG.md
|
|
113
56
|
rdoc_options: []
|
|
114
57
|
require_paths:
|
|
115
58
|
- lib
|
|
@@ -117,16 +60,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
117
60
|
requirements:
|
|
118
61
|
- - ">="
|
|
119
62
|
- !ruby/object:Gem::Version
|
|
120
|
-
version: '
|
|
63
|
+
version: '3.4'
|
|
121
64
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
65
|
requirements:
|
|
123
66
|
- - ">="
|
|
124
67
|
- !ruby/object:Gem::Version
|
|
125
68
|
version: '0'
|
|
126
69
|
requirements: []
|
|
127
|
-
|
|
128
|
-
rubygems_version: 2.6.13
|
|
129
|
-
signing_key:
|
|
70
|
+
rubygems_version: 4.0.10
|
|
130
71
|
specification_version: 4
|
|
131
72
|
summary: Nokogiri utility methods
|
|
132
73
|
test_files: []
|
data/.gitignore
DELETED