eeepub 0.6.1 → 0.7.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.
- data/.gitignore +2 -1
- data/Gemfile +4 -0
- data/README.md +0 -1
- data/Rakefile +7 -31
- data/eeepub.gemspec +24 -0
- data/lib/eeepub/maker.rb +54 -41
- data/lib/eeepub/ocf.rb +34 -3
- data/spec/eeepub/maker_spec.rb +2 -2
- data/spec/eeepub/ocf_spec.rb +6 -0
- data/spec/spec_helper.rb +6 -4
- metadata +55 -36
- data/VERSION +0 -1
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -1,39 +1,15 @@
|
|
1
|
-
require '
|
2
|
-
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
4
|
begin
|
5
|
-
require '
|
6
|
-
|
7
|
-
|
8
|
-
gem.summary = %Q{ePub generator}
|
9
|
-
gem.description = %Q{EeePub is a Ruby ePub generator.}
|
10
|
-
gem.email = "jugyo.org@gmail.com"
|
11
|
-
gem.homepage = "http://github.com/jugyo/eeepub"
|
12
|
-
gem.authors = ["jugyo"]
|
13
|
-
gem.add_dependency "builder"
|
14
|
-
gem.add_development_dependency "rspec"
|
15
|
-
gem.add_development_dependency "rr"
|
16
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
5
|
+
require 'rspec/core/rake_task'
|
6
|
+
RSpec::Core::RakeTask.new do |t|
|
7
|
+
t.rspec_opts = ['--color']
|
17
8
|
end
|
18
|
-
|
19
|
-
|
20
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
21
|
-
end
|
22
|
-
|
23
|
-
require 'spec/rake/spectask'
|
24
|
-
Spec::Rake::SpecTask.new(:spec) do |spec|
|
25
|
-
spec.libs << 'lib' << 'spec'
|
26
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
9
|
+
rescue LoadError => e
|
10
|
+
puts "RSpec not installed"
|
27
11
|
end
|
28
12
|
|
29
|
-
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
30
|
-
spec.libs << 'lib' << 'spec'
|
31
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
32
|
-
spec.rcov = true
|
33
|
-
end
|
34
|
-
|
35
|
-
task :spec => :check_dependencies
|
36
|
-
|
37
13
|
task :default => :spec
|
38
14
|
|
39
15
|
begin
|
data/eeepub.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "eeepub"
|
5
|
+
s.version = "0.7.0"
|
6
|
+
s.platform = Gem::Platform::RUBY
|
7
|
+
s.authors = ["jugyo"]
|
8
|
+
s.email = ["jugyo.org@gmail.com"]
|
9
|
+
s.homepage = "http://github.com/jugyo/eeepub"
|
10
|
+
s.summary = %q{ePub generator}
|
11
|
+
s.description = %q{EeePub is a Ruby ePub generator.}
|
12
|
+
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
|
18
|
+
s.add_runtime_dependency(%q<zipruby>, ["~> 0.3"])
|
19
|
+
s.add_runtime_dependency(%q<builder>, ["~> 3.0"])
|
20
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.0"])
|
21
|
+
s.add_development_dependency(%q<rr>, ["~> 1.0"])
|
22
|
+
s.add_development_dependency(%q<simplecov>, ["~> 0.4"])
|
23
|
+
s.add_development_dependency(%q<nokogiri>, ["~> 1.4"])
|
24
|
+
end
|
data/lib/eeepub/maker.rb
CHANGED
@@ -73,53 +73,66 @@ module EeePub
|
|
73
73
|
#
|
74
74
|
# @param [String] filename the ePub file name to save
|
75
75
|
def save(filename)
|
76
|
-
|
77
|
-
|
76
|
+
create_epub.save(filename)
|
77
|
+
end
|
78
|
+
|
79
|
+
# instead of saving to file, output the file contents.
|
80
|
+
# important for serving on-the-fly doc creation from
|
81
|
+
# web interface where we don't want to allow file system
|
82
|
+
# writes (Heroku, et al.)
|
83
|
+
def render
|
84
|
+
create_epub.render
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
def create_epub
|
90
|
+
dir = Dir.mktmpdir
|
91
|
+
@files.each do |file|
|
92
|
+
case file
|
93
|
+
when String
|
94
|
+
FileUtils.cp(file, dir)
|
95
|
+
when Hash
|
96
|
+
file_path, dir_path = *file.first
|
97
|
+
dest_dir = File.join(dir, dir_path)
|
98
|
+
FileUtils.mkdir_p(dest_dir)
|
99
|
+
FileUtils.cp(file_path, dest_dir)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
NCX.new(
|
104
|
+
:uid => @uid,
|
105
|
+
:title => @titles[0],
|
106
|
+
:nav => @nav
|
107
|
+
).save(File.join(dir, @ncx_file))
|
108
|
+
|
109
|
+
OPF.new(
|
110
|
+
:title => @titles,
|
111
|
+
:identifier => @identifiers,
|
112
|
+
:creator => @creators,
|
113
|
+
:publisher => @publishers,
|
114
|
+
:date => @dates,
|
115
|
+
:language => @languages,
|
116
|
+
:subject => @subjects,
|
117
|
+
:description => @descriptions,
|
118
|
+
:rights => @rightss,
|
119
|
+
:relation => @relations,
|
120
|
+
:manifest => @files.map{|file|
|
78
121
|
case file
|
79
122
|
when String
|
80
|
-
|
123
|
+
File.basename(file)
|
81
124
|
when Hash
|
82
125
|
file_path, dir_path = *file.first
|
83
|
-
|
84
|
-
FileUtils.mkdir_p(dest_dir)
|
85
|
-
FileUtils.cp(file_path, dest_dir)
|
126
|
+
File.join(dir_path, File.basename(file_path))
|
86
127
|
end
|
87
|
-
|
128
|
+
},
|
129
|
+
:ncx => @ncx_file
|
130
|
+
).save(File.join(dir, @opf_file))
|
88
131
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
).save(File.join(dir, @ncx_file))
|
94
|
-
|
95
|
-
OPF.new(
|
96
|
-
:title => @titles,
|
97
|
-
:identifier => @identifiers,
|
98
|
-
:creator => @creators,
|
99
|
-
:publisher => @publishers,
|
100
|
-
:date => @dates,
|
101
|
-
:language => @languages,
|
102
|
-
:subject => @subjects,
|
103
|
-
:description => @descriptions,
|
104
|
-
:rights => @rightss,
|
105
|
-
:relation => @relations,
|
106
|
-
:manifest => @files.map{|file|
|
107
|
-
case file
|
108
|
-
when String
|
109
|
-
File.basename(file)
|
110
|
-
when Hash
|
111
|
-
file_path, dir_path = *file.first
|
112
|
-
File.join(dir_path, File.basename(file_path))
|
113
|
-
end
|
114
|
-
},
|
115
|
-
:ncx => @ncx_file
|
116
|
-
).save(File.join(dir, @opf_file))
|
117
|
-
|
118
|
-
OCF.new(
|
119
|
-
:dir => dir,
|
120
|
-
:container => @opf_file
|
121
|
-
).save(filename)
|
122
|
-
end
|
132
|
+
OCF.new(
|
133
|
+
:dir => dir,
|
134
|
+
:container => @opf_file
|
135
|
+
)
|
123
136
|
end
|
124
137
|
end
|
125
138
|
end
|
data/lib/eeepub/ocf.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'zipruby'
|
2
|
+
|
1
3
|
module EeePub
|
2
4
|
# Class to create OCF
|
3
5
|
class OCF
|
@@ -89,6 +91,36 @@ module EeePub
|
|
89
91
|
def save(output_path)
|
90
92
|
output_path = File.expand_path(output_path)
|
91
93
|
|
94
|
+
create_epub do
|
95
|
+
Zip::Archive.open(output_path, Zip::CREATE | Zip::TRUNC) do |zip|
|
96
|
+
Dir.glob('**/*').each do |path|
|
97
|
+
if File.directory?(path)
|
98
|
+
zip.add_dir(path)
|
99
|
+
else
|
100
|
+
zip.add_file(path)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# Stream OCF
|
108
|
+
#
|
109
|
+
# @return [String] streaming output of the zip/epub file.
|
110
|
+
def render
|
111
|
+
create_epub do
|
112
|
+
buffer = Zip::Archive.open_buffer(Zip::CREATE) do |zip|
|
113
|
+
Dir.glob('**/*').each do |path|
|
114
|
+
zip.add_buffer(path, path)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
return buffer
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
private
|
123
|
+
def create_epub
|
92
124
|
FileUtils.chdir(dir) do
|
93
125
|
File.open('mimetype', 'w') do |f|
|
94
126
|
f << 'application/epub+zip'
|
@@ -98,10 +130,9 @@ module EeePub
|
|
98
130
|
FileUtils.mkdir_p(meta_inf)
|
99
131
|
|
100
132
|
container.save(File.join(meta_inf, 'container.xml'))
|
101
|
-
|
102
|
-
%x(zip -X9 \"#{output_path}\" mimetype)
|
103
|
-
%x(zip -Xr9D \"#{output_path}\" * -xi mimetype)
|
133
|
+
yield
|
104
134
|
end
|
135
|
+
|
105
136
|
end
|
106
137
|
end
|
107
138
|
end
|
data/spec/eeepub/maker_spec.rb
CHANGED
@@ -42,7 +42,7 @@ describe "EeePub::Maker" do
|
|
42
42
|
|
43
43
|
it 'should save' do
|
44
44
|
stub(FileUtils).cp.with_any_args
|
45
|
-
mock(Dir).mktmpdir {
|
45
|
+
mock(Dir).mktmpdir { '/tmp' }
|
46
46
|
mock(EeePub::NCX).new(
|
47
47
|
:title => "sample",
|
48
48
|
:nav => [
|
@@ -100,7 +100,7 @@ describe "EeePub::Maker" do
|
|
100
100
|
it 'should save' do
|
101
101
|
stub(FileUtils).cp.with_any_args
|
102
102
|
stub(FileUtils).mkdir_p.with_any_args
|
103
|
-
mock(Dir).mktmpdir {
|
103
|
+
mock(Dir).mktmpdir { '/tmp' }
|
104
104
|
mock(EeePub::NCX).new.with_any_args { stub!.save }
|
105
105
|
mock(EeePub::OPF).new(
|
106
106
|
:title => ["sample"],
|
data/spec/eeepub/ocf_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
-
require 'rubygems'
|
4
3
|
require 'eeepub'
|
5
|
-
require '
|
6
|
-
require 'spec/autorun'
|
4
|
+
require 'rspec'
|
7
5
|
require 'nokogiri'
|
8
6
|
require 'rr'
|
7
|
+
require 'simplecov'
|
9
8
|
|
10
|
-
|
9
|
+
RSpec.configure do |config|
|
11
10
|
config.mock_with :rr
|
12
11
|
end
|
12
|
+
|
13
|
+
SimpleCov.start
|
14
|
+
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eeepub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 6
|
8
|
-
- 1
|
9
|
-
version: 0.6.1
|
4
|
+
prerelease:
|
5
|
+
version: 0.7.0
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- jugyo
|
@@ -14,63 +10,91 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date:
|
13
|
+
date: 2011-05-07 00:00:00 +09:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
17
|
+
name: zipruby
|
22
18
|
prerelease: false
|
23
19
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
20
|
none: false
|
25
21
|
requirements:
|
26
|
-
- -
|
22
|
+
- - ~>
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
24
|
+
version: "0.3"
|
31
25
|
type: :runtime
|
32
26
|
version_requirements: *id001
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
28
|
+
name: builder
|
35
29
|
prerelease: false
|
36
30
|
requirement: &id002 !ruby/object:Gem::Requirement
|
37
31
|
none: false
|
38
32
|
requirements:
|
39
|
-
- -
|
33
|
+
- - ~>
|
40
34
|
- !ruby/object:Gem::Version
|
41
|
-
|
42
|
-
|
43
|
-
version: "0"
|
44
|
-
type: :development
|
35
|
+
version: "3.0"
|
36
|
+
type: :runtime
|
45
37
|
version_requirements: *id002
|
46
38
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
39
|
+
name: rspec
|
48
40
|
prerelease: false
|
49
41
|
requirement: &id003 !ruby/object:Gem::Requirement
|
50
42
|
none: false
|
51
43
|
requirements:
|
52
|
-
- -
|
44
|
+
- - ~>
|
53
45
|
- !ruby/object:Gem::Version
|
54
|
-
|
55
|
-
- 0
|
56
|
-
version: "0"
|
46
|
+
version: "2.0"
|
57
47
|
type: :development
|
58
48
|
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rr
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ~>
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "1.0"
|
58
|
+
type: :development
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: simplecov
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0.4"
|
69
|
+
type: :development
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: nokogiri
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ~>
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "1.4"
|
80
|
+
type: :development
|
81
|
+
version_requirements: *id006
|
59
82
|
description: EeePub is a Ruby ePub generator.
|
60
|
-
email:
|
83
|
+
email:
|
84
|
+
- jugyo.org@gmail.com
|
61
85
|
executables: []
|
62
86
|
|
63
87
|
extensions: []
|
64
88
|
|
65
|
-
extra_rdoc_files:
|
66
|
-
|
67
|
-
- README.md
|
89
|
+
extra_rdoc_files: []
|
90
|
+
|
68
91
|
files:
|
69
92
|
- .gitignore
|
93
|
+
- Gemfile
|
70
94
|
- LICENSE
|
71
95
|
- README.md
|
72
96
|
- Rakefile
|
73
|
-
-
|
97
|
+
- eeepub.gemspec
|
74
98
|
- examples/files/bar.html
|
75
99
|
- examples/files/foo.html
|
76
100
|
- examples/simple_epub.rb
|
@@ -93,8 +117,8 @@ homepage: http://github.com/jugyo/eeepub
|
|
93
117
|
licenses: []
|
94
118
|
|
95
119
|
post_install_message:
|
96
|
-
rdoc_options:
|
97
|
-
|
120
|
+
rdoc_options: []
|
121
|
+
|
98
122
|
require_paths:
|
99
123
|
- lib
|
100
124
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -102,21 +126,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
102
126
|
requirements:
|
103
127
|
- - ">="
|
104
128
|
- !ruby/object:Gem::Version
|
105
|
-
segments:
|
106
|
-
- 0
|
107
129
|
version: "0"
|
108
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
131
|
none: false
|
110
132
|
requirements:
|
111
133
|
- - ">="
|
112
134
|
- !ruby/object:Gem::Version
|
113
|
-
segments:
|
114
|
-
- 0
|
115
135
|
version: "0"
|
116
136
|
requirements: []
|
117
137
|
|
118
138
|
rubyforge_project:
|
119
|
-
rubygems_version: 1.
|
139
|
+
rubygems_version: 1.6.0
|
120
140
|
signing_key:
|
121
141
|
specification_version: 3
|
122
142
|
summary: ePub generator
|
@@ -128,4 +148,3 @@ test_files:
|
|
128
148
|
- spec/eeepub/opf_spec.rb
|
129
149
|
- spec/eeepub_spec.rb
|
130
150
|
- spec/spec_helper.rb
|
131
|
-
- examples/simple_epub.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.6.1
|