epub-parser 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,15 +1,26 @@
1
1
  EPUB Parser
2
2
  ===========
3
3
 
4
- INSTALL
4
+ INSTALLATION
5
5
  -------
6
6
  gem install epub-parser
7
7
 
8
8
  USAGE
9
9
  -----
10
+
11
+ ### As a command line tool
12
+
13
+ epubinfo path/to/book.epub
14
+
15
+ For more info:
16
+
17
+ epubinfo -h
18
+
19
+ ### As a library
20
+
10
21
  require 'epub/parser'
11
22
 
12
- book = EPUB::Parser.parse 'book.epub', 'working_directory'
23
+ book = EPUB::Parser.parse 'book.epub', 'working/directory'
13
24
  book.each_page_on_spine do |page|
14
25
  # do somethong...
15
26
  end
@@ -23,6 +34,15 @@ REQUIREMENTS
23
34
  * UNIX like `unzip` command
24
35
  * libxml2 and libxslt for Nokogiri gem
25
36
 
37
+ TODOS
38
+ -----
39
+ * Adding tests
40
+ * Implementing metadata/link, navigation document and so on
41
+ * Using zip library instead of `unzip` command, which has security issue
42
+ * Using SAX on parsing
43
+ * Extracting and organizing common behavior from some classes to modules
44
+ * Abstraction of XML parser(making it possible to use REXML, standard bundled XML library of Ruby)
45
+
26
46
  LICENSE
27
47
  -------
28
48
  This library is distribuetd under the term of the MIT License.
@@ -6,22 +6,29 @@ Version = EPUB::Parser::VERSION
6
6
 
7
7
  options = {:format => :line}
8
8
  opt = OptionParser.new do |opt|
9
- opt.banner = 'Usage: epubinfo [options] EPUBFILE'
10
- opt.on '-f', '--format=FORMAT', [:line, :json, :yaml], 'Format of output(line, json or yaml), defaults to line(for console)' do |format|
9
+ opt.banner = <<EOB
10
+ Show metadata of an EPUB file
11
+
12
+ Usage: epubinfo [options] EPUBFILE
13
+
14
+ EOB
15
+ opt.on '-f', '--format=FORMAT', [:line, :json, :yaml], 'format of output(line, json or yaml), defaults to line(for console)' do |format|
11
16
  options[:format] = format
12
17
  end
13
18
  end
14
19
  opt.parse!(ARGV)
15
20
 
16
- file = ARGV[0]
21
+ file = ARGV.shift
17
22
  unless file
23
+ $stdout.puts "error: you must supply an EPUB file name"
18
24
  $stdout.puts opt.help
19
- exit 1
25
+ exit!
20
26
  end
21
27
 
22
28
  Dir.mktmpdir('epub-parser') do |dir|
23
29
  book = EPUB::Parser.parse file, dir
24
- data = book.package.metadata.to_hash
30
+ data = {'Title' => [book.title]}
31
+ data.merge!(book.package.metadata.to_hash)
25
32
  data['Unique identifier'] = [book.package.metadata.unique_identifier]
26
33
  data['EPUB Version'] = [book.package.version]
27
34
  if options[:format] == :line
@@ -28,6 +28,8 @@ Gem::Specification.new do |s|
28
28
  s.add_development_dependency 'simplecov'
29
29
  s.add_development_dependency 'thin'
30
30
  s.add_development_dependency 'yard'
31
+ s.add_development_dependency 'gem-man'
32
+ s.add_development_dependency 'ronn'
31
33
  s.add_development_dependency 'epzip'
32
34
  s.add_development_dependency 'epubcheck'
33
35
  s.add_development_dependency 'epub_validator'
@@ -19,6 +19,12 @@ module EPUB
19
19
  end
20
20
  module_function :parse
21
21
 
22
+ %w[ title main_title subtitle short_title collection_title edition_title extended_title ].each do |met|
23
+ define_method met do
24
+ @package.metadata.__send__(met)
25
+ end
26
+ end
27
+
22
28
  def each_page_on_spine(&blk)
23
29
  enum = @package.spine.items
24
30
  if block_given?
@@ -1,13 +1,13 @@
1
1
  module EPUB
2
2
  module Constants
