gutenberg_rdf 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/gutenberg_rdf.gemspec +1 -6
- data/lib/gutenberg_rdf/rdf/agent.rb +6 -6
- data/lib/gutenberg_rdf/rdf.rb +28 -22
- data/lib/gutenberg_rdf/version.rb +1 -1
- data/lib/gutenberg_rdf.rb +2 -2
- data/spec/gutenberg_rdf/rdf/agent_spec.rb +8 -8
- data/spec/gutenberg_rdf/rdf_spec.rb +18 -17
- metadata +4 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cde8f277e56fe12183ccc5386414bb2161d8fed3
|
4
|
+
data.tar.gz: c5ece359a2fa5e80addb608e5441440e9a46f2cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92fe622ad63fac10e422b6f4597d14d0fd7e933d8efbe82c68f8f103fe4112a529746eceaadcbe3457432fd9bb298c95018284292b9727d9a0ea0cd06c5ca314
|
7
|
+
data.tar.gz: 45324adf7e17df7e5faeaf1b2b599d8d73bd056d8e3ee82205950e6e1409db114d838c8fb6ef11eba9df1330d0d08a5364e2467ab07095cca50765a2bbd505f0
|
data/README.md
CHANGED
@@ -6,7 +6,6 @@ providing a nice API to all the metadata contained within.
|
|
6
6
|
## Requirements
|
7
7
|
|
8
8
|
* Ruby 2.0 - this is so we get UTF-8 by default
|
9
|
-
* Nokogiri - for parsing the RDF
|
10
9
|
|
11
10
|
|
12
11
|
## Installation
|
@@ -27,8 +26,7 @@ Or install it yourself as:
|
|
27
26
|
|
28
27
|
require 'gutenberg_rdf'
|
29
28
|
|
30
|
-
|
31
|
-
book = GutenbergRdf::Rdf.new(xml)
|
29
|
+
book = GutenbergRdf.parse('/path/to/pg2746.rdf')
|
32
30
|
|
33
31
|
puts book.id
|
34
32
|
#=> "2746"
|
data/gutenberg_rdf.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ["Mike Cook"]
|
9
9
|
spec.email = ["m@mikecook.co.uk"]
|
10
10
|
spec.summary = %q{A Ruby wrapper for the Project Gutenberg RDF catalog files.}
|
11
|
-
spec.description = %q{A Ruby wrapper
|
11
|
+
spec.description = %q{A Ruby wrapper for the Project Gutenberg RDF catalog files (requires Ruby 2).}
|
12
12
|
spec.homepage = ""
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
@@ -19,10 +19,5 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.required_ruby_version = ">= 2.0.0" # so we have UTF-8 by default
|
21
21
|
|
22
|
-
spec.add_dependency "nokogiri", "~> 1.6.0"
|
23
|
-
|
24
|
-
spec.add_development_dependency "bundler", "~> 1.3"
|
25
|
-
spec.add_development_dependency "rake"
|
26
|
-
|
27
22
|
spec.add_development_dependency "rspec", "~> 2.14.1"
|
28
23
|
end
|
@@ -8,7 +8,7 @@ module GutenbergRdf
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def id
|
11
|
-
xml.
|
11
|
+
xml.elements['pgterms:agent'].attributes['about'].match(/\A\d\d\d\d\/agents\/(\d+)\z/)[1]
|
12
12
|
end
|
13
13
|
|
14
14
|
def fullname
|
@@ -24,20 +24,20 @@ module GutenbergRdf
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def birthdate
|
27
|
-
xml.
|
27
|
+
xml.elements['pgterms:agent/pgterms:birthdate'].text
|
28
28
|
end
|
29
29
|
|
30
30
|
def deathdate
|
31
|
-
xml.
|
31
|
+
xml.elements['pgterms:agent/pgterms:deathdate'].text
|
32
32
|
end
|
33
33
|
|
34
34
|
def webpage
|
35
|
-
xml.
|
35
|
+
xml.elements['pgterms:agent/pgterms:webpage'].attributes['resource']
|
36
36
|
end
|
37
37
|
|
38
38
|
def aliases
|
39
39
|
entries = Array.new
|
40
|
-
xml.
|
40
|
+
xml.elements.each('pgterms:agent/pgterms:alias') do |name|
|
41
41
|
entries << name.text
|
42
42
|
end
|
43
43
|
entries
|
@@ -46,7 +46,7 @@ module GutenbergRdf
|
|
46
46
|
private
|
47
47
|
|
48
48
|
def name_parts
|
49
|
-
parts = xml.
|
49
|
+
parts = xml.elements['pgterms:agent/pgterms:name'].text.split(/, */)
|
50
50
|
last = parts.shift
|
51
51
|
first = parts.reverse.join(' ')
|
52
52
|
|
data/lib/gutenberg_rdf/rdf.rb
CHANGED
@@ -5,15 +5,15 @@ module GutenbergRdf
|
|
5
5
|
attr_reader :xml
|
6
6
|
|
7
7
|
def initialize(xml)
|
8
|
-
@xml = xml.
|
8
|
+
@xml = xml.root
|
9
9
|
end
|
10
10
|
|
11
11
|
def id
|
12
|
-
xml.
|
12
|
+
xml.elements['pgterms:ebook'].attributes['about'].match(/\Aebooks\/(.+)\z/)[1]
|
13
13
|
end
|
14
14
|
|
15
15
|
def type
|
16
|
-
xml.
|
16
|
+
xml.elements['pgterms:ebook/dcterms:type/rdf:Description/rdf:value'].text
|
17
17
|
end
|
18
18
|
|
19
19
|
def title
|
@@ -30,9 +30,9 @@ module GutenbergRdf
|
|
30
30
|
|
31
31
|
def subjects
|
32
32
|
entries = Array.new
|
33
|
-
xml.
|
34
|
-
next unless entry.
|
35
|
-
entry.
|
33
|
+
xml.elements.each('pgterms:ebook/dcterms:subject') do |entry|
|
34
|
+
next unless entry.elements['rdf:Description/dcam:memberOf'].attributes['resource'].match(/LCSH\z/)
|
35
|
+
entry.elements.each('rdf:Description//rdf:value') do |value|
|
36
36
|
entries << value.text
|
37
37
|
end
|
38
38
|
end
|
@@ -40,19 +40,19 @@ module GutenbergRdf
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def published
|
43
|
-
xml.
|
43
|
+
xml.elements['pgterms:ebook/dcterms:issued'].text
|
44
44
|
end
|
45
45
|
|
46
46
|
def publisher
|
47
|
-
xml.
|
47
|
+
xml.elements['pgterms:ebook/dcterms:publisher'].text
|
48
48
|
end
|
49
49
|
|
50
50
|
def language
|
51
|
-
xml.
|
51
|
+
xml.elements['pgterms:ebook/dcterms:language'].text
|
52
52
|
end
|
53
53
|
|
54
54
|
def rights
|
55
|
-
xml.
|
55
|
+
xml.elements['pgterms:ebook/dcterms:rights'].text
|
56
56
|
end
|
57
57
|
|
58
58
|
def covers
|
@@ -61,10 +61,10 @@ module GutenbergRdf
|
|
61
61
|
|
62
62
|
def ebooks
|
63
63
|
files = Array.new
|
64
|
-
xml.
|
65
|
-
uri = file.
|
66
|
-
datatypes = separate_mimetype_and_encoding(file.
|
67
|
-
modified = DateTime.parse(file.
|
64
|
+
xml.elements.each('pgterms:file') do |file|
|
65
|
+
uri = file.attributes['about']
|
66
|
+
datatypes = separate_mimetype_and_encoding(file.elements['dcterms:format/rdf:Description/rdf:value'].text)
|
67
|
+
modified = DateTime.parse(file.elements['dcterms:modified'].text + '-07:00')
|
68
68
|
files << {uri: uri, mime_type: datatypes[:mimetype], encoding: datatypes[:encoding], modified: modified}
|
69
69
|
end
|
70
70
|
files
|
@@ -77,8 +77,8 @@ module GutenbergRdf
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def split_title_and_subtitle
|
80
|
-
#
|
81
|
-
t = xml.
|
80
|
+
# NOTE: this gsub is replacing UTF-8 hyphens with normal ASCII ones
|
81
|
+
t = xml.elements['pgterms:ebook/dcterms:title'].text.gsub(/—/, '-')
|
82
82
|
|
83
83
|
title_array = t.split(/\n/)
|
84
84
|
title_array = title_array.first.split(/:/) if title_array.count == 1
|
@@ -89,24 +89,30 @@ module GutenbergRdf
|
|
89
89
|
|
90
90
|
def extract_authors
|
91
91
|
entries = Array.new
|
92
|
-
xml.
|
93
|
-
entries << Agent.new(agent)
|
92
|
+
xml.elements.each('pgterms:agent') do |agent|
|
93
|
+
entries << Agent.new(agent.root)
|
94
94
|
end
|
95
95
|
entries
|
96
96
|
end
|
97
97
|
|
98
98
|
def official_cover_images
|
99
99
|
entries = Array.new
|
100
|
-
xml.
|
101
|
-
|
102
|
-
entries << url if file.xpath('dcterms:format/rdf:Description//rdf:value').detect { |v| v.text.match(/image/) }
|
100
|
+
xml.elements.each('pgterms:file') do |file|
|
101
|
+
entries << file.attributes['about'] if file_is_image?(file)
|
103
102
|
end
|
104
103
|
entries
|
105
104
|
end
|
106
105
|
|
106
|
+
def file_is_image?(node)
|
107
|
+
node.elements.each('dcterms:format/rdf:Description/rdf:value') do |value|
|
108
|
+
return true if value.text.match(/image/)
|
109
|
+
end
|
110
|
+
false
|
111
|
+
end
|
112
|
+
|
107
113
|
def other_cover_images
|
108
114
|
entries = Array.new
|
109
|
-
xml.
|
115
|
+
xml.elements.each('pgterms:ebook/pgterms:marc901') do |node|
|
110
116
|
cover = node.text
|
111
117
|
cover.sub!(/\Afile:\/\/\/public\/vhost\/g\/gutenberg\/html/, 'http://www.gutenberg.org')
|
112
118
|
entries << cover
|
data/lib/gutenberg_rdf.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'rexml/document'
|
2
2
|
|
3
3
|
require "gutenberg_rdf/rdf"
|
4
4
|
require "gutenberg_rdf/rdf/agent"
|
@@ -7,7 +7,7 @@ require "gutenberg_rdf/version"
|
|
7
7
|
module GutenbergRdf
|
8
8
|
|
9
9
|
def self.parse(path)
|
10
|
-
Rdf.new(
|
10
|
+
Rdf.new(REXML::Document.new(File.new(path)))
|
11
11
|
end
|
12
12
|
|
13
13
|
end
|
@@ -14,8 +14,8 @@ module GutenbergRdf
|
|
14
14
|
<pgterms:webpage rdf:resource="http://en.wikipedia.org/wiki/Jon_James_Doe"/>
|
15
15
|
</pgterms:agent>
|
16
16
|
</rdf:RDF>'
|
17
|
-
rdf =
|
18
|
-
Agent.new(rdf.
|
17
|
+
rdf = REXML::Document.new(xml)
|
18
|
+
Agent.new(rdf.root)
|
19
19
|
end
|
20
20
|
|
21
21
|
it "expects an agent ID" do
|
@@ -58,8 +58,8 @@ module GutenbergRdf
|
|
58
58
|
<pgterms:name>Dato</pgterms:name>
|
59
59
|
</pgterms:agent>
|
60
60
|
</rdf:RDF>'
|
61
|
-
rdf =
|
62
|
-
Agent.new(rdf.
|
61
|
+
rdf = REXML::Document.new(xml)
|
62
|
+
Agent.new(rdf.root)
|
63
63
|
end
|
64
64
|
|
65
65
|
it "expects it to be assigned to the last name" do
|
@@ -77,8 +77,8 @@ module GutenbergRdf
|
|
77
77
|
<pgterms:name>Doe, Jon, Sir</pgterms:name>
|
78
78
|
</pgterms:agent>
|
79
79
|
</rdf:RDF>'
|
80
|
-
rdf =
|
81
|
-
Agent.new(rdf.
|
80
|
+
rdf = REXML::Document.new(xml)
|
81
|
+
Agent.new(rdf.root)
|
82
82
|
end
|
83
83
|
|
84
84
|
it "expects the correct name order" do
|
@@ -94,8 +94,8 @@ module GutenbergRdf
|
|
94
94
|
<pgterms:name>Doe, J. J. (Jon James)</pgterms:name>
|
95
95
|
</pgterms:agent>
|
96
96
|
</rdf:RDF>'
|
97
|
-
rdf =
|
98
|
-
Agent.new(rdf.
|
97
|
+
rdf = REXML::Document.new(xml)
|
98
|
+
Agent.new(rdf.root)
|
99
99
|
end
|
100
100
|
|
101
101
|
it "expects initials to replaced by name in brackets" do
|
@@ -12,7 +12,7 @@ module GutenbergRdf
|
|
12
12
|
</pgterms:ebook>
|
13
13
|
</rdf:RDF>'
|
14
14
|
end
|
15
|
-
let(:rdf) { Rdf.new(
|
15
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
16
16
|
|
17
17
|
it "expects an id" do
|
18
18
|
expect(rdf.id).to eql "98765"
|
@@ -32,7 +32,7 @@ module GutenbergRdf
|
|
32
32
|
|
33
33
|
describe "#type" do
|
34
34
|
let(:xml) do
|
35
|
-
'<rdf:RDF xmlns:dcterms="http://purl.org/dc/terms/" xmlns:pgterms="http://www.gutenberg.org/2009/pgterms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
35
|
+
'<rdf:RDF xmlns:dcam="http://purl.org/dc/dcam/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:pgterms="http://www.gutenberg.org/2009/pgterms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
36
36
|
<pgterms:ebook rdf:about="ebooks/98765">
|
37
37
|
<dcterms:type>
|
38
38
|
<rdf:Description>
|
@@ -43,7 +43,7 @@ module GutenbergRdf
|
|
43
43
|
</pgterms:ebook>
|
44
44
|
</rdf:RDF>'
|
45
45
|
end
|
46
|
-
let(:rdf) { Rdf.new(
|
46
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
47
47
|
|
48
48
|
it "expect the type of entity" do
|
49
49
|
expect(rdf.type).to eql 'Text'
|
@@ -58,7 +58,7 @@ module GutenbergRdf
|
|
58
58
|
</pgterms:ebook>
|
59
59
|
</rdf:RDF>'
|
60
60
|
end
|
61
|
-
let(:rdf) { Rdf.new(
|
61
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
62
62
|
|
63
63
|
it "expects a title" do
|
64
64
|
expect(rdf.title).to eql 'A Great Title'
|
@@ -76,7 +76,7 @@ module GutenbergRdf
|
|
76
76
|
</pgterms:ebook>
|
77
77
|
</rdf:RDF>'
|
78
78
|
end
|
79
|
-
let(:rdf) { Rdf.new(
|
79
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
80
80
|
|
81
81
|
it "expects the title to be the first line" do
|
82
82
|
expect(rdf.title).to eql 'A Great Multi-Title'
|
@@ -94,7 +94,7 @@ module GutenbergRdf
|
|
94
94
|
</pgterms:ebook>
|
95
95
|
</rdf:RDF>'
|
96
96
|
end
|
97
|
-
let(:rdf) { Rdf.new(
|
97
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
98
98
|
|
99
99
|
it "expects a title" do
|
100
100
|
expect(rdf.title).to eql 'A Great Multi-Title'
|
@@ -112,7 +112,7 @@ module GutenbergRdf
|
|
112
112
|
</pgterms:ebook>
|
113
113
|
</rdf:RDF>'
|
114
114
|
end
|
115
|
-
let(:rdf) { Rdf.new(
|
115
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
116
116
|
it "expects a title" do
|
117
117
|
expect(rdf.title).to eql 'A Great Multi-Title'
|
118
118
|
end
|
@@ -129,7 +129,7 @@ module GutenbergRdf
|
|
129
129
|
</pgterms:ebook>
|
130
130
|
</rdf:RDF>'
|
131
131
|
end
|
132
|
-
let(:rdf) { Rdf.new(
|
132
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
133
133
|
it "expects a title" do
|
134
134
|
expect(rdf.title).to eql 'A Great Multi-Title; and some other text'
|
135
135
|
end
|
@@ -156,7 +156,8 @@ module GutenbergRdf
|
|
156
156
|
</pgterms:agent>
|
157
157
|
</rdf:RDF>'
|
158
158
|
end
|
159
|
-
let(:rdf) { Rdf.new(
|
159
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
160
|
+
|
160
161
|
it "expects a Array" do
|
161
162
|
expect(rdf.authors.class).to be Array
|
162
163
|
end
|
@@ -188,7 +189,7 @@ module GutenbergRdf
|
|
188
189
|
</pgterms:ebook>
|
189
190
|
</rdf:RDF>}
|
190
191
|
end
|
191
|
-
let(:rdf) { Rdf.new(
|
192
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
192
193
|
it "expects correct number to be returned" do
|
193
194
|
expect(rdf.subjects.count).to be 2
|
194
195
|
end
|
@@ -201,7 +202,7 @@ module GutenbergRdf
|
|
201
202
|
describe "#covers" do
|
202
203
|
describe "official PG covers" do
|
203
204
|
let(:xml) do
|
204
|
-
'<rdf:RDF xmlns:dcterms="http://purl.org/dc/terms/" xmlns:pgterms="http://www.gutenberg.org/2009/pgterms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
205
|
+
'<rdf:RDF xmlns:dcam="http://purl.org/dc/dcam/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:pgterms="http://www.gutenberg.org/2009/pgterms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
205
206
|
<pgterms:ebook rdf:about="ebooks/12345">
|
206
207
|
<dcterms:hasFormat rdf:resource="http://www.gutenberg.org/ebooks/12345.epub.noimages"/>
|
207
208
|
<dcterms:hasFormat rdf:resource="http://www.gutenberg.org/ebooks/12345.cover.medium"/>
|
@@ -243,7 +244,7 @@ module GutenbergRdf
|
|
243
244
|
</pgterms:file>
|
244
245
|
</rdf:RDF>'
|
245
246
|
end
|
246
|
-
let(:rdf) { Rdf.new(
|
247
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
247
248
|
|
248
249
|
it "expects the correct number of entries returned" do
|
249
250
|
expect(rdf.covers.count).to be 3
|
@@ -267,7 +268,7 @@ module GutenbergRdf
|
|
267
268
|
</pgterms:ebook>
|
268
269
|
</rdf:RDF>'
|
269
270
|
end
|
270
|
-
let(:rdf) { Rdf.new(
|
271
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
271
272
|
|
272
273
|
it "expects only unique entries" do
|
273
274
|
expect(rdf.covers.count).to be 2
|
@@ -284,7 +285,7 @@ module GutenbergRdf
|
|
284
285
|
|
285
286
|
describe "#ebook" do
|
286
287
|
let(:xml) do
|
287
|
-
'<rdf:RDF xmlns:dcterms="http://purl.org/dc/terms/" xmlns:pgterms="http://www.gutenberg.org/2009/pgterms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
288
|
+
'<rdf:RDF xmlns:dcam="http://purl.org/dc/dcam/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:pgterms="http://www.gutenberg.org/2009/pgterms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
288
289
|
<pgterms:ebook rdf:about="ebooks/98765">
|
289
290
|
<dcterms:hasFormat rdf:resource="http://www.gutenberg.org/ebooks/98765.txt.utf-8"/>
|
290
291
|
<dcterms:hasFormat rdf:resource="http://www.gutenberg.org/ebooks/98765.zip"/>
|
@@ -314,7 +315,7 @@ module GutenbergRdf
|
|
314
315
|
</pgterms:file>
|
315
316
|
</rdf:RDF>'
|
316
317
|
end
|
317
|
-
let(:rdf) { Rdf.new(
|
318
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
318
319
|
|
319
320
|
it "expects the correct number of entries" do
|
320
321
|
expect(rdf.ebooks.count).to be 2
|
@@ -344,7 +345,7 @@ module GutenbergRdf
|
|
344
345
|
|
345
346
|
context "when there are two mime-types" do
|
346
347
|
let(:xml) do
|
347
|
-
'<rdf:RDF xmlns:dcterms="http://purl.org/dc/terms/" xmlns:pgterms="http://www.gutenberg.org/2009/pgterms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
348
|
+
'<rdf:RDF xmlns:dcam="http://purl.org/dc/dcam/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:pgterms="http://www.gutenberg.org/2009/pgterms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
348
349
|
<pgterms:file rdf:about="http://www.gutenberg.org/files/98765/98765.zip">
|
349
350
|
<dcterms:extent rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">116685</dcterms:extent>
|
350
351
|
<dcterms:format>
|
@@ -359,7 +360,7 @@ module GutenbergRdf
|
|
359
360
|
</pgterms:file>
|
360
361
|
</rdf:RDF>'
|
361
362
|
end
|
362
|
-
let(:rdf) { Rdf.new(
|
363
|
+
let(:rdf) { Rdf.new(REXML::Document.new(xml)) }
|
363
364
|
|
364
365
|
it "should use just the first one" do
|
365
366
|
expect(rdf.ebooks.first[:mime_type]).to eql 'application/zip'
|
metadata
CHANGED
@@ -1,57 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gutenberg_rdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Cook
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: nokogiri
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.6.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 1.6.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.3'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.3'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rake
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '>='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - '>='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
13
|
- !ruby/object:Gem::Dependency
|
56
14
|
name: rspec
|
57
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,8 +24,8 @@ dependencies:
|
|
66
24
|
- - ~>
|
67
25
|
- !ruby/object:Gem::Version
|
68
26
|
version: 2.14.1
|
69
|
-
description: A Ruby wrapper
|
70
|
-
|
27
|
+
description: A Ruby wrapper for the Project Gutenberg RDF catalog files (requires
|
28
|
+
Ruby 2).
|
71
29
|
email:
|
72
30
|
- m@mikecook.co.uk
|
73
31
|
executables: []
|