author 1.0.1.alpha → 1.1.0.alpha
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.
- checksums.yaml +8 -8
- data/README.md +24 -11
- data/author.gemspec +1 -0
- data/lib/author/commands/builder.rb +15 -0
- data/lib/author/commands/cli.rb +2 -0
- data/lib/author/commands/generator.rb +3 -0
- data/lib/author/exporters/xhtml.rb +92 -0
- data/lib/author/templates/layout.xhtml +12 -0
- data/lib/author/version.rb +1 -1
- data/lib/author.rb +5 -0
- data/test/commands/builder_test.rb +13 -0
- data/test/commands/cli_test.rb +4 -0
- data/test/commands/generator_test.rb +2 -0
- data/test/exporters/xhtml_test.rb +58 -0
- data/test/helper.rb +17 -0
- data/test/sample_book/Gemfile +6 -0
- data/test/sample_book/chapters/one.md +3 -0
- data/test/sample_book/chapters/three.md +1 -0
- data/test/sample_book/chapters/two.md +1 -0
- data/test/sample_book/config.yml +4 -0
- data/test/sample_book/outline.txt +3 -0
- data/test/sample_book/templates/layout.xhtml +12 -0
- metadata +36 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTBlMzUwOWE0ZjQ3MWNjYmJmYmU2Y2JlNmQ0YmZhOWVkODJmZTA2NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZmRiMDRjZDlmMjdjZTUzM2Q1ZDhhZmY5ODg1YWE1NjU5YzQzZGQ1NA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OWVkNjRiNDhmYWNkMjBlNTNhMGZhMGRkNjAyNzhiMDEwZmVjMzY5YWRmMmIw
|
10
|
+
MmIxMWY3N2RkMmJiOGIzOWM0NzY2MDcwNTc4NWU0MGNhNDgyOTMxMjA4NmUz
|
11
|
+
YTczY2UzNjYwMTJiOGRjYWViZTQwZDA3MTE2NWVmYzI3OWVhYTE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ODgwZDBlYzhlOWE4YzQ5OTFkN2QyNDNkNTNiYzQxY2Q2ODYxZmViOWRjZTk4
|
14
|
+
ZTBkNzlhOWVjMDg5MzUwYzg2NjA5NDBhYTVlMzRiYjVlMTRhOWNhNDU1NzEy
|
15
|
+
NjZjYmMzODk3NDVjZTZhYjhiODA0YTg2MDI2MDJmZDE3ZGY0ZGQ=
|
data/README.md
CHANGED
@@ -1,21 +1,23 @@
|
|
1
|
-
# Author
|
1
|
+
# Author [](http://badge.fury.io/gh/tschmidt%2Fauthor)
|
2
2
|
|
3
|
-
[](https://travis-ci.org/tschmidt/author)
|
3
|
+
[](https://travis-ci.org/tschmidt/author) [](https://gemnasium.com/tschmidt/author)
|
4
4
|
|
5
5
|
**ATTN:** This is still **very** alpha. Not everything is working. Use at your own risk.
|
6
6
|
|
7
|
+
*[imho]: In my humble opinion
|
8
|
+
|
7
9
|
A simple tool to help you write your next ebook.
|
8
10
|
|
9
11
|
I had a major itch and this is what I used to scratch it. I wanted to write an ebook, but
|
10
|
-
|
12
|
+
couldn't find a toolset that had everything I wanted. Leanpub was too limited on the
|
11
13
|
styling of the book. Kitabu drove me nuts with the hoops I had to jump through with
|
12
14
|
nokogiri. Wordsmith didn't do it for me either.
|
13
15
|
|
14
16
|
What was I looking for?
|
15
17
|
|
16
|
-
-
|
18
|
+
- A simple way to write my chapters in Markdown
|
17
19
|
- Generate PDFs and ePubs that were pretty to look at
|
18
|
-
- Have better looking
|
20
|
+
- Have better looking code blocks
|
19
21
|
- Not have to do a ton of configuration!!!!
|
20
22
|
|
21
23
|
Thus, Author was born.
|
@@ -34,7 +36,7 @@ Or install it yourself with:
|
|
34
36
|
|
35
37
|
$ gem install author
|
36
38
|
|
37
|
-
##
|
39
|
+
## Quick Start Guide
|
38
40
|
|
39
41
|
$ author new mybook
|
40
42
|
$ cd mybook
|
@@ -50,15 +52,26 @@ finished book:
|
|
50
52
|
|
51
53
|
Once you've done that, just run one of the following commands:
|
52
54
|
|
53
|
-
author build xhtml
|
54
|
-
author build pdf
|
55
|
-
author build epub
|
55
|
+
author build xhtml
|
56
|
+
author build pdf
|
57
|
+
author build epub
|
58
|
+
author build mobi
|
56
59
|
author build all # Builds everything in one go
|
57
60
|
|
58
61
|
That's it!
|
59
62
|
|
60
|
-
|
61
|
-
|
63
|
+
## Full Tutorial
|
64
|
+
|
65
|
+
Coming soon.
|
66
|
+
|
67
|
+
## Dependencies
|
68
|
+
|
69
|
+
There are a couple of executables that Author requires to do its job.
|
70
|
+
|
71
|
+
- [Prince XML](http://www.princexml.com): This is the tool used to create PDFs of your book. The free version of Prince XML is fully functional and adds a small icon to the first page of your PDF. I've looked at other solutions and this - imho - is the best one.
|
72
|
+
- [KindleGen](http://www.amazon.com/gp/feature.html?docId=1000765211): This is a tool from Amazon that will generate a `.mobi` file.
|
73
|
+
|
74
|
+
You can run `author check` to find out if you have these dependencies installed on your system.
|
62
75
|
|
63
76
|
## Contributing
|
64
77
|
|
data/author.gemspec
CHANGED
data/lib/author/commands/cli.rb
CHANGED
@@ -13,6 +13,8 @@ module Author
|
|
13
13
|
register Author::Commands::Check, 'check', 'check', 'Check that all dependencies are installed'
|
14
14
|
register Author::Commands::Generator, 'new', 'new <book-name>', 'Create a new book project'
|
15
15
|
|
16
|
+
register Author::Commands::Builder, 'build', 'build', 'Build the specified format'
|
17
|
+
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -24,6 +24,9 @@ module Author
|
|
24
24
|
copy_file 'Gemfile', 'Gemfile'
|
25
25
|
create_file 'outline.txt'
|
26
26
|
template 'sample.md', 'chapters/sample.md'
|
27
|
+
template 'layout.xhtml', 'templates/layout.xhtml'
|
28
|
+
|
29
|
+
gsub_file 'templates/layout.xhtml', '<!-- insert @body -->', '<%= @body %>'
|
27
30
|
end
|
28
31
|
|
29
32
|
def bundle_gems
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'liquid'
|
2
|
+
require 'kramdown'
|
3
|
+
require 'author/plugins/awesome_codeblock'
|
4
|
+
|
5
|
+
module Author
|
6
|
+
module Exporters
|
7
|
+
class XHTML
|
8
|
+
# step 1: get file names from the outline.txt file
|
9
|
+
# step 2: create a new file called all.md
|
10
|
+
# step 3: concatenate all files and output to all.md
|
11
|
+
# step 4: run all.md through liquid
|
12
|
+
# step 5: run all.md through kramdown with template specified in config
|
13
|
+
# step 6: output result of step 5 to `export/book.xhtml`
|
14
|
+
# step 7: handle css and images
|
15
|
+
|
16
|
+
def self.export
|
17
|
+
exporter = new
|
18
|
+
exporter.combine_all_files
|
19
|
+
exporter.liquify
|
20
|
+
exporter.kramdownify
|
21
|
+
end
|
22
|
+
|
23
|
+
def root_dir
|
24
|
+
Dir.pwd
|
25
|
+
end
|
26
|
+
|
27
|
+
def source_dir
|
28
|
+
File.join(root_dir, 'chapters')
|
29
|
+
end
|
30
|
+
|
31
|
+
def outline_path
|
32
|
+
filepath = File.join(root_dir, 'outline.txt')
|
33
|
+
raise "No outline.txt file found. Make sure you are in an author project." unless File.file?(filepath)
|
34
|
+
filepath
|
35
|
+
end
|
36
|
+
|
37
|
+
def file_names
|
38
|
+
[].tap do |array|
|
39
|
+
File.readlines(outline_path).each do |line|
|
40
|
+
array << line.gsub(/\n/, '')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def combined_file_path
|
46
|
+
File.join(source_dir, 'all.md')
|
47
|
+
end
|
48
|
+
|
49
|
+
def output_path
|
50
|
+
File.join(source_dir, '..', 'export', 'book.xhtml')
|
51
|
+
end
|
52
|
+
|
53
|
+
def layout_path
|
54
|
+
File.join(source_dir, '..', 'templates', 'layout.xhtml')
|
55
|
+
end
|
56
|
+
|
57
|
+
def combine_all_files
|
58
|
+
File.open(combined_file_path, 'w') do |file|
|
59
|
+
file.puts concatenate_files
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def concatenate_files
|
64
|
+
''.tap do |output|
|
65
|
+
file_names.each do |file_name|
|
66
|
+
filepath = File.join(source_dir, file_name)
|
67
|
+
next unless File.file?(filepath)
|
68
|
+
output += IO.read(filepath)
|
69
|
+
output += "\n\n" unless file_name == file_names.last
|
70
|
+
end
|
71
|
+
return output
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def liquify(assigns = {})
|
76
|
+
@assigns = assigns
|
77
|
+
liquified_output = Liquid::Template.parse(IO.read(combined_file_path)).render(@assigns)
|
78
|
+
File.open(combined_file_path, 'w') do |file|
|
79
|
+
file.puts liquified_output
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def kramdownify
|
84
|
+
kramified_output = Kramdown::Document.new(IO.read(combined_file_path), template: layout_path).to_html
|
85
|
+
File.open(output_path, 'w') do |file|
|
86
|
+
file.puts kramified_output
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
data/lib/author/version.rb
CHANGED
data/lib/author.rb
CHANGED
@@ -11,11 +11,16 @@ end
|
|
11
11
|
# stdlib
|
12
12
|
|
13
13
|
# 3rd party
|
14
|
+
require 'liquid'
|
15
|
+
require 'coderay'
|
16
|
+
require 'thor'
|
17
|
+
require 'kramdown'
|
14
18
|
|
15
19
|
# internals
|
16
20
|
require 'author/version'
|
17
21
|
require_all 'author/commands'
|
18
22
|
require_all 'author/plugins'
|
23
|
+
require_all 'author/exporters'
|
19
24
|
|
20
25
|
module Author
|
21
26
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
require 'author/commands/builder'
|
3
|
+
|
4
|
+
describe Author::Commands::Builder do
|
5
|
+
|
6
|
+
let(:builder) { Author::Commands::Builder }
|
7
|
+
|
8
|
+
it "should respond to xhtml" do
|
9
|
+
output = capture { builder.start }
|
10
|
+
expect(output).to_include "xhtml"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
data/test/commands/cli_test.rb
CHANGED
@@ -15,6 +15,7 @@ describe Author::Commands::Generator do
|
|
15
15
|
'abook'.must_be_a_directory
|
16
16
|
'abook/chapters'.must_be_a_directory
|
17
17
|
'abook/export'.must_be_a_directory
|
18
|
+
'abook/templates'.must_be_a_directory
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
@@ -26,6 +27,7 @@ describe Author::Commands::Generator do
|
|
26
27
|
'ihazfiles/Gemfile'.must_be_a_file
|
27
28
|
'ihazfiles/outline.txt'.must_be_a_file
|
28
29
|
'ihazfiles/chapters/sample.md'.must_be_a_file
|
30
|
+
'ihazfiles/templates/layout.xhtml'.must_be_a_file
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
require 'author/exporters/xhtml'
|
3
|
+
|
4
|
+
describe Author::Exporters::XHTML do
|
5
|
+
|
6
|
+
let(:exporter) { Author::Exporters::XHTML.new }
|
7
|
+
|
8
|
+
it "should return a list of files" do
|
9
|
+
inside_sample_book do
|
10
|
+
expect(exporter.file_names).to_equal ['one.md', 'two.md', 'three.md']
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should combine the files" do
|
15
|
+
inside_sample_book do
|
16
|
+
expect(exporter.concatenate_files).to_include %q[## This is chapter one]
|
17
|
+
expect(exporter.concatenate_files).to_include %q[## This is chapter two]
|
18
|
+
expect(exporter.concatenate_files).to_include %q[## This is chapter three]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should create a file called all.md" do
|
23
|
+
inside_sample_book do
|
24
|
+
exporter.combine_all_files
|
25
|
+
'chapters/all.md'.must_be_a_file
|
26
|
+
output = IO.read('chapters/all.md')
|
27
|
+
expect(exporter.concatenate_files).to_include %q[## This is chapter one]
|
28
|
+
expect(exporter.concatenate_files).to_include %q[## This is chapter two]
|
29
|
+
expect(exporter.concatenate_files).to_include %q[## This is chapter three]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should parse liquid" do
|
34
|
+
inside_sample_book do
|
35
|
+
exporter.combine_all_files
|
36
|
+
exporter.liquify({"foo" => "foo output"})
|
37
|
+
output = IO.read('chapters/all.md')
|
38
|
+
expect(output).to_include "Liquid test foo output"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should parse kramdown" do
|
43
|
+
inside_sample_book do
|
44
|
+
exporter.combine_all_files
|
45
|
+
exporter.kramdownify
|
46
|
+
output = IO.read('export/book.xhtml')
|
47
|
+
expect(output).to_include %q[<h2 id="this-is-chapter-one">This is chapter one</h2>]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should create book.xhtml" do
|
52
|
+
inside_sample_book do
|
53
|
+
Author::Exporters::XHTML.export
|
54
|
+
'export/book.xhtml'.must_be_a_file
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/test/helper.rb
CHANGED
@@ -50,6 +50,23 @@ module AuthorHelpers
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
def sample_book_path
|
54
|
+
File.join(File.dirname(__FILE__), 'sample_book')
|
55
|
+
end
|
56
|
+
|
57
|
+
def ensure_clean_book
|
58
|
+
rm_f File.join(sample_book_path, 'chapters', 'all.md')
|
59
|
+
rm_f File.join(sample_book_path, 'export', 'book.xhtml')
|
60
|
+
end
|
61
|
+
|
62
|
+
def inside_sample_book
|
63
|
+
ensure_clean_book
|
64
|
+
cd(sample_book_path) do
|
65
|
+
yield
|
66
|
+
end
|
67
|
+
ensure_clean_book
|
68
|
+
end
|
69
|
+
|
53
70
|
end
|
54
71
|
MiniTest::Test.send :include, AuthorHelpers
|
55
72
|
|
@@ -0,0 +1 @@
|
|
1
|
+
## This is chapter three
|
@@ -0,0 +1 @@
|
|
1
|
+
## This is chapter two
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: author
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.1.0.alpha
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Terry Schmidt
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ! '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: kramdown
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ! '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
description: Quickly create ebooks using Markdown
|
112
126
|
email:
|
113
127
|
- terry.m.schmidt@gmail.com
|
@@ -125,19 +139,24 @@ files:
|
|
125
139
|
- author.gemspec
|
126
140
|
- bin/author
|
127
141
|
- lib/author.rb
|
142
|
+
- lib/author/commands/builder.rb
|
128
143
|
- lib/author/commands/check.rb
|
129
144
|
- lib/author/commands/cli.rb
|
130
145
|
- lib/author/commands/generator.rb
|
131
146
|
- lib/author/commands/version.rb
|
147
|
+
- lib/author/exporters/xhtml.rb
|
132
148
|
- lib/author/plugins/awesome_codeblock.rb
|
133
149
|
- lib/author/templates/Gemfile
|
134
150
|
- lib/author/templates/config.yml
|
151
|
+
- lib/author/templates/layout.xhtml
|
135
152
|
- lib/author/templates/sample.md
|
136
153
|
- lib/author/version.rb
|
154
|
+
- test/commands/builder_test.rb
|
137
155
|
- test/commands/check_test.rb
|
138
156
|
- test/commands/cli_test.rb
|
139
157
|
- test/commands/generator_test.rb
|
140
158
|
- test/commands/version_test.rb
|
159
|
+
- test/exporters/xhtml_test.rb
|
141
160
|
- test/helper.rb
|
142
161
|
- test/liquids/highlight_lines.md
|
143
162
|
- test/liquids/language_set.md
|
@@ -148,6 +167,13 @@ files:
|
|
148
167
|
- test/liquids/title_as_filepath.md
|
149
168
|
- test/liquids/title_as_string.md
|
150
169
|
- test/plugins/awesome_codeblock_test.rb
|
170
|
+
- test/sample_book/Gemfile
|
171
|
+
- test/sample_book/chapters/one.md
|
172
|
+
- test/sample_book/chapters/three.md
|
173
|
+
- test/sample_book/chapters/two.md
|
174
|
+
- test/sample_book/config.yml
|
175
|
+
- test/sample_book/outline.txt
|
176
|
+
- test/sample_book/templates/layout.xhtml
|
151
177
|
- test/utils/assertions.rb
|
152
178
|
homepage: http://github.com/tschmidt/author
|
153
179
|
licenses:
|
@@ -174,10 +200,12 @@ signing_key:
|
|
174
200
|
specification_version: 4
|
175
201
|
summary: Quickly create ebooks using Markdown
|
176
202
|
test_files:
|
203
|
+
- test/commands/builder_test.rb
|
177
204
|
- test/commands/check_test.rb
|
178
205
|
- test/commands/cli_test.rb
|
179
206
|
- test/commands/generator_test.rb
|
180
207
|
- test/commands/version_test.rb
|
208
|
+
- test/exporters/xhtml_test.rb
|
181
209
|
- test/helper.rb
|
182
210
|
- test/liquids/highlight_lines.md
|
183
211
|
- test/liquids/language_set.md
|
@@ -188,4 +216,11 @@ test_files:
|
|
188
216
|
- test/liquids/title_as_filepath.md
|
189
217
|
- test/liquids/title_as_string.md
|
190
218
|
- test/plugins/awesome_codeblock_test.rb
|
219
|
+
- test/sample_book/Gemfile
|
220
|
+
- test/sample_book/chapters/one.md
|
221
|
+
- test/sample_book/chapters/three.md
|
222
|
+
- test/sample_book/chapters/two.md
|
223
|
+
- test/sample_book/config.yml
|
224
|
+
- test/sample_book/outline.txt
|
225
|
+
- test/sample_book/templates/layout.xhtml
|
191
226
|
- test/utils/assertions.rb
|