3
3
  NAMESPACES = {
4
- 'dc' => 'http://purl.org/dc/elements/1.1/',
5
- 'container' => 'urn:oasis:names:tc:opendocument:xmlns:container',
6
- 'opf' => 'http://www.idpf.org/2007/opf',
7
- 'xhtml' => 'http://www.w3.org/1999/xhtml',
8
- 'epub' => 'http://www.idpf.org/2007/ops',
9
- 'm' => 'http://www.w3.org/1998/Math/MathML',
10
- 'svg' => 'http://www.w3.org/2000/svg'
4
+ 'dc' => 'http://purl.org/dc/elements/1.1/',
5
+ 'ocf' => 'urn:oasis:names:tc:opendocument:xmlns:container',
6
+ 'opf' => 'http://www.idpf.org/2007/opf',
7
+ 'xhtml' => 'http://www.w3.org/1999/xhtml',
8
+ 'epub' => 'http://www.idpf.org/2007/ops',
9
+ 'm' => 'http://www.w3.org/1998/Math/MathML',
10
+ 'svg' => 'http://www.w3.org/2000/svg'
11
11
  }
12
12
 
13
13
  module Type
@@ -25,7 +25,7 @@ module EPUB
25
25
  @book = create_book options
26
26
 
27
27
  unzip_cmd = options['unzip-command'] || 'unzip'
28
- unzip_cmd << " #{@filepath.to_s.shellescape} -d #{@dir.to_s.shellescape}"
28
+ unzip_cmd << " #{@filepath.to_s.shellescape} -d #{@dir.to_s.shellescape} 1>/dev/null"
29
29
  system unzip_cmd
30
30
  end
31
31
 
@@ -30,7 +30,7 @@ module EPUB
30
30
  container = EPUB::OCF::Container.new
31
31
  doc = Nokogiri.XML open(File.join @dir, DIRECTORY, CONTAINER_FILE)
32
32
 
33
- doc.xpath('/container:container/container:rootfiles/container:rootfile', EPUB::NAMESPACES).each do |elem|
33
+ doc.xpath('/ocf:container/ocf:rootfiles/ocf:rootfile', EPUB::NAMESPACES).each do |elem|
34
34
  rootfile = EPUB::OCF::Container::Rootfile.new
35
35
  %w[full-path media-type].each do |attr|
36
36
  rootfile.__send__(attr.gsub(/-/, '_') + '=', elem[attr])
@@ -32,7 +32,7 @@ module EPUB
32
32
  def parse_package
33
33
  elem = @doc.root
34
34
  @package.version = elem['version']
35
- @package.unique_identifier = elem['unique-identifier']
35
+ @package.unique_identifier_id = elem['unique-identifier']
36
36
 
37
37
  @package
38
38
  end
@@ -40,29 +40,84 @@ module EPUB
40
40
  def parse_metadata
41
41
  metadata = @package.metadata = EPUB::Publication::Package::Metadata.new
42
42
  elem = @doc.xpath('/opf:package/opf:metadata', EPUB::NAMESPACES).first
43
+ id_map = {}
43
44
 
44
45
  metadata.identifiers = elem.xpath('./dc:identifier', EPUB::NAMESPACES).collect do |e|
45
46
  identifier = EPUB::Publication::Package::Metadata::Identifier.new
46
47
  identifier.content = e.content
47
48
  identifier.id = id = e['id']
48
- metadata.unique_identifier = identifier if id == @package.unique_identifier
49
+ metadata.unique_identifier = identifier if id == @package.unique_identifier_id
50
+
49
51
  identifier
50
52
  end
53
+ metadata.identifiers.each {|i| id_map[i.id] = {metadata: i} if i.respond_to?(:id) && i.id}
51
54
 
52
- metadata.titles = collect_dcmes(elem, './dc:title') do |title, e|
55
+ metadata.titles = elem.xpath('./dc:title', EPUB::NAMESPACES).collect do |e|
56
+ title = EPUB::Publication::Package::Metadata::Title.new
57
+ %w[ id lang dir ].each do |attr|
58
+ title.__send__("#{attr}=", e[attr])
59
+ end
53
60
  title.content = e.content
61
+
62
+ title
54
63
  end
64
+ # metadata.titles = collect_dcmes(elem, './dc:title') do |title, e|
65
+ # title.content = e.content
66
+ # end
67
+ metadata.titles.each {|t| id_map[t.id] = {metadata: t} if t.respond_to?(:id) && t.id}
55
68
 
