rpub 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +8 -0
- data/.rspec +5 -0
- data/.travis.yml +5 -0
- data/.yardopts +6 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +51 -0
- data/Guardfile +5 -0
- data/HISTORY.md +5 -0
- data/LICENSE +0 -0
- data/README.md +182 -0
- data/Rakefile +11 -0
- data/bin/rpub +6 -0
- data/example/advanced/README +1 -0
- data/example/advanced/config.yml +11 -0
- data/example/advanced/layout.html +0 -0
- data/example/advanced/styles.css +0 -0
- data/example/simple/01-introduction.md +3 -0
- data/example/simple/02-foo.md +4 -0
- data/example/simple/03-bar.md +4 -0
- data/example/simple/config.yml +8 -0
- data/lib/rpub.rb +53 -0
- data/lib/rpub/book.rb +70 -0
- data/lib/rpub/chapter.rb +84 -0
- data/lib/rpub/commander.rb +14 -0
- data/lib/rpub/commands/base.rb +33 -0
- data/lib/rpub/commands/clean.rb +55 -0
- data/lib/rpub/commands/compile.rb +56 -0
- data/lib/rpub/commands/help.rb +37 -0
- data/lib/rpub/commands/main.rb +45 -0
- data/lib/rpub/commands/package.rb +45 -0
- data/lib/rpub/commands/preview.rb +56 -0
- data/lib/rpub/compilation_helpers.rb +43 -0
- data/lib/rpub/compressor.rb +46 -0
- data/lib/rpub/epub.rb +37 -0
- data/lib/rpub/epub/container.rb +14 -0
- data/lib/rpub/epub/content.rb +80 -0
- data/lib/rpub/epub/cover.rb +27 -0
- data/lib/rpub/epub/html_toc.rb +25 -0
- data/lib/rpub/epub/toc.rb +35 -0
- data/lib/rpub/hash_delegation.rb +23 -0
- data/lib/rpub/subclass_tracker.rb +53 -0
- data/lib/rpub/version.rb +3 -0
- data/lib/rpub/xml_file.rb +14 -0
- data/rpub.gemspec +52 -0
- data/spec/fixtures/clean/config.yml +2 -0
- data/spec/fixtures/clean/example.epub +0 -0
- data/spec/fixtures/clean/preview.html +0 -0
- data/spec/fixtures/no_files/config.yml +0 -0
- data/spec/fixtures/preview/a.md +1 -0
- data/spec/fixtures/preview/b.md +1 -0
- data/spec/fixtures/preview/config.yml +2 -0
- data/spec/rpub/book_spec.rb +62 -0
- data/spec/rpub/chapter_spec.rb +61 -0
- data/spec/rpub/commands/clean_spec.rb +46 -0
- data/spec/rpub/commands/main_spec.rb +26 -0
- data/spec/rpub/commands/preview_spec.rb +42 -0
- data/spec/rpub_spec.rb +7 -0
- data/spec/spec_helper.rb +21 -0
- data/support/layout.html +22 -0
- data/support/styles.css +66 -0
- metadata +310 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rpub::Book do
|
4
|
+
let(:subject) { described_class.new('some_file', 'title' => 'My "Awesome" Title!', 'version' => '1.0.3') }
|
5
|
+
|
6
|
+
it 'should start with an empty configuration' do
|
7
|
+
described_class.new('some_file').config.should == {}
|
8
|
+
end
|
9
|
+
|
10
|
+
it { should respond_to(:title) }
|
11
|
+
its(:title) { should == 'My "Awesome" Title!' }
|
12
|
+
its(:filename) { should == 'my-awesome-title-1.0.3.epub' }
|
13
|
+
|
14
|
+
describe 'chapters' do
|
15
|
+
before { subject.add_chapter 'foo' }
|
16
|
+
|
17
|
+
it { should have(1).chapters }
|
18
|
+
|
19
|
+
it { should be_kind_of(Enumerable) }
|
20
|
+
|
21
|
+
it 'should start with no chapters' do
|
22
|
+
described_class.new('foo').should have(0).chapters
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should allow chaining multiple calls' do
|
26
|
+
subject << 'foo' << 'bar'
|
27
|
+
subject.should have(3).chapters
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should yield chapters' do
|
31
|
+
yielded = false
|
32
|
+
subject.each { |c| yielded = true }
|
33
|
+
yielded.should be_true
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#uid' do
|
38
|
+
it 'should change when chapters change' do
|
39
|
+
Rpub::Book.new('bar').add_chapter('foo').should_not == subject.uid
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should change when config changes' do
|
43
|
+
Rpub::Book.new('bar', 'baz' => 'qux').should_not == subject.uid
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#images' do
|
48
|
+
before { subject << '![foo](bar)' << '![baz](qux)' << '![bla](qux)' }
|
49
|
+
it { should have(2).images }
|
50
|
+
its(:images) { should include('bar') }
|
51
|
+
its(:images) { should include('qux') }
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#outline' do
|
55
|
+
before { subject << '# foo' << '## bar' }
|
56
|
+
its(:outline) { should have(2).elements }
|
57
|
+
it 'should combine chapter outlines' do
|
58
|
+
subject.outline.first[0].should == 'chapter-0-foo.html'
|
59
|
+
subject.outline.first[1][0].text.should == 'foo'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rpub::Chapter do
|
4
|
+
let(:subject) { described_class.new('foo', 1, 'document') }
|
5
|
+
|
6
|
+
its(:content) { should == 'foo' }
|
7
|
+
its(:number) { should == 1 }
|
8
|
+
its(:layout) { should == 'document' }
|
9
|
+
|
10
|
+
describe '#uid' do
|
11
|
+
it 'should change when content changes' do
|
12
|
+
subject.uid.should_not == described_class.new('bar', 1, 'bar').uid
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should change when layout changes' do
|
16
|
+
subject.uid.should_not == described_class.new('foo', 1, 'qux').uid
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should change when content changes' do
|
20
|
+
subject.uid.should_not == described_class.new('foo', 2, 'bar').uid
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#id' do
|
25
|
+
its(:id) { should == 'chapter-1' }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#filename' do
|
29
|
+
its(:filename) { should == 'chapter-1-untitled.html' }
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#title' do
|
33
|
+
context 'without a suitable markdown title' do
|
34
|
+
its(:title) { should == 'untitled' }
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'with a markdown heading' do
|
38
|
+
let(:subject) { described_class.new('# My Title', 1, 'bar') }
|
39
|
+
its(:title) { should == 'My Title' }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'markdown parsing' do
|
44
|
+
let(:subject) { described_class.new('foo', 1, nil) }
|
45
|
+
its(:to_html) { should == "<p>foo</p>\n" }
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#images' do
|
49
|
+
let(:subject) { described_class.new('![alt](foo.png)', 1, 'document') }
|
50
|
+
|
51
|
+
it { should have(1).images }
|
52
|
+
its('images.first') { should == 'foo.png' }
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#outline' do
|
56
|
+
let(:subject) { described_class.new("# foo\n\nbla bla bla \n\n## bar\n\n# baz", 1, nil) }
|
57
|
+
it 'should list headings in order' do
|
58
|
+
subject.outline.map(&:text).should == %w[foo bar baz]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rpub::Commands::Clean do
|
4
|
+
before do
|
5
|
+
Dir.chdir File.join(FIXTURES_DIRECTORY, 'clean')
|
6
|
+
end
|
7
|
+
|
8
|
+
after do
|
9
|
+
FileUtils.touch 'preview.html'
|
10
|
+
FileUtils.touch 'example.epub'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should remove example.epub file' do
|
14
|
+
expect {
|
15
|
+
described_class.new.invoke
|
16
|
+
}.to remove_file('example.epub')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should remove preview.html file' do
|
20
|
+
expect {
|
21
|
+
described_class.new.invoke
|
22
|
+
}.to remove_file('preview.html')
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when in dry run mode' do
|
26
|
+
let(:buffer) { StringIO.new }
|
27
|
+
let(:subject) { described_class.new(['-d'], buffer) }
|
28
|
+
|
29
|
+
it 'should print preview.html' do
|
30
|
+
subject.invoke
|
31
|
+
buffer.string.should include('preview.html')
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should not print non-existant files' do
|
35
|
+
FileUtils.rm 'preview.html'
|
36
|
+
subject.invoke
|
37
|
+
buffer.string.should_not include('preview.html')
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should not remove existing files' do
|
41
|
+
expect {
|
42
|
+
subject.invoke
|
43
|
+
}.to_not remove_file('preview.html')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rpub::Commands::Main do
|
4
|
+
let(:buffer) { StringIO.new }
|
5
|
+
|
6
|
+
it 'should default to help text' do
|
7
|
+
described_class.new([], buffer).invoke
|
8
|
+
buffer.string.should =~ /Display command reference/
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should raise error when a subcommand remains' do
|
12
|
+
expect {
|
13
|
+
described_class.new(['foo'], buffer).invoke
|
14
|
+
}.should raise_error(Rpub::InvalidSubcommand)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should print the version number' do
|
18
|
+
described_class.new(['-v'], buffer).invoke
|
19
|
+
buffer.string.should =~ /rpub \d+\.\d+\.\d+/
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should print help text' do
|
23
|
+
described_class.new(['-h'], buffer).invoke
|
24
|
+
buffer.string.should =~ /Display command reference/
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rpub::Commands::Preview do
|
4
|
+
before do
|
5
|
+
Dir.chdir File.join(FIXTURES_DIRECTORY, 'preview')
|
6
|
+
end
|
7
|
+
|
8
|
+
after do
|
9
|
+
File.unlink 'preview.html' if File.exist?('preview.html')
|
10
|
+
File.unlink 'foo.bar' if File.exist?('foo.bar')
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'generated content' do
|
14
|
+
before { Rpub::Commands::Preview.new.invoke }
|
15
|
+
let(:subject) { File.read('preview.html') }
|
16
|
+
|
17
|
+
it { should include('<p>foo</p>') }
|
18
|
+
it { should include('<p>bar</p>') }
|
19
|
+
it { should match(/foo.*bar/m) }
|
20
|
+
it { should match(/<head>/) }
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should create new preview file' do
|
24
|
+
expect {
|
25
|
+
Rpub::Commands::Preview.new.invoke
|
26
|
+
}.to create_file('preview.html')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should do nothing when there are no files to preview' do
|
30
|
+
Dir.chdir File.join(FIXTURES_DIRECTORY, 'no_files')
|
31
|
+
expect {
|
32
|
+
Rpub::Commands::Preview.new.invoke
|
33
|
+
}.to_not create_file('preview.html')
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should allow overriding the filename' do
|
37
|
+
expect {
|
38
|
+
Rpub::Commands::Preview.new(['-o', 'foo.bar']).invoke
|
39
|
+
}.to create_file('foo.bar')
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
data/spec/rpub_spec.rb
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rpub'
|
2
|
+
|
3
|
+
FIXTURES_DIRECTORY = File.expand_path('../fixtures', __FILE__)
|
4
|
+
|
5
|
+
RSpec::Matchers.define :remove_file do |filename|
|
6
|
+
match do |block|
|
7
|
+
before = File.exist?(filename)
|
8
|
+
block.call
|
9
|
+
after = File.exist?(filename)
|
10
|
+
before && !after
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
RSpec::Matchers.define :create_file do |filename|
|
15
|
+
match do |block|
|
16
|
+
before = File.exist?(filename)
|
17
|
+
block.call
|
18
|
+
after = File.exist?(filename)
|
19
|
+
!before && after
|
20
|
+
end
|
21
|
+
end
|
data/support/layout.html
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
4
|
+
<head>
|
5
|
+
<%
|
6
|
+
extend ::Kramdown::Utils::Html
|
7
|
+
title = ''
|
8
|
+
if @converter
|
9
|
+
h = @converter.root.children.find {|c| c.type == :header}
|
10
|
+
if h
|
11
|
+
collector = lambda {|c| c.children.collect {|cc| cc.type == :text ? escape_html(cc.value, :text) : collector.call(cc)}.join('')}
|
12
|
+
title = collector.call(h)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
%>
|
16
|
+
<title><%= title %></title>
|
17
|
+
<link rel="stylesheet" href="styles.css" type="text/css" />
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<%= @body %>
|
21
|
+
</body>
|
22
|
+
</html>
|
data/support/styles.css
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
body {
|
2
|
+
margin: 3%;
|
3
|
+
font-family: Georgia, serif;
|
4
|
+
line-height: 1.4em;
|
5
|
+
}
|
6
|
+
|
7
|
+
h1, h2, h3, h4, h5, h6, p, ul, ol, dl, table, img, pre {
|
8
|
+
display: block;
|
9
|
+
margin: 1.4em 0;
|
10
|
+
}
|
11
|
+
|
12
|
+
h1, h2, h3, h4, h5, h6 {
|
13
|
+
font-family: sans-serif;
|
14
|
+
page-break-after: avoid;
|
15
|
+
page-break-inside: avoid;
|
16
|
+
}
|
17
|
+
|
18
|
+
h1 {
|
19
|
+
margin-bottom: 2.8em;
|
20
|
+
page-break-before: always;
|
21
|
+
}
|
22
|
+
|
23
|
+
h2 {
|
24
|
+
margin-top: 2.8em;
|
25
|
+
}
|
26
|
+
|
27
|
+
abbr {
|
28
|
+
font-size: 86.5%;
|
29
|
+
letter-spacing: .1em;
|
30
|
+
cursor: help;
|
31
|
+
}
|
32
|
+
|
33
|
+
.footnotes {
|
34
|
+
font-family: sans-serif;
|
35
|
+
font-size: 86.5%;
|
36
|
+
color: #999;
|
37
|
+
}
|
38
|
+
|
39
|
+
.footnotes ol {
|
40
|
+
list-style-type: decimal-leading-zero;
|
41
|
+
margin: 2.8em 0 1.4em 0;
|
42
|
+
padding: 0 0 0 2.2em;
|
43
|
+
}
|
44
|
+
|
45
|
+
pre {
|
46
|
+
margin-left: 2em;
|
47
|
+
}
|
48
|
+
|
49
|
+
pre, code, kbd, var, tt, .codeRay, .code {
|
50
|
+
font-family: Menlo, monospace;
|
51
|
+
font-size: 86.5%;
|
52
|
+
color: #333;
|
53
|
+
page-break-inside: avoid;
|
54
|
+
}
|
55
|
+
|
56
|
+
.footnotes pre, .footnotes code, .footnotes kbd, .footnotes var, .footnotes tt, .footnotes .codeRay, .footnotes .code {
|
57
|
+
color: #888;
|
58
|
+
}
|
59
|
+
|
60
|
+
dt {
|
61
|
+
font-style: italic;
|
62
|
+
}
|
63
|
+
|
64
|
+
dd {
|
65
|
+
margin: 0 0 0 1.4em;
|
66
|
+
}
|
metadata
ADDED
@@ -0,0 +1,310 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rpub
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Arjan van der Gaag
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-19 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: typogruby
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: kramdown
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rubyzip
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: builder
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: yard
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rspec
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
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
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rake
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: guard
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: guard-rspec
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: rb-fsevent
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: growl
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
type: :development
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
description: an ePub generation library in Ruby
|
191
|
+
email: arjan@arjanvandergaag.nl
|
192
|
+
executables:
|
193
|
+
- rpub
|
194
|
+
extensions: []
|
195
|
+
extra_rdoc_files:
|
196
|
+
- LICENSE
|
197
|
+
- README.md
|
198
|
+
- HISTORY.md
|
199
|
+
files:
|
200
|
+
- .gitignore
|
201
|
+
- .rspec
|
202
|
+
- .travis.yml
|
203
|
+
- .yardopts
|
204
|
+
- Gemfile
|
205
|
+
- Gemfile.lock
|
206
|
+
- Guardfile
|
207
|
+
- HISTORY.md
|
208
|
+
- LICENSE
|
209
|
+
- README.md
|
210
|
+
- Rakefile
|
211
|
+
- bin/rpub
|
212
|
+
- example/advanced/README
|
213
|
+
- example/advanced/config.yml
|
214
|
+
- example/advanced/layout.html
|
215
|
+
- example/advanced/styles.css
|
216
|
+
- example/simple/01-introduction.md
|
217
|
+
- example/simple/02-foo.md
|
218
|
+
- example/simple/03-bar.md
|
219
|
+
- example/simple/config.yml
|
220
|
+
- lib/rpub.rb
|
221
|
+
- lib/rpub/book.rb
|
222
|
+
- lib/rpub/chapter.rb
|
223
|
+
- lib/rpub/commander.rb
|
224
|
+
- lib/rpub/commands/base.rb
|
225
|
+
- lib/rpub/commands/clean.rb
|
226
|
+
- lib/rpub/commands/compile.rb
|
227
|
+
- lib/rpub/commands/help.rb
|
228
|
+
- lib/rpub/commands/main.rb
|
229
|
+
- lib/rpub/commands/package.rb
|
230
|
+
- lib/rpub/commands/preview.rb
|
231
|
+
- lib/rpub/compilation_helpers.rb
|
232
|
+
- lib/rpub/compressor.rb
|
233
|
+
- lib/rpub/epub.rb
|
234
|
+
- lib/rpub/epub/container.rb
|
235
|
+
- lib/rpub/epub/content.rb
|
236
|
+
- lib/rpub/epub/cover.rb
|
237
|
+
- lib/rpub/epub/html_toc.rb
|
238
|
+
- lib/rpub/epub/toc.rb
|
239
|
+
- lib/rpub/hash_delegation.rb
|
240
|
+
- lib/rpub/subclass_tracker.rb
|
241
|
+
- lib/rpub/version.rb
|
242
|
+
- lib/rpub/xml_file.rb
|
243
|
+
- rpub.gemspec
|
244
|
+
- spec/fixtures/clean/config.yml
|
245
|
+
- spec/fixtures/clean/example.epub
|
246
|
+
- spec/fixtures/clean/preview.html
|
247
|
+
- spec/fixtures/no_files/config.yml
|
248
|
+
- spec/fixtures/preview/a.md
|
249
|
+
- spec/fixtures/preview/b.md
|
250
|
+
- spec/fixtures/preview/config.yml
|
251
|
+
- spec/rpub/book_spec.rb
|
252
|
+
- spec/rpub/chapter_spec.rb
|
253
|
+
- spec/rpub/commands/clean_spec.rb
|
254
|
+
- spec/rpub/commands/main_spec.rb
|
255
|
+
- spec/rpub/commands/preview_spec.rb
|
256
|
+
- spec/rpub_spec.rb
|
257
|
+
- spec/spec_helper.rb
|
258
|
+
- support/layout.html
|
259
|
+
- support/styles.css
|
260
|
+
homepage: http://avdgaag.github.com/rpub
|
261
|
+
licenses: []
|
262
|
+
post_install_message:
|
263
|
+
rdoc_options:
|
264
|
+
- --charset=UTF-8
|
265
|
+
require_paths:
|
266
|
+
- lib
|
267
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
268
|
+
none: false
|
269
|
+
requirements:
|
270
|
+
- - ! '>='
|
271
|
+
- !ruby/object:Gem::Version
|
272
|
+
version: '0'
|
273
|
+
segments:
|
274
|
+
- 0
|
275
|
+
hash: 756011084715788975
|
276
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
277
|
+
none: false
|
278
|
+
requirements:
|
279
|
+
- - ! '>='
|
280
|
+
- !ruby/object:Gem::Version
|
281
|
+
version: '0'
|
282
|
+
segments:
|
283
|
+
- 0
|
284
|
+
hash: 756011084715788975
|
285
|
+
requirements: []
|
286
|
+
rubyforge_project:
|
287
|
+
rubygems_version: 1.8.22
|
288
|
+
signing_key:
|
289
|
+
specification_version: 3
|
290
|
+
summary: ! 'rPub is a command-line tool that generates a collection of plain text
|
291
|
+
input files into an eBook in ePub format. It provides several related functions
|
292
|
+
to make working with ePub files a little easier: * Generation of table of contents
|
293
|
+
* Tracking of references to tables or figures * Validation of output file * Packaging
|
294
|
+
your eBook in an archive with additional README file * Very simple version control'
|
295
|
+
test_files:
|
296
|
+
- spec/fixtures/clean/config.yml
|
297
|
+
- spec/fixtures/clean/example.epub
|
298
|
+
- spec/fixtures/clean/preview.html
|
299
|
+
- spec/fixtures/no_files/config.yml
|
300
|
+
- spec/fixtures/preview/a.md
|
301
|
+
- spec/fixtures/preview/b.md
|
302
|
+
- spec/fixtures/preview/config.yml
|
303
|
+
- spec/rpub/book_spec.rb
|
304
|
+
- spec/rpub/chapter_spec.rb
|
305
|
+
- spec/rpub/commands/clean_spec.rb
|
306
|
+
- spec/rpub/commands/main_spec.rb
|
307
|
+
- spec/rpub/commands/preview_spec.rb
|
308
|
+
- spec/rpub_spec.rb
|
309
|
+
- spec/spec_helper.rb
|
310
|
+
has_rdoc:
|