gepub 1.0.11 → 1.0.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +3 -0
- data/.github/dependabot.yml +8 -0
- data/.github/workflows/test.yml +4 -11
- data/.rubocop.yml +6 -0
- data/Gemfile +1 -1
- data/README.md +6 -2
- data/Rakefile +1 -1
- data/gepub.gemspec +4 -2
- data/lib/gepub/bindings.rb +2 -0
- data/lib/gepub/book.rb +5 -0
- data/lib/gepub/book_add_item.rb +2 -0
- data/lib/gepub/inspect_mixin.rb +26 -0
- data/lib/gepub/item.rb +20 -8
- data/lib/gepub/manifest.rb +2 -0
- data/lib/gepub/meta.rb +6 -4
- data/lib/gepub/metadata.rb +2 -0
- data/lib/gepub/metadata_add.rb +36 -34
- data/lib/gepub/package.rb +8 -5
- data/lib/gepub/spine.rb +9 -5
- data/lib/gepub/version.rb +1 -1
- data/lib/gepub.rb +1 -0
- data/tools/generate_function.rb +40 -35
- metadata +39 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19218e13519e47532dee8d0a4f1c45a3acaa65dd105b4fcd1b09774f9f482bd6
|
4
|
+
data.tar.gz: abeb56bc8baa0d505f75af8403eb4e59a86aa386aeac83040c2dcf9fc2f5b45e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1c20a5567c1033fceafbe660f8bc2b227b3a269125d1da4b58d2183fb13f24a4f7e56242100e37b662f03a17ebb744fc686151782ef2d8fb36c9d94ef39275b
|
7
|
+
data.tar.gz: 6dcf08c29ca933edba399cd1ffbb001196d8d8ef74cb62bcb8619135eddec743975b1654b5c3ce57342d91da7c8166949057591da1d3e429c1f326967544077e
|
data/.github/FUNDING.yml
ADDED
data/.github/workflows/test.yml
CHANGED
@@ -4,26 +4,19 @@ jobs:
|
|
4
4
|
test:
|
5
5
|
strategy:
|
6
6
|
matrix:
|
7
|
-
ruby: [2.
|
7
|
+
ruby: [2.5, 2.6, 2.7, 3.0, jruby]
|
8
8
|
platform: [ubuntu-latest, macos-latest, windows-latest]
|
9
|
-
exclude:
|
10
|
-
# TODO: https://github.com/sparklemotion/nokogiri/issues/1961
|
11
|
-
# exclude windows with ruby 2.7 ; nokogiri is not supported for the present
|
12
|
-
- ruby: 2.7
|
13
|
-
platform: windows-latest
|
14
9
|
runs-on: ${{ matrix.platform }}
|
15
10
|
env:
|
16
11
|
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
17
12
|
steps:
|
18
|
-
- uses: actions/checkout@
|
13
|
+
- uses: actions/checkout@v2
|
19
14
|
- name: Set up Ruby
|
20
|
-
uses:
|
15
|
+
uses: ruby/setup-ruby@v1
|
21
16
|
with:
|
22
17
|
ruby-version: ${{ matrix.ruby }}
|
23
18
|
- name: setup gems
|
24
|
-
run:
|
25
|
-
gem install bundler
|
26
|
-
bundle install
|
19
|
+
run: bundle install --jobs 4 --retry 3
|
27
20
|
- name: run test and publish code coverage
|
28
21
|
if: runner.os == 'Linux' && matrix.ruby == '2.7' && env.CC_TEST_REPORTER_ID != ''
|
29
22
|
uses: paambaati/codeclimate-action@v2.3.0
|
data/.rubocop.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
[![Test Coverage](https://api.codeclimate.com/v1/badges/acd6df07e071a4bbb399/test_coverage)](https://codeclimate.com/github/skoji/gepub/test_coverage)
|
6
6
|
[![Gem Version](https://badge.fury.io/rb/gepub.svg)](http://badge.fury.io/rb/gepub)
|
7
7
|
|
8
|
-
* http://rdoc.info/github/skoji/gepub/
|
8
|
+
* http://rdoc.info/github/skoji/gepub/main/frames
|
9
9
|
|
10
10
|
## DESCRIPTION:
|
11
11
|
|
@@ -103,9 +103,13 @@ epubname = File.join(File.dirname(__FILE__), 'example_test.epub')
|
|
103
103
|
# auto-generated nav file will not appear on spine.
|
104
104
|
book.generate_epub(epubname)
|
105
105
|
```
|
106
|
-
* [examples in this repository](https://github.com/skoji/gepub/tree/
|
106
|
+
* [examples in this repository](https://github.com/skoji/gepub/tree/main/examples/)
|
107
107
|
|
108
108
|
## INSTALL:
|
109
109
|
|
110
110
|
* gem install gepub
|
111
111
|
|
112
|
+
## DONATE:
|
113
|
+
|
114
|
+
* Bitcoin Address: `1M69AwoxpgPZsp5KStLUEjP7so5dHVfDTH`
|
115
|
+
|
data/Rakefile
CHANGED
data/gepub.gemspec
CHANGED
@@ -16,8 +16,10 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
|
19
|
-
s.add_runtime_dependency "nokogiri", ">= 1.8.2", "<
|
20
|
-
s.add_runtime_dependency "rubyzip", "> 1.1.1", "< 2.
|
19
|
+
s.add_runtime_dependency "nokogiri", ">= 1.8.2", "< 2.0"
|
20
|
+
s.add_runtime_dependency "rubyzip", "> 1.1.1", "< 2.4"
|
21
|
+
s.add_development_dependency "epubcheck-ruby"
|
21
22
|
s.add_development_dependency "rake"
|
22
23
|
s.add_development_dependency "rspec"
|
24
|
+
s.add_development_dependency "rubocop"
|
23
25
|
end
|
data/lib/gepub/bindings.rb
CHANGED
data/lib/gepub/book.rb
CHANGED
@@ -79,6 +79,8 @@ module GEPUB
|
|
79
79
|
# set page-proression-direction attribute to spine.
|
80
80
|
|
81
81
|
class Book
|
82
|
+
include InspectMixin
|
83
|
+
|
82
84
|
MIMETYPE='mimetype'
|
83
85
|
MIMETYPE_CONTENTS='application/epub+zip'
|
84
86
|
CONTAINER='META-INF/container.xml'
|
@@ -316,6 +318,9 @@ EOF
|
|
316
318
|
# build nav
|
317
319
|
builder = Nokogiri::XML::Builder.new {
|
318
320
|
|doc|
|
321
|
+
unless version.to_f < 3.0
|
322
|
+
doc.doc.create_internal_subset('html', nil, nil )
|
323
|
+
end
|
319
324
|
doc.html('xmlns' => "http://www.w3.org/1999/xhtml",'xmlns:epub' => "http://www.idpf.org/2007/ops") {
|
320
325
|
doc.head {
|
321
326
|
doc.title title
|
data/lib/gepub/book_add_item.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
module GEPUB
|
2
|
+
module InspectMixin
|
3
|
+
def inspect
|
4
|
+
result = instance_variables.each
|
5
|
+
.with_object({}) { |name, h| h[name] = instance_variable_get(name) }
|
6
|
+
.reject { |name, value| value.nil? }
|
7
|
+
.map { |name, value|
|
8
|
+
case value
|
9
|
+
when true, false, Symbol, Numeric, Array, Hash
|
10
|
+
"#{name}=#{value.inspect}"
|
11
|
+
when String
|
12
|
+
if value.length > 80
|
13
|
+
"#{name}=(omitted)"
|
14
|
+
else
|
15
|
+
"#{name}=#{value.inspect}"
|
16
|
+
end
|
17
|
+
else
|
18
|
+
"#{name}=#<#{value.class.name}>"
|
19
|
+
end
|
20
|
+
}
|
21
|
+
.join(' ')
|
22
|
+
|
23
|
+
"#<#{self.class.name} " + result + '>'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/gepub/item.rb
CHANGED
@@ -6,6 +6,8 @@ module GEPUB
|
|
6
6
|
# #id, #id=, #set_id, #href, #href=, #set_href, #media_type, #media_type=, #set_media_type,
|
7
7
|
# #fallback, #fallback=, #set_fallback, #media_overlay, #media_overlay=, #set_media_overlay
|
8
8
|
class Item
|
9
|
+
include InspectMixin
|
10
|
+
|
9
11
|
attr_accessor :content
|
10
12
|
def self.create(parent, attributes = {})
|
11
13
|
Item.new(attributes['id'], attributes['href'], attributes['media-type'], parent,
|
@@ -46,12 +48,14 @@ module GEPUB
|
|
46
48
|
media_type
|
47
49
|
end
|
48
50
|
|
49
|
-
|
50
|
-
|
51
|
+
# get +attribute+
|
52
|
+
def [](attribute)
|
53
|
+
@attributes[attribute]
|
51
54
|
end
|
52
55
|
|
53
|
-
|
54
|
-
|
56
|
+
# set +attribute+
|
57
|
+
def []=(attribute, value)
|
58
|
+
@attributes[attribute] = value
|
55
59
|
end
|
56
60
|
|
57
61
|
# add value to properties attribute.
|
@@ -106,9 +110,10 @@ module GEPUB
|
|
106
110
|
else
|
107
111
|
prefix = "#{ns_prefix}:"
|
108
112
|
end
|
113
|
+
images = parsed.xpath("//#{prefix}img[starts-with(@src,'http')]")
|
109
114
|
videos = parsed.xpath("//#{prefix}video[starts-with(@src,'http')]") + parsed.xpath("//#{prefix}video/#{prefix}source[starts-with(@src,'http')]")
|
110
115
|
audios = parsed.xpath("//#{prefix}audio[starts-with(@src,'http')]") + parsed.xpath("//#{prefix}audio/#{prefix}source[starts-with(@src,'http')]")
|
111
|
-
if videos.size > 0 || audios.size > 0
|
116
|
+
if images.size > 0 || videos.size > 0 || audios.size > 0
|
112
117
|
self.add_property('remote-resources')
|
113
118
|
end
|
114
119
|
if parsed.xpath("//p:math", { 'p' => 'http://www.w3.org/1998/Math/MathML' }).size > 0
|
@@ -137,12 +142,19 @@ module GEPUB
|
|
137
142
|
self
|
138
143
|
end
|
139
144
|
|
140
|
-
# add content
|
145
|
+
# add content from io or file to the item
|
141
146
|
def add_content(io_or_filename)
|
142
|
-
io = io_or_filename
|
143
147
|
if io_or_filename.class == String
|
144
|
-
|
148
|
+
File.open(io_or_filename, mode='r') do |f|
|
149
|
+
add_content_io f
|
150
|
+
end
|
151
|
+
else
|
152
|
+
add_content_io io_or_filename
|
145
153
|
end
|
154
|
+
self
|
155
|
+
end
|
156
|
+
|
157
|
+
def add_content_io(io)
|
146
158
|
io.binmode
|
147
159
|
@content = io.read
|
148
160
|
if File.extname(self.href) =~ /x?html$/
|
data/lib/gepub/manifest.rb
CHANGED
data/lib/gepub/meta.rb
CHANGED
@@ -16,12 +16,14 @@ module GEPUB
|
|
16
16
|
@parent.register_meta(self) unless @parent.nil?
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
# get +attribute+
|
20
|
+
def [](attribute)
|
21
|
+
@attributes[attribute]
|
21
22
|
end
|
22
23
|
|
23
|
-
|
24
|
-
|
24
|
+
# set +attribute+
|
25
|
+
def []=(attribute, value)
|
26
|
+
@attributes[attribute] = value
|
25
27
|
end
|
26
28
|
|
27
29
|
def refiner_list(name)
|
data/lib/gepub/metadata.rb
CHANGED
@@ -18,6 +18,8 @@ module GEPUB
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
include XMLUtil, DSLUtil
|
21
|
+
include InspectMixin
|
22
|
+
|
21
23
|
attr_accessor :opf_version
|
22
24
|
# parse metadata element. metadata_xml should be Nokogiri::XML::Node object.
|
23
25
|
def self.parse(metadata_xml, opf_version = '3.0', id_pool = Package::IDPool.new)
|
data/lib/gepub/metadata_add.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
## this file is automatically generated by tools/generate_function.rb . do not edit this code directly.
|
2
|
+
|
1
3
|
module GEPUB
|
2
|
-
|
4
|
+
class Metadata
|
3
5
|
CONTENT_NODE_LIST = ['identifier', 'title', 'language', 'contributor', 'creator', 'coverage', 'date','description','format','publisher','relation','rights','source','subject','type'].each {
|
4
6
|
|node|
|
5
7
|
define_method(node + '_list') { @content_nodes[node].dup.sort_as_meta }
|
@@ -14,7 +16,7 @@ module GEPUB
|
|
14
16
|
|
15
17
|
define_method(node, ->(content=UNASSIGNED, deprecated_id=nil, id:nil,
|
16
18
|
title_type: nil,identifier_type: nil,display_seq: nil,file_as: nil,group_position: nil,role: nil,
|
17
|
-
|
19
|
+
lang: nil, alternates: {}) {
|
18
20
|
if unassigned?(content)
|
19
21
|
get_first_node(node)
|
20
22
|
else
|
@@ -48,7 +50,7 @@ module GEPUB
|
|
48
50
|
|
49
51
|
def add_title(content, deprecated_id = nil, deprecated_title_type = nil, id: nil,
|
50
52
|
title_type: nil,identifier_type: nil,display_seq: nil,file_as: nil,group_position: nil,role: nil,
|
51
|
-
|
53
|
+
lang: nil, alternates: {})
|
52
54
|
if deprecated_id
|
53
55
|
warn 'second argument for add_title is deprecated. use id: instead'
|
54
56
|
id = deprecated_id
|
@@ -58,15 +60,15 @@ module GEPUB
|
|
58
60
|
title_type = deprecated_title_type
|
59
61
|
end
|
60
62
|
meta = add_metadata('title', content, id: id,
|
61
|
-
|
62
|
-
|
63
|
+
title_type: title_type,identifier_type: identifier_type,display_seq: display_seq,file_as: file_as,group_position: group_position,role: role,
|
64
|
+
lang: lang, alternates: alternates)
|
63
65
|
yield meta if block_given?
|
64
66
|
meta
|
65
67
|
end
|
66
68
|
|
67
69
|
def add_person(name, content, deprecated_id = nil, deprecated_role = nil, id: nil,
|
68
|
-
|
69
|
-
|
70
|
+
title_type: nil,identifier_type: nil,display_seq: nil,file_as: nil,group_position: nil,role: nil,
|
71
|
+
lang: nil, alternates: {})
|
70
72
|
if deprecated_id
|
71
73
|
warn 'second argument for add_person is deprecated. use id: instead'
|
72
74
|
id = deprecated_id
|
@@ -76,15 +78,15 @@ module GEPUB
|
|
76
78
|
role = deprecated_role
|
77
79
|
end
|
78
80
|
meta = add_metadata(name, content, id: id,
|
79
|
-
|
80
|
-
|
81
|
+
title_type: title_type,identifier_type: identifier_type,display_seq: display_seq,file_as: file_as,group_position: group_position,role: role,
|
82
|
+
lang: lang, alternates: alternates)
|
81
83
|
yield meta if block_given?
|
82
84
|
meta
|
83
85
|
end
|
84
86
|
|
85
87
|
def add_creator(content, deprecated_id = nil, deprecated_role = nil, id: nil,
|
86
88
|
title_type: nil,identifier_type: nil,display_seq: nil,file_as: nil,group_position: nil,role: nil,
|
87
|
-
|
89
|
+
lang: nil, alternates: {})
|
88
90
|
if deprecated_id
|
89
91
|
warn 'second argument for add_creator is deprecated. use id: instead'
|
90
92
|
id = deprecated_id
|
@@ -93,17 +95,17 @@ module GEPUB
|
|
93
95
|
warn 'third argument for add_creator is deprecated. use role: instead'
|
94
96
|
role = deprecated_role
|
95
97
|
end
|
96
|
-
|
98
|
+
role = 'aut' if role.nil?
|
97
99
|
meta = add_person('creator', content, id: id,
|
98
|
-
|
99
|
-
|
100
|
+
title_type: title_type,identifier_type: identifier_type,display_seq: display_seq,file_as: file_as,group_position: group_position,role: role,
|
101
|
+
lang: lang, alternates: alternates)
|
100
102
|
yield meta if block_given?
|
101
103
|
meta
|
102
104
|
end
|
103
105
|
|
104
106
|
def add_contributor(content, deprecated_id = nil, deprecated_role = nil, id: nil,
|
105
107
|
title_type: nil,identifier_type: nil,display_seq: nil,file_as: nil,group_position: nil,role: nil,
|
106
|
-
|
108
|
+
lang: nil, alternates: {})
|
107
109
|
if deprecated_id
|
108
110
|
warn 'second argument for add_contributor is deprecated. use id: instead'
|
109
111
|
id = deprecated_id
|
@@ -113,30 +115,30 @@ module GEPUB
|
|
113
115
|
role = deprecated_role
|
114
116
|
end
|
115
117
|
meta = add_person('contributor', content, id: id,
|
116
|
-
|
117
|
-
|
118
|
+
title_type: title_type,identifier_type: identifier_type,display_seq: display_seq,file_as: file_as,group_position: group_position,role: role,
|
119
|
+
lang: lang, alternates: alternates)
|
118
120
|
yield meta if block_given?
|
119
121
|
meta
|
120
122
|
end
|
121
123
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
124
|
+
def add_metadata(name, content, id: nil, itemclass: Meta,
|
125
|
+
title_type: nil,identifier_type: nil,display_seq: nil,file_as: nil,group_position: nil,role: nil,
|
126
|
+
lang: nil, alternates: {}
|
127
|
+
)
|
128
|
+
meta = add_metadata_internal(name, content, id: id, itemclass: itemclass)
|
127
129
|
[{ value: title_type, name: 'title-type'},{ value: identifier_type, name: 'identifier-type'},{ value: display_seq, name: 'display-seq'},{ value: file_as, name: 'file-as'},{ value: group_position, name: 'group-position'},{ value: role, name: 'role'}].each do |refiner|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
130
|
+
if refiner[:value]
|
131
|
+
meta.refine(refiner[:name], refiner[:value])
|
132
|
+
end
|
133
|
+
end
|
134
|
+
if lang
|
135
|
+
meta.lang = lang
|
136
|
+
end
|
137
|
+
if alternates
|
138
|
+
meta.add_alternates alternates
|
139
|
+
end
|
138
140
|
yield meta if block_given?
|
139
|
-
|
140
|
-
|
141
|
-
|
141
|
+
meta
|
142
|
+
end
|
143
|
+
end
|
142
144
|
end
|
data/lib/gepub/package.rb
CHANGED
@@ -6,6 +6,8 @@ module GEPUB
|
|
6
6
|
# Holds data in opf file.
|
7
7
|
class Package
|
8
8
|
include XMLUtil, DSLUtil
|
9
|
+
include InspectMixin
|
10
|
+
|
9
11
|
extend Forwardable
|
10
12
|
attr_accessor :path, :metadata, :manifest, :spine, :bindings, :epub_backward_compat, :contents_prefix, :prefixes
|
11
13
|
def_delegators :@manifest, :item_by_href
|
@@ -142,15 +144,16 @@ module GEPUB
|
|
142
144
|
})
|
143
145
|
}
|
144
146
|
|
145
|
-
|
146
|
-
|
147
|
+
# get +attribute+
|
148
|
+
def [](attribute)
|
149
|
+
@attributes[attribute]
|
147
150
|
end
|
148
151
|
|
149
|
-
|
150
|
-
|
152
|
+
# set +attribute+
|
153
|
+
def []=(attribute, value)
|
154
|
+
@attributes[attribute] = value
|
151
155
|
end
|
152
156
|
|
153
|
-
|
154
157
|
def identifier(identifier=UNASSIGNED)
|
155
158
|
if unassigned?(identifier)
|
156
159
|
@metadata.identifier_by_id(unique_identifier)
|
data/lib/gepub/spine.rb
CHANGED
@@ -3,6 +3,8 @@ require 'nokogiri'
|
|
3
3
|
module GEPUB
|
4
4
|
class Spine
|
5
5
|
include XMLUtil
|
6
|
+
include InspectMixin
|
7
|
+
|
6
8
|
attr_accessor :opf_version
|
7
9
|
class Itemref
|
8
10
|
def self.create(parent, attributes = {})
|
@@ -26,14 +28,16 @@ module GEPUB
|
|
26
28
|
define_method(methodbase) { @attributes[name] }
|
27
29
|
}
|
28
30
|
|
29
|
-
|
30
|
-
|
31
|
+
# get +attribute+
|
32
|
+
def [](attribute)
|
33
|
+
@attributes[attribute]
|
31
34
|
end
|
32
35
|
|
33
|
-
|
34
|
-
|
36
|
+
# set +attribute+
|
37
|
+
def []=(attribute, value)
|
38
|
+
@attributes[attribute] = value
|
35
39
|
end
|
36
|
-
|
40
|
+
|
37
41
|
def add_property(property)
|
38
42
|
(@attributes['properties'] ||=[]) << property
|
39
43
|
end
|
data/lib/gepub/version.rb
CHANGED
data/lib/gepub.rb
CHANGED
data/tools/generate_function.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require_relative '../lib/gepub/inspect_mixin.rb'
|
1
2
|
require_relative '../lib/gepub/item.rb'
|
2
3
|
attrs = GEPUB::Item::ATTRIBUTES.select do |attr|
|
3
4
|
attr != 'href'
|
@@ -9,6 +10,8 @@ attrs << "property"
|
|
9
10
|
attrs_arguments_string = attrs.map { |attr| "#{attr}: nil" }.join(',')
|
10
11
|
attrs_internal_string = "{ " + attrs.map { |attr| "#{attr}: #{attr}"}.join(',') + " }"
|
11
12
|
File.write(File.join(File.dirname(__FILE__), "../lib/gepub/book_add_item.rb"), <<EOF)
|
13
|
+
## this file is automatically generated by tools/generate_function.rb . do not edit this code directly.
|
14
|
+
|
12
15
|
module GEPUB
|
13
16
|
class Book
|
14
17
|
# add an item(i.e. html, images, audios, etc) to Book.
|
@@ -35,7 +38,7 @@ require_relative '../lib/gepub/dsl_util.rb'
|
|
35
38
|
require_relative '../lib/gepub/meta.rb'
|
36
39
|
|
37
40
|
refiners = GEPUB::Meta::REFINERS.map do |refiner|
|
38
|
-
|
41
|
+
refiner.sub('-', '_')
|
39
42
|
end
|
40
43
|
|
41
44
|
refiners_arguments_string = refiners.map { |refiner| "#{refiner}: nil" }.join(',')
|
@@ -46,8 +49,10 @@ meta_attr_arguments_string = "lang: nil, alternates: {}"
|
|
46
49
|
meta_attr_arguments_set_string = "lang: lang, alternates: alternates"
|
47
50
|
|
48
51
|
File.write(File.join(File.dirname(__FILE__), "../lib/gepub/metadata_add.rb"), <<EOF)
|
52
|
+
## this file is automatically generated by tools/generate_function.rb . do not edit this code directly.
|
53
|
+
|
49
54
|
module GEPUB
|
50
|
-
|
55
|
+
class Metadata
|
51
56
|
CONTENT_NODE_LIST = ['identifier', 'title', 'language', 'contributor', 'creator', 'coverage', 'date','description','format','publisher','relation','rights','source','subject','type'].each {
|
52
57
|
|node|
|
53
58
|
define_method(node + '_list') { @content_nodes[node].dup.sort_as_meta }
|
@@ -62,7 +67,7 @@ module GEPUB
|
|
62
67
|
|
63
68
|
define_method(node, ->(content=UNASSIGNED, deprecated_id=nil, id:nil,
|
64
69
|
#{refiners_arguments_string},
|
65
|
-
|
70
|
+
#{meta_attr_arguments_string}) {
|
66
71
|
if unassigned?(content)
|
67
72
|
get_first_node(node)
|
68
73
|
else
|
@@ -96,7 +101,7 @@ module GEPUB
|
|
96
101
|
|
97
102
|
def add_title(content, deprecated_id = nil, deprecated_title_type = nil, id: nil,
|
98
103
|
#{refiners_arguments_string},
|
99
|
-
|
104
|
+
#{meta_attr_arguments_string})
|
100
105
|
if deprecated_id
|
101
106
|
warn 'second argument for add_title is deprecated. use id: instead'
|
102
107
|
id = deprecated_id
|
@@ -106,15 +111,15 @@ module GEPUB
|
|
106
111
|
title_type = deprecated_title_type
|
107
112
|
end
|
108
113
|
meta = add_metadata('title', content, id: id,
|
109
|
-
|
110
|
-
|
114
|
+
#{refiners_arguments_set_string},
|
115
|
+
#{meta_attr_arguments_set_string})
|
111
116
|
yield meta if block_given?
|
112
117
|
meta
|
113
118
|
end
|
114
119
|
|
115
120
|
def add_person(name, content, deprecated_id = nil, deprecated_role = nil, id: nil,
|
116
|
-
|
117
|
-
|
121
|
+
#{refiners_arguments_string},
|
122
|
+
#{meta_attr_arguments_string})
|
118
123
|
if deprecated_id
|
119
124
|
warn 'second argument for add_person is deprecated. use id: instead'
|
120
125
|
id = deprecated_id
|
@@ -124,15 +129,15 @@ module GEPUB
|
|
124
129
|
role = deprecated_role
|
125
130
|
end
|
126
131
|
meta = add_metadata(name, content, id: id,
|
127
|
-
|
128
|
-
|
132
|
+
#{refiners_arguments_set_string},
|
133
|
+
#{meta_attr_arguments_set_string})
|
129
134
|
yield meta if block_given?
|
130
135
|
meta
|
131
136
|
end
|
132
137
|
|
133
138
|
def add_creator(content, deprecated_id = nil, deprecated_role = nil, id: nil,
|
134
139
|
#{refiners_arguments_string},
|
135
|
-
|
140
|
+
#{meta_attr_arguments_string})
|
136
141
|
if deprecated_id
|
137
142
|
warn 'second argument for add_creator is deprecated. use id: instead'
|
138
143
|
id = deprecated_id
|
@@ -141,17 +146,17 @@ module GEPUB
|
|
141
146
|
warn 'third argument for add_creator is deprecated. use role: instead'
|
142
147
|
role = deprecated_role
|
143
148
|
end
|
144
|
-
|
149
|
+
role = 'aut' if role.nil?
|
145
150
|
meta = add_person('creator', content, id: id,
|
146
|
-
|
147
|
-
|
151
|
+
#{refiners_arguments_set_string},
|
152
|
+
#{meta_attr_arguments_set_string})
|
148
153
|
yield meta if block_given?
|
149
154
|
meta
|
150
155
|
end
|
151
156
|
|
152
157
|
def add_contributor(content, deprecated_id = nil, deprecated_role = nil, id: nil,
|
153
158
|
#{refiners_arguments_string},
|
154
|
-
|
159
|
+
#{meta_attr_arguments_string})
|
155
160
|
if deprecated_id
|
156
161
|
warn 'second argument for add_contributor is deprecated. use id: instead'
|
157
162
|
id = deprecated_id
|
@@ -161,32 +166,32 @@ module GEPUB
|
|
161
166
|
role = deprecated_role
|
162
167
|
end
|
163
168
|
meta = add_person('contributor', content, id: id,
|
164
|
-
|
165
|
-
|
169
|
+
#{refiners_arguments_set_string},
|
170
|
+
#{meta_attr_arguments_set_string})
|
166
171
|
yield meta if block_given?
|
167
172
|
meta
|
168
173
|
end
|
169
174
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
+
def add_metadata(name, content, id: nil, itemclass: Meta,
|
176
|
+
#{refiners_arguments_string},
|
177
|
+
#{meta_attr_arguments_string}
|
178
|
+
)
|
179
|
+
meta = add_metadata_internal(name, content, id: id, itemclass: itemclass)
|
175
180
|
#{refiners_string}.each do |refiner|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
181
|
+
if refiner[:value]
|
182
|
+
meta.refine(refiner[:name], refiner[:value])
|
183
|
+
end
|
184
|
+
end
|
185
|
+
if lang
|
186
|
+
meta.lang = lang
|
187
|
+
end
|
188
|
+
if alternates
|
189
|
+
meta.add_alternates alternates
|
190
|
+
end
|
186
191
|
yield meta if block_given?
|
187
|
-
|
188
|
-
|
189
|
-
|
192
|
+
meta
|
193
|
+
end
|
194
|
+
end
|
190
195
|
end
|
191
196
|
EOF
|
192
197
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gepub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- KOJIMA Satoshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 1.8.2
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '2.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 1.8.2
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '2.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rubyzip
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
version: 1.1.1
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '2.
|
42
|
+
version: '2.4'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -49,7 +49,21 @@ dependencies:
|
|
49
49
|
version: 1.1.1
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '2.
|
52
|
+
version: '2.4'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: epubcheck-ruby
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
53
67
|
- !ruby/object:Gem::Dependency
|
54
68
|
name: rake
|
55
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,6 +92,20 @@ dependencies:
|
|
78
92
|
- - ">="
|
79
93
|
- !ruby/object:Gem::Version
|
80
94
|
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rubocop
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
81
109
|
description: gepub is a generic EPUB parser/generator. Generates and parse EPUB2 and
|
82
110
|
EPUB3
|
83
111
|
email:
|
@@ -89,9 +117,12 @@ extensions: []
|
|
89
117
|
extra_rdoc_files: []
|
90
118
|
files:
|
91
119
|
- ".gitattributes"
|
120
|
+
- ".github/FUNDING.yml"
|
121
|
+
- ".github/dependabot.yml"
|
92
122
|
- ".github/workflows/gempush.yml"
|
93
123
|
- ".github/workflows/test.yml"
|
94
124
|
- ".gitignore"
|
125
|
+
- ".rubocop.yml"
|
95
126
|
- Gemfile
|
96
127
|
- LICENSE.txt
|
97
128
|
- README.md
|
@@ -112,6 +143,7 @@ files:
|
|
112
143
|
- lib/gepub/builder_mixin.rb
|
113
144
|
- lib/gepub/datemeta.rb
|
114
145
|
- lib/gepub/dsl_util.rb
|
146
|
+
- lib/gepub/inspect_mixin.rb
|
115
147
|
- lib/gepub/item.rb
|
116
148
|
- lib/gepub/manifest.rb
|
117
149
|
- lib/gepub/meta.rb
|
@@ -146,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
178
|
- !ruby/object:Gem::Version
|
147
179
|
version: '0'
|
148
180
|
requirements: []
|
149
|
-
rubygems_version: 3.0.3
|
181
|
+
rubygems_version: 3.0.3.1
|
150
182
|
signing_key:
|
151
183
|
specification_version: 4
|
152
184
|
summary: a generic EPUB library for Ruby.
|