56
69
  metadata.languages = elem.xpath('./dc:language', EPUB::NAMESPACES).collect do |e|
57
70
  e.content
58
71
  end
72
+ metadata.languages.each {|l| id_map[l.id] = {metadata: l} if l.respond_to?(:id) && l.id}
59
73
 
60
74
  %w[ contributor coverage creator date description format publisher relation source subject type ].each do |dcmes|
61
75
  metadata.__send__ "#{dcmes}s=", collect_dcmes(elem, "./dc:#{dcmes}")
76
+ metadata.__send__("#{dcmes}s").each {|d| id_map[d.id] = {metadata: d} if d.respond_to?(:id) && d.id}
62
77
  end
78
+
63
79
  metadata.rights = collect_dcmes(elem, './dc:rights')
80
+ metadata.rights.each {|r| id_map[r.id] = {metadata: r} if r.respond_to?(:id) && r.id}
81
+
82
+ metadata.metas = elem.xpath('./opf:meta', EPUB::NAMESPACES).collect do |e|
83
+ meta = EPUB::Publication::Package::Metadata::Meta.new
84
+ %w[ property id scheme ].each { |attr| meta.__send__("#{attr}=", e[attr]) }
85
+ meta.content = e.content
86
+ if (refines = e['refines']) && refines[0] == '#'
87
+ id = refines[1..-1]
88
+ id_map[id] ||= {}
89
+ id_map[id][:refiners] ||= []
90
+ id_map[id][:refiners] << meta
91
+ end
92
+
93
+ meta
94
+ end
95
+ metadata.metas.each {|m| id_map[m.id] = {metadata: m} if m.respond_to?(:id) && m.id}
96
+
97
+ metadata.links = elem.xpath('./opf:link', EPUB::NAMESPACES).collect do |e|
98
+ link = EPUB::Publication::Package::Metadata::Link.new
99
+ %w[ href id media-type ].each do |attr|
100
+ link.__send__(attr.gsub(/-/, '_') + '=', e[attr])
101
+ end
102
+ link.iri = Addressable::URI.parse(e['href'])
103
+ link.rel = e['rel'].strip.split
104
+ if (refines = e['refines']) && refines[0] == '#'
105
+ id = refines[1..-1]
106
+ id_map[id] ||= {}
107
+ id_map[id][:refiners] ||= []
108
+ id_map[id][:refiners] << link
109
+ end
64
110
 
65
- # To do: handle <meta> elements
111
+ link
112
+ end
113
+ metadata.links.each {|l| id_map[l.id] = {metadata: l} if l.respond_to?(:id) && l.id}
114
+
115
+ id_map.values.each do |hsh|
116
+ next unless hsh[:refiners]
117
+ next unless hsh[:metadata]
118
+ hsh[:metadata].refiners = hsh[:refiners]
119
+ hsh[:refiners].each {|meta| meta.refines = hsh[:metadata]}
120
+ end
66
121
 
67
122
  metadata
68
123
  end
@@ -1,5 +1,5 @@
1
1
  module EPUB
2
2
  class Parser
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
@@ -4,8 +4,8 @@ module EPUB
4
4
  module Publication
5
5
  class Package
6
6
  attr_accessor :book,
7
- :version, :unique_identifier, :prefix, :xml_lang, :dir, :id
8
- attr_reader :metadata, :manifest, :spine, :guide
7
+ :version, :unique_identifier_id, :prefix, :xml_lang, :dir, :id
8
+ attr_reader :metadata, :manifest, :spine, :guide, :unique_identifier
9
9
  alias lang xml_lang
10
10
  alias lang= xml_lang=
11
11
 
@@ -28,6 +28,10 @@ module EPUB
28
28
  guide.package = self
29
29
  @guide = guide
30
30
  end
31
+
32
+ def unique_identifier
33
+ @metadata.unique_identifier
34
+ end
31
35
  end
32
36
  end
33
37
  end
@@ -2,25 +2,65 @@ module EPUB
2
2
  module Publication
3
3
  class Package
4
4
  class Metadata
