author 1.1.4.alpha → 1.1.5.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/author.gemspec +4 -0
- data/lib/author.rb +11 -0
- data/lib/author/commands/builder.rb +8 -0
- data/lib/author/commands/generator.rb +8 -3
- data/lib/author/configuration.rb +33 -0
- data/lib/author/exporters/epub.rb +46 -0
- data/lib/author/exporters/mobi.rb +1 -1
- data/lib/author/templates/Gemfile +1 -4
- data/lib/author/templates/config.yml +7 -3
- data/lib/author/templates/layout.xhtml +1 -1
- data/lib/author/templates/sample.md +1 -1
- data/lib/author/utils.rb +29 -0
- data/lib/author/version.rb +1 -1
- data/test/commands/builder_test.rb +4 -0
- data/test/commands/generator_test.rb +1 -1
- data/test/exporters/epub_test.rb +37 -0
- data/test/sample_book/config.yml +4 -3
- data/test/units/configuration_test.rb +40 -0
- metadata +65 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDE0ODkwNmFhODlhNDE2Njk1Mjc2Njk5NmZmMGM4ZTZjMjlkYWY3OA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NTM4MzIyYTY5ZDI0ODk4ZWY5MmI0N2I3NDgzMTljZGM5Mjc2YWY2Yw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YmQ2MWY1OGQzMjczMmE0ODY0ZmI1YjFhNTVlNGZkYmE4NzUxODliZjk2Y2I4
|
10
|
+
MmYyMjIzMWFiMGFlNTA3YWIxMzgzZWVlNTk1ZWRhYTM3M2UzYzMxMjI3ZDhm
|
11
|
+
MTRiZjliZmUwNTRhZjk1YTBhZTIzN2Q3Y2YyNzdmMjAzZDRjNTY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjAwODA1YzUxNGRmNjVhMzEzOTdiZGRkMjQzMzViMmRkNzQyMGUyMTgxZDA1
|
14
|
+
MmM0OGNhOWYyN2Y3MTgwOWMwMWNmODc5NTQyY2RkOTk5ZmFjZTQyM2U1ZWFh
|
15
|
+
Y2FhMDI3YWQ5Nzc3N2Q5ZTEzYzBjODYwY2E3MTc5MmVhYmM0MDk=
|
data/author.gemspec
CHANGED
@@ -27,4 +27,8 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_dependency "liquid"
|
28
28
|
spec.add_dependency "coderay"
|
29
29
|
spec.add_dependency "kramdown"
|
30
|
+
spec.add_dependency "safe_yaml"
|
31
|
+
spec.add_dependency "eeepub"
|
32
|
+
spec.add_dependency "rubyzip"
|
33
|
+
spec.add_dependency "zip-zip"
|
30
34
|
end
|
data/lib/author.rb
CHANGED
@@ -15,13 +15,24 @@ require 'liquid'
|
|
15
15
|
require 'coderay'
|
16
16
|
require 'thor'
|
17
17
|
require 'kramdown'
|
18
|
+
require 'safe_yaml'
|
18
19
|
|
19
20
|
# internals
|
20
21
|
require 'author/version'
|
22
|
+
require 'author/utils'
|
23
|
+
require 'author/configuration'
|
21
24
|
require_all 'author/commands'
|
22
25
|
require_all 'author/plugins'
|
23
26
|
require_all 'author/exporters'
|
24
27
|
|
25
28
|
module Author
|
26
29
|
|
30
|
+
def self.configuration(override = nil)
|
31
|
+
config = Configuration[Configuration::DEFAULTS]
|
32
|
+
override = Configuration[override || config.load_override_file || {}].stringify_keys
|
33
|
+
config = Utils.deep_merge_hashes(config, override).stringify_keys
|
34
|
+
|
35
|
+
config
|
36
|
+
end
|
37
|
+
|
27
38
|
end
|
@@ -26,6 +26,14 @@ module Author
|
|
26
26
|
Author::Exporters::Mobi.export
|
27
27
|
end
|
28
28
|
|
29
|
+
desc "epub", "Build ePub format"
|
30
|
+
def epub
|
31
|
+
say "Building the XHTML site"
|
32
|
+
Author::Exporters::XHTML.export
|
33
|
+
say "Building the epub file"
|
34
|
+
Author::Exporters::Epub.export
|
35
|
+
end
|
36
|
+
|
29
37
|
end
|
30
38
|
end
|
31
39
|
end
|
@@ -5,14 +5,14 @@ module Author
|
|
5
5
|
class Generator < Thor::Group
|
6
6
|
include Thor::Actions
|
7
7
|
|
8
|
-
argument :
|
8
|
+
argument :title
|
9
9
|
|
10
10
|
def set_destination_root
|
11
|
-
self.destination_root = File.join(self.destination_root,
|
11
|
+
self.destination_root = File.join(self.destination_root, title)
|
12
12
|
end
|
13
13
|
|
14
14
|
def create_project_structure
|
15
|
-
say "Creating directories for your new book, #{
|
15
|
+
say "Creating directories for your new book, #{title}"
|
16
16
|
empty_directory "chapters"
|
17
17
|
empty_directory "export"
|
18
18
|
empty_directory "templates"
|
@@ -44,6 +44,11 @@ module Author
|
|
44
44
|
File.join(File.dirname(__FILE__), '..', 'templates')
|
45
45
|
end
|
46
46
|
|
47
|
+
def creator
|
48
|
+
creator = `finger $USER 2> /dev/null | grep Login | colrm 1 46 2> /dev/null`.chomp
|
49
|
+
!creator.empty? ? creator : "John Doe"
|
50
|
+
end
|
51
|
+
|
47
52
|
end
|
48
53
|
end
|
49
54
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'safe_yaml/load'
|
2
|
+
|
3
|
+
module Author
|
4
|
+
class Configuration < Hash
|
5
|
+
|
6
|
+
DEFAULTS = {
|
7
|
+
'eeepub' => {
|
8
|
+
'title' => nil,
|
9
|
+
'creator' => nil,
|
10
|
+
'publisher' => nil,
|
11
|
+
'date' => nil,
|
12
|
+
'identifier' => nil,
|
13
|
+
'uid' => nil,
|
14
|
+
'files' => [],
|
15
|
+
'nav' => []
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
def stringify_keys
|
20
|
+
reduce({}) { |hsh, (k,v)| hsh.merge(k.to_s => v) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def override_config_path
|
24
|
+
filepath = File.join(Dir.pwd, 'config.yml')
|
25
|
+
File.file?(filepath) ? filepath : nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def load_override_file
|
29
|
+
SafeYAML.load_file(override_config_path) if override_config_path
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'eeepub'
|
2
|
+
|
3
|
+
module Author
|
4
|
+
module Exporters
|
5
|
+
class Epub < Base
|
6
|
+
# 1. check that xhtml file exists
|
7
|
+
# 2. check that css file exists
|
8
|
+
# 3. create epub
|
9
|
+
|
10
|
+
def self.export
|
11
|
+
exporter = new
|
12
|
+
exporter.xhtml_exists?
|
13
|
+
exporter.css_exists?
|
14
|
+
exporter.export
|
15
|
+
end
|
16
|
+
|
17
|
+
def xhtml_exists?
|
18
|
+
raise "No book.xhtml file found" unless File.file?(output_path)
|
19
|
+
end
|
20
|
+
|
21
|
+
def css_exists?
|
22
|
+
raise "No book.css file found" unless File.file?(theme_path)
|
23
|
+
end
|
24
|
+
|
25
|
+
def export
|
26
|
+
c = config
|
27
|
+
f = [output_path, theme_path]
|
28
|
+
epub = EeePub.make do
|
29
|
+
title c['title']
|
30
|
+
creator c['creator']
|
31
|
+
publisher c['publisher']
|
32
|
+
date c['date']
|
33
|
+
identifier c['identifier'], :scheme => 'URL'
|
34
|
+
uid c['uid']
|
35
|
+
files f
|
36
|
+
end
|
37
|
+
epub.save(File.join(export_path, 'book.epub'))
|
38
|
+
end
|
39
|
+
|
40
|
+
def config
|
41
|
+
Author.configuration.fetch('eeepub')
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
3
3
|
<head>
|
4
4
|
<meta charset="utf-8" />
|
5
|
-
<title><%=
|
5
|
+
<title><%= title %></title>
|
6
6
|
<link rel="stylesheet" href="book.css" type="text/css" media="all" title="Default ebook theme" charset="utf-8" />
|
7
7
|
</head>
|
8
8
|
<body>
|
data/lib/author/utils.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module Author
|
2
|
+
class Utils
|
3
|
+
|
4
|
+
# Merges a master hash with another hash, recursively.
|
5
|
+
#
|
6
|
+
# master_hash - the "parent" hash whose values will be overridden
|
7
|
+
# other_hash - the other hash whose values will be persisted after the merge
|
8
|
+
#
|
9
|
+
# This code was lovingly stolen from some random gem:
|
10
|
+
# http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
|
11
|
+
#
|
12
|
+
# Thanks to whoever made it.
|
13
|
+
def self.deep_merge_hashes(master_hash, other_hash)
|
14
|
+
target = master_hash.dup
|
15
|
+
|
16
|
+
other_hash.keys.each do |key|
|
17
|
+
if other_hash[key].is_a? Hash and target[key].is_a? Hash
|
18
|
+
target[key] = Utils.deep_merge_hashes(target[key], other_hash[key])
|
19
|
+
next
|
20
|
+
end
|
21
|
+
|
22
|
+
target[key] = other_hash[key]
|
23
|
+
end
|
24
|
+
|
25
|
+
target
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/lib/author/version.rb
CHANGED
@@ -5,7 +5,7 @@ describe Author::Commands::Generator do
|
|
5
5
|
|
6
6
|
it "should require a name" do
|
7
7
|
output = capture(:stderr) { Author::Commands::Generator.start }
|
8
|
-
expect(output).to_include "No value provided for required arguments '
|
8
|
+
expect(output).to_include "No value provided for required arguments 'title'"
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should create project structure" do
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
require 'author/exporters/base'
|
3
|
+
require 'author/exporters/epub'
|
4
|
+
|
5
|
+
describe Author::Exporters::Epub do
|
6
|
+
|
7
|
+
let(:exporter) { Author::Exporters::Epub }
|
8
|
+
|
9
|
+
it "should respond to #export" do
|
10
|
+
expect(exporter).to_respond_to :export
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should raise error if no book.xhtml file exists" do
|
14
|
+
expect { exporter.export }.to_raise RuntimeError
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should raise error if no book.css file exists" do
|
18
|
+
expect { exporter.export }.to_raise RuntimeError
|
19
|
+
end
|
20
|
+
|
21
|
+
context "an instance" do
|
22
|
+
let(:exporter) { Author::Exporters::Epub.new }
|
23
|
+
|
24
|
+
it "should respond to #xhtml_exists?" do
|
25
|
+
expect(exporter).to_respond_to :xhtml_exists?
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should respond to #css_exists?" do
|
29
|
+
expect(exporter).to_respond_to :css_exists?
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should respond to #export" do
|
33
|
+
expect(exporter).to_respond_to :export
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
data/test/sample_book/config.yml
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
require 'author/configuration'
|
3
|
+
|
4
|
+
describe Author::Configuration do
|
5
|
+
|
6
|
+
let(:config) { Author::Configuration }
|
7
|
+
|
8
|
+
let(:mixed_keys) do
|
9
|
+
config[{
|
10
|
+
'foo' => 'bar',
|
11
|
+
:source => './'
|
12
|
+
}]
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:string_keys) do
|
16
|
+
config[{
|
17
|
+
'foo' => 'bar',
|
18
|
+
'source' => './'
|
19
|
+
}]
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should stringify keys" do
|
23
|
+
expect(mixed_keys.stringify_keys).to_equal string_keys
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should not mess with keys that are already strings" do
|
27
|
+
expect(string_keys.stringify_keys).to_equal string_keys
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should know about override config path" do
|
31
|
+
expect(string_keys).to_respond_to :override_config_path
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should load config file" do
|
35
|
+
inside_sample_book do
|
36
|
+
expect(string_keys.load_override_file).to_include "eeepub"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: author
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.5.alpha
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Terry Schmidt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -122,6 +122,62 @@ dependencies:
|
|
122
122
|
- - ! '>='
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: safe_yaml
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ! '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: eeepub
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ! '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ! '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rubyzip
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ! '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ! '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: zip-zip
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ! '>='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
125
181
|
description: Quickly create ebooks using Markdown
|
126
182
|
email:
|
127
183
|
- terry.m.schmidt@gmail.com
|
@@ -144,7 +200,9 @@ files:
|
|
144
200
|
- lib/author/commands/cli.rb
|
145
201
|
- lib/author/commands/generator.rb
|
146
202
|
- lib/author/commands/version.rb
|
203
|
+
- lib/author/configuration.rb
|
147
204
|
- lib/author/exporters/base.rb
|
205
|
+
- lib/author/exporters/epub.rb
|
148
206
|
- lib/author/exporters/mobi.rb
|
149
207
|
- lib/author/exporters/pdf.rb
|
150
208
|
- lib/author/exporters/xhtml.rb
|
@@ -154,12 +212,14 @@ files:
|
|
154
212
|
- lib/author/templates/config.yml
|
155
213
|
- lib/author/templates/layout.xhtml
|
156
214
|
- lib/author/templates/sample.md
|
215
|
+
- lib/author/utils.rb
|
157
216
|
- lib/author/version.rb
|
158
217
|
- test/commands/builder_test.rb
|
159
218
|
- test/commands/check_test.rb
|
160
219
|
- test/commands/cli_test.rb
|
161
220
|
- test/commands/generator_test.rb
|
162
221
|
- test/commands/version_test.rb
|
222
|
+
- test/exporters/epub_test.rb
|
163
223
|
- test/exporters/mobi_test.rb
|
164
224
|
- test/exporters/pdf_test.rb
|
165
225
|
- test/exporters/xhtml_test.rb
|
@@ -181,6 +241,7 @@ files:
|
|
181
241
|
- test/sample_book/export/book.xhtml
|
182
242
|
- test/sample_book/outline.txt
|
183
243
|
- test/sample_book/templates/layout.xhtml
|
244
|
+
- test/units/configuration_test.rb
|
184
245
|
- test/utils/assertions.rb
|
185
246
|
homepage: http://github.com/tschmidt/author
|
186
247
|
licenses:
|
@@ -212,6 +273,7 @@ test_files:
|
|
212
273
|
- test/commands/cli_test.rb
|
213
274
|
- test/commands/generator_test.rb
|
214
275
|
- test/commands/version_test.rb
|
276
|
+
- test/exporters/epub_test.rb
|
215
277
|
- test/exporters/mobi_test.rb
|
216
278
|
- test/exporters/pdf_test.rb
|
217
279
|
- test/exporters/xhtml_test.rb
|
@@ -233,4 +295,5 @@ test_files:
|
|
233
295
|
- test/sample_book/export/book.xhtml
|
234
296
|
- test/sample_book/outline.txt
|
235
297
|
- test/sample_book/templates/layout.xhtml
|
298
|
+
- test/units/configuration_test.rb
|
236
299
|
- test/utils/assertions.rb
|