author 1.0.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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MmViMWM2MzJjNTc0NmE0Mzg1ZWIyZTIwMjc3NjU5NWZmYzg1OWRmZg==
5
+ data.tar.gz: !binary |-
6
+ M2NkZDEyNDU1OTE4MjA4Y2Y1MDI1OGM5MmNhYWNiZGE4ZjUzYjVmNg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ Nzk2NGM2ODcwZjEwZDhkN2VhYTI1YzZjNWU0YWE4YTQ2M2U4MTE2OGMyZTZh
10
+ ODBiNmY4N2FlOTg1MjYwZDI3MzU1ZjE4ZDc0MzI3Zjc2ZWU3YjZkNGViMDQy
11
+ MDhhMTZiNmU2YzhjMWUyMGI5YmJjZGRiYjVmZTcyNTgwMGM0YzU=
12
+ data.tar.gz: !binary |-
13
+ NDk1ZTIzZDFhZGM5YzQwOGE1OGE2OWRlYTVmOGJmMDg2YWQwZjdiMzBiY2Mx
14
+ ZTI4NWE5MTBjNTcyOTlhYjU4MjA3MjVhNjA2NjdkMDc1NzgwZGU4M2FmMzI0
15
+ ZDIyZDNkMDFhMmQzMWM0ODYxM2E3YWYxYzYyYjZkMzQxNmRjNjI=
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1
4
+ - 2.0
5
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in author.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Terry Schmidt
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,69 @@
1
+ # Author
2
+
3
+ [![Build Status](https://travis-ci.org/tschmidt/author.svg?branch=master)](https://travis-ci.org/tschmidt/author)
4
+
5
+ **ATTN:** This is still **very** alpha. Not everything is working. Use at your own risk.
6
+
7
+ A simple tool to help you write your next ebook.
8
+
9
+ I had a major itch and this is what I used to scratch it. I wanted to write an ebook, but
10
+ just could not find a toolset that had everything I wanted. Leanpub was too limited on the
11
+ styling of the book. Kitabu drove me nuts with the hoops I had to jump through with
12
+ nokogiri. Wordsmith didn't do it for me either.
13
+
14
+ What was I looking for?
15
+
16
+ - Simple way to write my chapters in Markdown
17
+ - Generate PDFs and ePubs that were pretty to look at
18
+ - Have better looking codeblocks
19
+ - Not have to do a ton of configuration!!!!
20
+
21
+ Thus, Author was born.
22
+
23
+ ## Installation
24
+
25
+ Add this line to your application's Gemfile:
26
+
27
+ gem 'author'
28
+
29
+ And then execute:
30
+
31
+ $ bundle
32
+
33
+ Or install it yourself with:
34
+
35
+ $ gem install author
36
+
37
+ ## Usage
38
+
39
+ $ author new mybook
40
+ $ cd mybook
41
+
42
+ Add your chapters to the `chapters/` folder. Name them whatever you want. Then, in the
43
+ `outline.txt` file, simply list the chapters in the order you want them to appear in the
44
+ finished book:
45
+
46
+ preface.md
47
+ about-the-author.md
48
+ who-is-this-for.md
49
+ chapter-1.md
50
+
51
+ Once you've done that, just run one of the following commands:
52
+
53
+ author build xhtml # Generates the finalized XHTML site used for the other commands
54
+ author build pdf # Generates a PDF of your book
55
+ author build epub # Generates a fixed layout ePub that your eyeballs will love
56
+ author build all # Builds everything in one go
57
+
58
+ That's it!
59
+
60
+ Okay, there are a few other things you can do, like add a book cover image and include
61
+ images in your book. But, for the most part, that is all there is to it.
62
+
63
+ ## Contributing
64
+
65
+ 1. Fork it
66
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
67
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
68
+ 4. Push to the branch (`git push origin my-new-feature`)
69
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new do |task|
5
+ task.libs << 'lib'
6
+ task.pattern = 'test/**/*_test.rb'
7
+ task.verbose = false
8
+ end
9
+
10
+ task :default => [:test]
data/author.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'author/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "author"
8
+ spec.version = Author::VERSION
9
+ spec.authors = ["Terry Schmidt"]
10
+ spec.email = ["terry.m.schmidt@gmail.com"]
11
+ spec.summary = %q{Quickly create ebooks using Markdown}
12
+ spec.description = spec.summary
13
+ spec.homepage = "http://github.com/tschmidt/aughor"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "minitest"
24
+ spec.add_development_dependency "minitest-spec-expect"
25
+
26
+ spec.add_dependency "thor"
27
+ spec.add_dependency "liquid"
28
+ spec.add_dependency "coderay"
29
+ end
data/bin/author ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- mode: ruby -*-
3
+ path = File.join(File.dirname(__FILE__), '..', 'lib')
4
+
5
+ $:.unshift path
6
+
7
+ require 'author'
8
+ Author::Commands::Cli.start
@@ -0,0 +1,27 @@
1
+ require 'thor'
2
+
3
+ module Author
4
+ module Commands
5
+ class Check < Thor::Group
6
+
7
+ def check_for_prince
8
+ check_for "Prince"
9
+ end
10
+
11
+ def check_for_kindlegen
12
+ check_for "KindleGen"
13
+ end
14
+
15
+ private
16
+
17
+ def check_for(dependency)
18
+ command = dependency.downcase
19
+ installed = (`which #{command}` && $?.success?)
20
+ color = installed ? :green : :red
21
+ say "Checking for #{dependency}"
22
+ say "#{dependency} is#{' not' unless installed} installed\n\n", color
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,18 @@
1
+ require 'thor'
2
+ require_relative 'version'
3
+ require_relative 'check'
4
+ require_relative 'generator'
5
+
6
+ module Author
7
+ module Commands
8
+ class Cli < Thor
9
+
10
+ register Author::Commands::Version, 'version', 'version', 'Display current version'
11
+ map %w[-v --version] => :version
12
+
13
+ register Author::Commands::Check, 'check', 'check', 'Check that all dependencies are installed'
14
+ register Author::Commands::Generator, 'new', 'new <book-name>', 'Create a new book project'
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,44 @@
1
+ require 'thor'
2
+
3
+ module Author
4
+ module Commands
5
+ class Generator < Thor::Group
6
+ include Thor::Actions
7
+
8
+ argument :name
9
+
10
+ def set_destination_root
11
+ self.destination_root = File.join(self.destination_root, name)
12
+ end
13
+
14
+ def create_project_structure
15
+ say "Creating directories for your new book, #{name}"
16
+ empty_directory "chapters"
17
+ empty_directory "export"
18
+ empty_directory "templates"
19
+ end
20
+
21
+ def copy_files
22
+ say "Copying files"
23
+ template 'config.yml', 'config.yml'
24
+ copy_file 'Gemfile', 'Gemfile'
25
+ create_file 'outline.txt'
26
+ template 'sample.md', 'chapters/sample.md'
27
+ end
28
+
29
+ def bundle_gems
30
+ inside destination_root do
31
+ say "Bundling gems"
32
+ run "bundle install", capture: true
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ def self.source_root
39
+ File.join(File.dirname(__FILE__), '..', 'templates')
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,13 @@
1
+ require 'thor'
2
+
3
+ module Author
4
+ module Commands
5
+ class Version < Thor::Group
6
+
7
+ def version
8
+ say "Author version #{Author::VERSION}"
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,140 @@
1
+ # = AwesomeCodeblock
2
+ #
3
+ # This is a CodeRay plugin that allows you to output more awesome codeblocks.
4
+ # It was inspired by the code_ray_block plugin by git@codebykat.
5
+ #
6
+ # == Usage
7
+ #
8
+ # The most basic usage is just calling the code block. This will not do much more than
9
+ # the standard codeblock wrapper.
10
+ #
11
+ # {% awesome_codeblock %}
12
+ # code goes here
13
+ # {% endawesome_codeblock %}
14
+ #
15
+ # You can choose to have a title added to the code block. This is great if you want to
16
+ # display the filename or filepath for the code snippet.
17
+ #
18
+ # {% awesome_codeblock title:"path/to/file.rb" %}
19
+ # code goes here
20
+ # {% endawesome_codeblock %}
21
+ #
22
+ # You can set the language of the code block. The default is `:text` but you can specify
23
+ # any of the code formats that CodeRay supports.
24
+ #
25
+ # {% awesome_codeblock lang:"ruby" %}
26
+ # code goes here
27
+ # {% endawesome_codeblock %}
28
+ #
29
+ # You can choose to add line numbers as well. Refer to the documentation for
30
+ # CodeRay::Encoder::HTML for values that can be passed in.
31
+ #
32
+ # {% awesome_codeblock line_number_format:"inline" %}
33
+ # code goes here
34
+ # {% endawesome_codeblock %}
35
+ #
36
+ # You can choose to highlight specific lines within your code block as well. Just supply
37
+ # a comma separated list of line numbers.
38
+ #
39
+ # {% awesome_codeblock lines_to_highlight:"2,3,4,7" %}
40
+ # code goes here
41
+ # ...
42
+ # {% endawesome_codeblock %}
43
+ #
44
+ # Author: Terry Schmidt
45
+ # Date: 21 May 2014
46
+ # License: [WTFPL](http://www.wtfpl.net/about/)
47
+ #
48
+ require 'liquid'
49
+ require 'coderay'
50
+
51
+ module Author
52
+ module Plugins
53
+ class AwesomeCodeblock < Liquid::Block
54
+
55
+ attr_accessor :title, :language, :markup, :options, :code
56
+
57
+ def initialize(tag_name, markup, tokens)
58
+ @markup = markup
59
+ super
60
+ end
61
+
62
+ def render(context)
63
+ @code = super
64
+ output = ''
65
+ output += header
66
+ output += tableized_code(code)
67
+ output += footer
68
+ output
69
+ end
70
+
71
+ private
72
+
73
+ def header
74
+ %Q[<figure class="#{css_classes.join(' ')}">#{wrapped_title}<div class="CodeRay"><table class="code">]
75
+ end
76
+
77
+ def wrapped_title
78
+ return '' unless title
79
+ %Q[<figcaption class="code-header"><span>#{title}</span></figcaption>]
80
+ end
81
+
82
+ def title
83
+ @title = (markup =~ /\s*title:"([^"]+)"/i) ? $1 : nil
84
+ end
85
+
86
+ def footer
87
+ %q[</table></div></figure>]
88
+ end
89
+
90
+ def tableized_code(code)
91
+ lines = ''
92
+ wrapped_code = ''
93
+ code.strip.split("\n").each_with_index do |line, index|
94
+ index += starting_line_number
95
+ line = "&nbsp;" if line.empty?
96
+ lines += %Q[<div class="line-number#{' highlight' if lines_to_highlight && lines_to_highlight.include?(index)}">#{index}</div>]
97
+ wrapped_code += %Q[<div class="code-part#{' highlight' if lines_to_highlight && lines_to_highlight.include?(index)}">#{line}</div>]
98
+ end
99
+ tr_str do
100
+ ''.tap do |str|
101
+ str << %Q[<td class="gutter">#{lines}</td>] if show_line_numbers?
102
+ str << %Q[<td class="lines-of-code"><pre>#{wrapped_code}</pre></td>]
103
+ str
104
+ end
105
+ end
106
+ end
107
+
108
+ def tr_str
109
+ %Q[<tbody><tr>#{yield}</tr></tbody>]
110
+ end
111
+
112
+ def language
113
+ @language = (markup =~ /\s*lang(?:uage)?:['"]?([^"'\s]+)*['"]?/i) ? $1 : 'text'
114
+ end
115
+
116
+ def css_classes
117
+ ['code', language].compact
118
+ end
119
+
120
+ def show_line_numbers?
121
+ show_line_numbers || lines_to_highlight || starting_line_number > 1
122
+ end
123
+
124
+ def show_line_numbers
125
+ (markup =~ /\s*show_line_numbers:['"]?([^"'\s]+)['"]?/i) ? true : false
126
+ end
127
+
128
+ def lines_to_highlight
129
+ (markup =~ /\s*highlight:['"]?([^"'\s]+)*['"]?/i) ? $1.split(/, ?/).map(&:to_i) : false
130
+ end
131
+
132
+ def starting_line_number
133
+ (markup =~ /\s*start_at:['"]?([^"'\s]+)['"]?/i) ? $1.to_i : 1
134
+ end
135
+
136
+ end
137
+ end
138
+ end
139
+
140
+ Liquid::Template.register_tag('awesome_codeblock', Author::Plugins::AwesomeCodeblock)
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # gem 'author' # Uncomment this once the gem is published.
4
+ gem 'kramdown'
5
+ gem 'coderay'
6
+ gem 'eeepub'
@@ -0,0 +1,4 @@
1
+ ---
2
+ title: <%= name %>
3
+ markdown: kramdown
4
+ highlighter: coderay
@@ -0,0 +1,3 @@
1
+ # <%= name %>
2
+
3
+ Congratulations! You just created a new ebook project. Now all you need to do is write your book.
@@ -0,0 +1,3 @@
1
+ module Author
2
+ VERSION = "1.0.0.alpha"
3
+ end
data/lib/author.rb ADDED
@@ -0,0 +1,22 @@
1
+ $:.unshift File.dirname(__FILE__) # For use/testing when author gem is not installed
2
+
3
+ # Convenience method that will require all files in the given path
4
+ def require_all(path)
5
+ glob = File.join(File.dirname(__FILE__), path, '*.rb')
6
+ Dir[glob].each do |file|
7
+ require file
8
+ end
9
+ end
10
+
11
+ # stdlib
12
+
13
+ # 3rd party
14
+
15
+ # internals
16
+ require 'author/version'
17
+ require_all 'author/commands'
18
+ require_all 'author/plugins'
19
+
20
+ module Author
21
+
22
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../helper'
2
+ require 'author/commands/check'
3
+
4
+ describe Author::Commands::Check do
5
+
6
+ let(:output) { capture { Author::Commands::Check.start } }
7
+
8
+ it "should check to see if Prince XML is installed" do
9
+ expect(output).to_include "Checking for Prince"
10
+ expect(output).to_match /^Prince is( not)? installed/
11
+ end
12
+
13
+ it "should check to see if KindleGen is installed" do
14
+ expect(output).to_include "Checking for KindleGen"
15
+ expect(output).to_match /^KindleGen is( not)? installed/
16
+ end
17
+
18
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../helper'
2
+ require 'author/commands/cli'
3
+
4
+ describe Author::Commands::Cli do
5
+
6
+ let(:output) do
7
+ capture(:stdout) { Author::Commands::Cli.start }
8
+ end
9
+
10
+ it "should respond to version" do
11
+ expect(output).to_include "version"
12
+ end
13
+
14
+ it "should respond to check" do
15
+ expect(output).to_include "check"
16
+ end
17
+
18
+ it "should respond to new" do
19
+ expect(output).to_include "new"
20
+ end
21
+
22
+ end
@@ -0,0 +1,39 @@
1
+ require_relative '../helper'
2
+ require 'author/commands/generator'
3
+
4
+ describe Author::Commands::Generator do
5
+
6
+ it "should require a name" do
7
+ output = capture(:stderr) { Author::Commands::Generator.start }
8
+ expect(output).to_include "No value provided for required arguments 'name'"
9
+ end
10
+
11
+ it "should create project structure" do
12
+ play_in_sandbox do
13
+ capture(:stdout) { Author::Commands::Generator.start ['abook'] }
14
+
15
+ 'abook'.must_be_a_directory
16
+ 'abook/chapters'.must_be_a_directory
17
+ 'abook/export'.must_be_a_directory
18
+ end
19
+ end
20
+
21
+ it "should create project files" do
22
+ play_in_sandbox do
23
+ capture { Author::Commands::Generator.start ['ihazfiles']}
24
+
25
+ 'ihazfiles/config.yml'.must_be_a_file
26
+ 'ihazfiles/Gemfile'.must_be_a_file
27
+ 'ihazfiles/outline.txt'.must_be_a_file
28
+ 'ihazfiles/chapters/sample.md'.must_be_a_file
29
+ end
30
+ end
31
+
32
+ it "should run bundler for the new project" do
33
+ play_in_sandbox do
34
+ output = capture(:stdout) { Author::Commands::Generator.start ['bundled'] }
35
+ expect(output).to_include "Bundling gems"
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,11 @@
1
+ require_relative '../helper.rb'
2
+ require 'author/commands/version'
3
+
4
+ describe Author::Commands::Version do
5
+
6
+ it "should return Author version" do
7
+ output = capture(:stdout) { Author::Commands::Version.start }
8
+ expect(output.chomp).to_equal "Author version #{Author::VERSION}"
9
+ end
10
+
11
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,62 @@
1
+ require 'minitest'
2
+ require 'minitest/autorun'
3
+ require 'minitest/spec/expect'
4
+ require 'minitest/pride'
5
+ require_relative 'utils/assertions'
6
+
7
+ module AuthorHelpers
8
+ include FileUtils
9
+
10
+ def capture(stream = :stdout)
11
+ begin
12
+ strm = stream.to_s
13
+ eval "$#{strm} = StringIO.new"
14
+ yield
15
+ result = eval("$#{strm}").string
16
+ ensure
17
+ eval("$#{strm} = #{strm.upcase}")
18
+ end
19
+ result
20
+ end
21
+
22
+ def sandbox_path
23
+ File.join(File.dirname(__FILE__), 'sandbox')
24
+ end
25
+
26
+ def play_in_sandbox
27
+ ensure_sandbox_is_clean
28
+ cd(sandbox_path) do
29
+ yield
30
+ end
31
+ empty_sandbox
32
+ end
33
+
34
+ def ensure_sandbox_is_clean
35
+ rm_rf(sandbox_path)
36
+ mkdir_p(sandbox_path)
37
+ end
38
+
39
+ def empty_sandbox
40
+ rm_rf(sandbox_path)
41
+ end
42
+
43
+ def liquid_templates_path
44
+ File.join(File.dirname(__FILE__), 'liquids')
45
+ end
46
+
47
+ def using_liquid_templates
48
+ cd(liquid_templates_path) do
49
+ yield
50
+ end
51
+ end
52
+
53
+ end
54
+ MiniTest::Test.send :include, AuthorHelpers
55
+
56
+ module MiniTest
57
+ class Spec
58
+ class << self
59
+ alias_method :context, :describe
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ {% awesome_codeblock highlight:"1" %}
2
+ puts "I'm awesome!"
3
+ {% endawesome_codeblock %}
@@ -0,0 +1,3 @@
1
+ {% awesome_codeblock lang:ruby %}
2
+ puts "I'm awesome!"
3
+ {% endawesome_codeblock %}
@@ -0,0 +1,3 @@
1
+ {% awesome_codeblock %}
2
+ puts "I'm awesome!"
3
+ {% endawesome_codeblock %}
@@ -0,0 +1,3 @@
1
+ {% awesome_codeblock show_line_numbers:true %}
2
+ puts "I'm awesome!"
3
+ {% endawesome_codeblock %}
@@ -0,0 +1,3 @@
1
+ {% awesome_codeblock start_at:15 %}
2
+ puts "I'm awesome!"
3
+ {% endawesome_codeblock %}
@@ -0,0 +1,3 @@
1
+ {% awesome_codeblock title:"index.html" %}
2
+ puts "I'm awesome!"
3
+ {% endawesome_codeblock %}
@@ -0,0 +1,3 @@
1
+ {% awesome_codeblock title:"path/to/file/index.html" %}
2
+ puts "I'm awesome!"
3
+ {% endawesome_codeblock %}
@@ -0,0 +1,3 @@
1
+ {% awesome_codeblock title:"The Title" %}
2
+ puts "I'm awesome!"
3
+ {% endawesome_codeblock %}
@@ -0,0 +1,81 @@
1
+ require_relative '../helper'
2
+ require 'liquid'
3
+ require 'author/plugins/awesome_codeblock'
4
+
5
+ describe Author::Plugins::AwesomeCodeblock do
6
+
7
+ let(:liquid) { Liquid::Template }
8
+
9
+ context "no options given" do
10
+ it "should process the block into pretty code" do
11
+ using_liquid_templates do
12
+ rendered = liquid.parse(IO.read('no_options.md')).render
13
+ expect(rendered).to_include %q[puts "I'm awesome!"]
14
+ expect(rendered).to_include %Q[<figure class="code text"><div class="CodeRay"><table class="code">]
15
+ expect(rendered).to_not_include %q[<figcaption class='code-header'><span>]
16
+ expect(rendered).to_not_include %q[<div class="line-number">]
17
+ expect(rendered).to_not_include %q[<div class="line-number highlight">]
18
+ end
19
+ end
20
+ end
21
+
22
+ context "with title set" do
23
+ it "should set the title when string" do
24
+ using_liquid_templates do
25
+ rendered = liquid.parse(IO.read('title_as_string.md')).render
26
+ expect(rendered).to_include %q[<figcaption class="code-header"><span>The Title</span></figcaption]
27
+ end
28
+ end
29
+
30
+ it "should set the title when file name" do
31
+ using_liquid_templates do
32
+ rendered = liquid.parse(IO.read('title_as_filename.md')).render
33
+ expect(rendered).to_include %q[<figcaption class="code-header"><span>index.html</span></figcaption>]
34
+ end
35
+ end
36
+
37
+ it "should set the title when file path" do
38
+ using_liquid_templates do
39
+ rendered = liquid.parse(IO.read('title_as_filepath.md')).render
40
+ expect(rendered).to_include %q[<figcaption class="code-header"><span>path/to/file/index.html</span></figcaption>]
41
+ end
42
+ end
43
+ end
44
+
45
+ context "with language set" do
46
+ it "should set the language" do
47
+ using_liquid_templates do
48
+ rendered = liquid.parse(IO.read('language_set.md')).render
49
+ expect(rendered).to_include %Q[<figure class="code ruby">]
50
+ end
51
+ end
52
+ end
53
+
54
+ context "with show line numbers set" do
55
+ it "should include line numbers" do
56
+ using_liquid_templates do
57
+ rendered = liquid.parse(IO.read('show_line_numbers.md')).render
58
+ expect(rendered).to_include %q[<td class="gutter"><div class="line-number">1</div></td>]
59
+ end
60
+ end
61
+ end
62
+
63
+ context "with lines set to be highlighted" do
64
+ it "should highlight the line" do
65
+ using_liquid_templates do
66
+ rendered = liquid.parse(IO.read('highlight_lines.md')).render
67
+ expect(rendered).to_include %q[<td class="gutter"><div class="line-number highlight">1</div></td>]
68
+ end
69
+ end
70
+ end
71
+
72
+ context "with starting line number set" do
73
+ it "should start the line count at the number given" do
74
+ using_liquid_templates do
75
+ rendered = liquid.parse(IO.read('starting_line_number.md')).render
76
+ expect(rendered).to_include %q[<td class="gutter"><div class="line-number">15</div></td>]
77
+ end
78
+ end
79
+ end
80
+
81
+ end
@@ -0,0 +1,14 @@
1
+ module MiniTest::Assertions
2
+ def assert_directory_exists(*args)
3
+ dirname = args.compact.first
4
+ assert Dir.exist?(dirname), "Expected '#{File.expand_path dirname}/' to exist but it does not"
5
+ end
6
+
7
+ def assert_file_exists(*args)
8
+ filename = args.compact.first
9
+ assert File.file?(filename), "Expected '#{File.expand_path filename}' to exist but it does not"
10
+ end
11
+ end
12
+
13
+ String.infect_an_assertion :assert_directory_exists, :must_be_a_directory
14
+ String.infect_an_assertion :assert_file_exists, :must_be_a_file
metadata ADDED
@@ -0,0 +1,191 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: author
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.alpha
5
+ platform: ruby
6
+ authors:
7
+ - Terry Schmidt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest-spec-expect
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: liquid
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: coderay
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Quickly create ebooks using Markdown
112
+ email:
113
+ - terry.m.schmidt@gmail.com
114
+ executables:
115
+ - author
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - .gitignore
120
+ - .travis.yml
121
+ - Gemfile
122
+ - LICENSE.txt
123
+ - README.md
124
+ - Rakefile
125
+ - author.gemspec
126
+ - bin/author
127
+ - lib/author.rb
128
+ - lib/author/commands/check.rb
129
+ - lib/author/commands/cli.rb
130
+ - lib/author/commands/generator.rb
131
+ - lib/author/commands/version.rb
132
+ - lib/author/plugins/awesome_codeblock.rb
133
+ - lib/author/templates/Gemfile
134
+ - lib/author/templates/config.yml
135
+ - lib/author/templates/sample.md
136
+ - lib/author/version.rb
137
+ - test/commands/check_test.rb
138
+ - test/commands/cli_test.rb
139
+ - test/commands/generator_test.rb
140
+ - test/commands/version_test.rb
141
+ - test/helper.rb
142
+ - test/liquids/highlight_lines.md
143
+ - test/liquids/language_set.md
144
+ - test/liquids/no_options.md
145
+ - test/liquids/show_line_numbers.md
146
+ - test/liquids/starting_line_number.md
147
+ - test/liquids/title_as_filename.md
148
+ - test/liquids/title_as_filepath.md
149
+ - test/liquids/title_as_string.md
150
+ - test/plugins/awesome_codeblock_test.rb
151
+ - test/utils/assertions.rb
152
+ homepage: http://github.com/tschmidt/aughor
153
+ licenses:
154
+ - MIT
155
+ metadata: {}
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ! '>'
168
+ - !ruby/object:Gem::Version
169
+ version: 1.3.1
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 2.2.2
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: Quickly create ebooks using Markdown
176
+ test_files:
177
+ - test/commands/check_test.rb
178
+ - test/commands/cli_test.rb
179
+ - test/commands/generator_test.rb
180
+ - test/commands/version_test.rb
181
+ - test/helper.rb
182
+ - test/liquids/highlight_lines.md
183
+ - test/liquids/language_set.md
184
+ - test/liquids/no_options.md
185
+ - test/liquids/show_line_numbers.md
186
+ - test/liquids/starting_line_number.md
187
+ - test/liquids/title_as_filename.md
188
+ - test/liquids/title_as_filepath.md
189
+ - test/liquids/title_as_string.md
190
+ - test/plugins/awesome_codeblock_test.rb
191
+ - test/utils/assertions.rb