5
- ELEMS = [:identifiers, :titles, :languages] +
6
- [:contributors, :coverages, :creators, :dates, :descriptions, :formats, :publishers,
7
- :relations, :rights, :sources, :subjects, :types]
8
- attr_accessor :package, :unique_identifier,
9
- *(ELEMS.collect {|elem| "dc_#{elem}"})
10
- ELEMS.each do |elem|
5
+ DC_ELEMS = [:identifiers, :titles, :languages] +
6
+ [:contributors, :coverages, :creators, :dates, :descriptions, :formats, :publishers,
7
+ :relations, :rights, :sources, :subjects, :types]
8
+ attr_accessor :package, :unique_identifier, :metas, :links,
9
+ *(DC_ELEMS.collect {|elem| "dc_#{elem}"})
10
+ DC_ELEMS.each do |elem|
11
11
  alias_method elem, "dc_#{elem}"
12
12
  alias_method "#{elem}=", "dc_#{elem}="
13
13
  end
14
- attr_accessor :links
14
+
15
+ def title
16
+ return extended_title unless extended_title.empty?
17
+ compositted = titles.select {|title| title.display_seq}.sort.join("\n")
18
+ return compositted unless compositted.empty?
19
+ return main_title unless main_title.empty?
20
+ titles.sort.join("\n")
21
+ end
22
+
23
+ %w[ main short collection edition extended ].each do |type|
24
+ define_method "#{type}_title" do
25
+ titles.select {|title| title.title_type.to_s == type}.sort.join(' ')
26
+ end
27
+ end
28
+ def subtitle
29
+ titles.select {|title| title.title_type.to_s == 'subtitle'}.sort.join(' ')
30
+ end
15
31
 
16
32
  def to_hash
17
- ELEMS.inject({}) do |hsh, elem|
33
+ DC_ELEMS.inject({}) do |hsh, elem|
18
34
  hsh[elem] = __send__(elem)
19
35
  hsh
20
36
  end
21
37
  end
22
38
 
39
+ def primary_metas
40
+ metas.select {|meta| meta.primary_expression?}
41
+ end
42
+
43
+ module Refinable
44
+ PROPERTIES = %w[ alternate-script display-seq file-as group-position identifier-type meta-auth role title-type ]
45
+
46
+ PROPERTIES.each do |voc|
47
+ met = voc.gsub(/-/, '_')
48
+ attr_accessor met
49
+ define_method met do
50
+ @refiners.select {|refiner| refiner.property == voc}.first
51
+ end
52
+ end
53
+
54
+ attr_accessor :refiners
55
+
56
+ def initialize
57
+ @refiners = []
58
+ end
59
+ end
60
+
23
61
  class Identifier
62
+ include Refinable
63
+
24
64
  attr_accessor :content, :id
25
65
 
26
66
  def to_s
@@ -29,20 +69,58 @@ module EPUB
29
69
  end
30
70
 
31
71
  class Title
72
+ include Refinable
73
+ include Comparable
74
+
32
75
  attr_accessor :content, :id, :lang, :dir
33
76
 
77
+ def <=>(other)
78
+ return 1 if other.display_seq.nil?
79
+ return -1 if display_seq.nil?
80
+ display_seq.to_s.to_i <=> other.display_seq.to_s.to_i
81
+ end
82
+
34
83
  def to_s
35
84
  content
36
85
  end
37
86
  end
38
87
 
39
88
  class DCMES
89
+ include Refinable
90
+
40
91
  attr_accessor :content, :id, :lang, :dir
41
92
 
42
93
  def to_s
43
94
  content
44
95
  end
45
96
  end
97
+
98
+ class Meta
99
+ include Refinable
100
+
101
+ attr_accessor :property, :refines, :id, :scheme, :content
102
+
103
+ def refines?
104
+ ! refines.nil?
105
+ end
106
+
107
+ alias subexpression? refines?
108
+
109
+ def primary_expression?
110
+ ! subexpression?
111
+ end
112
+
113
+ def to_s
114
+ content
115
+ end
116
+ end
117
+
118
+ class Link
119
+ include Refinable
120
+
121
+ attr_accessor :href, :rel, :id, :refines, :media_type,
122
+ :iri
123
+ end
46
124
  end
47
125
  end
48
126
  end
@@ -0,0 +1,19 @@
1
+ epubinfo(1) -- show metadata of an EPUB book
2
+ ============================================
3
+
4
+ SYNOPSIS
5
+ --------
6
+
7
+ `epubinfo` <filename><br>
8
+ `epubinfo` `-f`|`--format=<formnt>` <filename>
9
+
10
+ DESCRIPTION
11
+ -----------
12
+
13
+ **epubinfo** shows metadata of an EPUB book.
14
+
15
+ OPTIONS
16
+ -------
17
+
18
+ * `-f`, `--format`:
19
+ Output format; currently "line", "json" and "yaml" are acceptable
Binary file
@@ -1,7 +1,7 @@
1
1
  <?xml version="1.0"?>
2
2
  <package version="3.0"
3
- unique-identifier="pub-id"
4
- xmlns="http://www.idpf.org/2007/opf">
3
+ unique-identifier="pub-id"
4
+ xmlns="http://www.idpf.org/2007/opf">
5
5
  <metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
6
6
  <dc:identifier id="pub-id">da265185-8da8-462d-a146-17dd388f61fc</dc:identifier>
7
7
 
@@ -38,6 +38,11 @@
38
38
  <dc:creator id="creator02">John Tenniel</dc:creator>
39
39
  <meta refines="#creator02" property="role" scheme="marc:relators">ill</meta>
40
40
  <meta refines="#creator02" property="display-seq">2</meta>
41
+
42
+
43
+ <link rel="onix-record" href="http://example.org/onix/12389347" refines="#pub-id"/>
44
+ <link rel="xmp-record" href="http://example.org/xmp/12389347"/>
45
+ <link rel="foaf:homepage" href="http://example.org/book-info/12389347" />
41
46
  </metadata>
42
47
  <manifest id="manifest-id">
43
48
  <item id="nav"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: epub-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-21 00:00:00.000000000Z
12
+ date: 2012-03-11 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubygems-test
16
- requirement: &12346600 !ruby/object:Gem::Requirement
16
+ requirement: &11201540 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *12346600
24
+ version_requirements: *11201540
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &12342420 !ruby/object:Gem::Requirement
27
+ requirement: &11189400 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *12342420
35
+ version_requirements: *11189400
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: pry
38
- requirement: &12360020 !ruby/object:Gem::Requirement
38
+ requirement: &11186320 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *12360020
46
+ version_requirements: *11186320
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: pry-doc
49
- requirement: &12359300 !ruby/object:Gem::Requirement
49
+ requirement: &11185640 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *12359300
57
+ version_requirements: *11185640
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: test-unit
60
- requirement: &12358560 !ruby/object:Gem::Requirement
60
+ requirement: &11184560 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '2'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *12358560
68
+ version_requirements: *11184560
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
- requirement: &12358000 !ruby/object:Gem::Requirement
71
+ requirement: &11183620 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *12358000
79
+ version_requirements: *11183620
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: thin
82
- requirement: &12357120 !ruby/object:Gem::Requirement
82
+ requirement: &11182540 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *12357120
90
+ version_requirements: *11182540
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: yard
93
- requirement: &12356360 !ruby/object:Gem::Requirement
93
+ requirement: &11181840 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,32 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *12356360
101
+ version_requirements: *11181840
102
+ - !ruby/object:Gem::Dependency
103
+ name: gem-man
104
+ requirement: &11122520 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *11122520
113
+ - !ruby/object:Gem::Dependency
114
+ name: ronn
115
+ requirement: &11120840 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *11120840
102
124
  - !ruby/object:Gem::Dependency
103
125
  name: epzip
104
- requirement: &12355640 !ruby/object:Gem::Requirement
126
+ requirement: &11119120 !ruby/object:Gem::Requirement
105
127
  none: false
106
128
  requirements:
107
129
  - - ! '>='
@@ -109,10 +131,10 @@ dependencies:
109
131
  version: '0'
110
132
  type: :development
111
133
  prerelease: false
112
- version_requirements: *12355640
134
+ version_requirements: *11119120
113
135
  - !ruby/object:Gem::Dependency
114
136
  name: epubcheck
115
- requirement: &12354540 !ruby/object:Gem::Requirement
137
+ requirement: &12151080 !ruby/object:Gem::Requirement
116
138
  none: false
117
139
  requirements:
118
140
  - - ! '>='
@@ -120,10 +142,10 @@ dependencies:
120
142
  version: '0'
121
143
  type: :development
122
144
  prerelease: false
123
- version_requirements: *12354540
145
+ version_requirements: *12151080
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: epub_validator
126
- requirement: &12353020 !ruby/object:Gem::Requirement
148
+ requirement: &12148200 !ruby/object:Gem::Requirement
127
149
  none: false
128
150
  requirements:
129
151
  - - ! '>='
@@ -131,10 +153,10 @@ dependencies:
131
153
  version: '0'
132
154
  type: :development
133
155
  prerelease: false
134
- version_requirements: *12353020
156
+ version_requirements: *12148200
135
157
  - !ruby/object:Gem::Dependency
136
158
  name: zipruby
137
- requirement: &12370280 !ruby/object:Gem::Requirement
159
+ requirement: &11234320 !ruby/object:Gem::Requirement
138
160
  none: false
139
161
  requirements:
140
162
  - - ! '>='
@@ -142,10 +164,10 @@ dependencies:
142
164
  version: '0'
143
165
  type: :development
144
166
  prerelease: false
145
- version_requirements: *12370280
167
+ version_requirements: *11234320
146
168
  - !ruby/object:Gem::Dependency
147
169
  name: rubyzip
148
- requirement: &12369680 !ruby/object:Gem::Requirement
170
+ requirement: &11232240 !ruby/object:Gem::Requirement
149
171
  none: false
150
172
  requirements:
151
173
  - - ! '>='
@@ -153,10 +175,10 @@ dependencies:
153
175
  version: '0'
154
176
  type: :development
155
177
  prerelease: false
156
- version_requirements: *12369680
178
+ version_requirements: *11232240
157
179
  - !ruby/object:Gem::Dependency
158
180
  name: enumerabler
159
- requirement: &12368540 !ruby/object:Gem::Requirement
181
+ requirement: &11227260 !ruby/object:Gem::Requirement
160
182
  none: false
161
183
  requirements:
162
184
  - - ! '>='
@@ -164,10 +186,10 @@ dependencies:
164
186
  version: '0'
165
187
  type: :runtime
166
188
  prerelease: false
167
- version_requirements: *12368540
189
+ version_requirements: *11227260
168
190
  - !ruby/object:Gem::Dependency
169
191
  name: nokogiri
170
- requirement: &12367280 !ruby/object:Gem::Requirement
192
+ requirement: &11365900 !ruby/object:Gem::Requirement
171
193
  none: false
172
194
  requirements:
173
195
  - - ! '>='
@@ -175,10 +197,10 @@ dependencies:
175
197
  version: '0'
176
198
  type: :runtime
177
199
  prerelease: false
178
- version_requirements: *12367280
200
+ version_requirements: *11365900
179
201
  - !ruby/object:Gem::Dependency
180
202
  name: addressable
181
- requirement: &12365820 !ruby/object:Gem::Requirement
203
+ requirement: &11363620 !ruby/object:Gem::Requirement
182
204
  none: false
183
205
  requirements:
184
206
  - - ! '>='
@@ -186,7 +208,7 @@ dependencies:
186
208
  version: '0'
187
209
  type: :runtime
188
210
  prerelease: false
189
- version_requirements: *12365820
211
+ version_requirements: *11363620
190
212
  description: Parse EPUB 3 book loosely
191
213
  email:
192
214
  - KitaitiMakoto@gmail.com
@@ -227,6 +249,7 @@ files:
227
249
  - lib/epub/publication/package/manifest.rb
228
250
  - lib/epub/publication/package/metadata.rb
229
251
  - lib/epub/publication/package/spine.rb
252
+ - man/epubinfo.1.ronn
230
253
  - schemas/epub-nav-30.rnc
231
254
  - schemas/epub-nav-30.sch
232
255
  - schemas/epub-xhtml-30.sch
@@ -256,7 +279,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
256
279
  version: '0'
257
280
  segments:
258
281
  - 0
259
- hash: -4537999334465122186
282
+ hash: -1773548056502971517
260
283
  required_rubygems_version: !ruby/object:Gem::Requirement
261
284
  none: false
262
285
  requirements:
@@ -265,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
265
288
  version: '0'
266
289
  segments:
267
290
  - 0
268
- hash: -4537999334465122186
291
+ hash: -1773548056502971517
269
292
  requirements: []
270
293
  rubyforge_project:
271
294
  rubygems_version: 1.8.8