fun_with_templates 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.document +5 -0
- data/CHANGELOG.markdown +6 -0
- data/Gemfile +18 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +67 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/lib/fun_with/core_extensions/kernel.rb +18 -0
- data/lib/fun_with/templates/directory_builder.rb +36 -0
- data/lib/fun_with/templates/filename_var_data.rb +42 -0
- data/lib/fun_with/templates/template_evaluator.rb +307 -0
- data/lib/fun_with_templates.rb +4 -0
- data/test/helper.rb +57 -0
- data/test/templates/00/a.rb.template +7 -0
- data/test/templates/00/dir/subdir/style.css +4 -0
- data/test/templates/00/seqfiles/page%0000i%.html.template +12 -0
- data/test/templates/00/seqfiles/page%j%.html.template +12 -0
- data/test/templates/00/seqfiles/page_about_%critter_name%.html.template +15 -0
- data/test/templates/01/%string.length%/%string%-%string.length%.nontemplate +1 -0
- data/test/templates/01/%string.length%/%string%-%string.length%.txt.template +1 -0
- data/test/templates/02/%class%.rb.template +6 -0
- data/test/templates/03/coordinates.%i%-%j%-%k%.html.template +14 -0
- data/test/templates/03/dir%0000i%/dir%0000j%/file%0000k%.py.template +1 -0
- data/test/templates/03/index.html.template +22 -0
- data/test/templates/epf/book/afterword.markdown +4 -0
- data/test/templates/epf/book/chapter-%0000chapter%.markdown.template +4 -0
- data/test/templates/epf/book/cover.xhtml.template +13 -0
- data/test/templates/epf/book/foreword.markdown +6 -0
- data/test/templates/epf/book/images/cover.png +0 -0
- data/test/templates/epf/book/stylesheets/stylesheet.css +2 -0
- data/test/templates/epf/book/title_page.markdown.template +5 -0
- data/test/templates/epf/notes/character.%character.name_for_file%.markdown.template +15 -0
- data/test/templates/epf/notes/images/cover.png +0 -0
- data/test/templates/epf/notes/stylesheets/stylesheet.css +2 -0
- data/test/templates/epf/settings/actions/local_action.rb.example +14 -0
- data/test/templates/epf/settings/config.rb.template +52 -0
- data/test/templates/epf/settings/htmlizers.rb +83 -0
- data/test/templates/epf/settings/wordcount.template +6 -0
- data/test/test_directory_builder.rb +24 -0
- data/test/test_filename_var_data.rb +51 -0
- data/test/test_fun_with_templates.rb +21 -0
- data/test/test_parse_filename_vars.rb +25 -0
- data/test/test_string_templates.rb +14 -0
- data/test/test_write_example_templates.rb +149 -0
- metadata +202 -0
data/test/helper.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
require 'debugger'
|
4
|
+
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'shoulda'
|
14
|
+
require 'fun_with_templates'
|
15
|
+
require 'fun_with_testing'
|
16
|
+
|
17
|
+
class FunWith::Templates::TestCase < FunWith::Testing::TestCase
|
18
|
+
gem_to_test( FunWith::Templates )
|
19
|
+
|
20
|
+
FunWith::Templates.gem_test_mode = true
|
21
|
+
FunWith::Templates.gem_verbose = false
|
22
|
+
|
23
|
+
# include FunWith::Templates
|
24
|
+
include FunWith::Testing::Assertions::Basics
|
25
|
+
include FunWith::Testing::Assertions::FunWithFiles
|
26
|
+
|
27
|
+
def epf_template_vars( overrides = {} )
|
28
|
+
vars = {
|
29
|
+
:book => {
|
30
|
+
:title => "The Dawning of the Elluini",
|
31
|
+
:author => "Manchester Von Spittleman",
|
32
|
+
:license => "Creative Commons",
|
33
|
+
:publisher => "PUBLISHER NAME",
|
34
|
+
:original_publication => "2014-01-01"
|
35
|
+
},
|
36
|
+
|
37
|
+
:character => {
|
38
|
+
:name => "Wilford Brimley",
|
39
|
+
:name_for_file => "wilford_brimley",
|
40
|
+
:age => "Older than time itself",
|
41
|
+
:summary => "The Faceless Old Man Who Secretly Lives In Your Home",
|
42
|
+
:description => "Gentle, wizened, concerned about your bowel movements."
|
43
|
+
},
|
44
|
+
|
45
|
+
:chapter => (1..20),
|
46
|
+
|
47
|
+
:git => {
|
48
|
+
:repo => "/home/barry/git/the_dawning_of_the_elluini.epubforge.git",
|
49
|
+
:remote_host => "m.slashdot.org",
|
50
|
+
:remote_user => "barry",
|
51
|
+
:repo_id => "36ce67680bbf6fc4d64741cbc3980fa5"
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
vars.merge( overrides )
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
5
|
+
<head>
|
6
|
+
<title>This is page <%= @i %></title>
|
7
|
+
</head>
|
8
|
+
|
9
|
+
<body>
|
10
|
+
<h1>Page <%= @i %></h1>
|
11
|
+
</body>
|
12
|
+
</html>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
5
|
+
<head>
|
6
|
+
<title>This is page <%= @j %></title>
|
7
|
+
</head>
|
8
|
+
|
9
|
+
<body>
|
10
|
+
<h1>Page <%= @j %></h1>
|
11
|
+
</body>
|
12
|
+
</html>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
5
|
+
<head>
|
6
|
+
<title>Behold the mighty <%= @critter_name %>!</title>
|
7
|
+
</head>
|
8
|
+
|
9
|
+
<body>
|
10
|
+
<h1>This page is about the <%= @critter_name %></h1>
|
11
|
+
|
12
|
+
<% critter = @critters[@critter_name] %>
|
13
|
+
<p>The <%= @critter_name %> is <%= critter[:attributes][0] %> and <%= critter[:attributes][1] %></p>
|
14
|
+
</body>
|
15
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
Some strings have some lengths. But who can know for sure?
|
@@ -0,0 +1 @@
|
|
1
|
+
string <%= @string %> has length <%= @string.length %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
5
|
+
<head>
|
6
|
+
<title>This is page for sector (<%= @i %>, <%= @j %>, <%= @k %>)</title>
|
7
|
+
</head>
|
8
|
+
|
9
|
+
<body>
|
10
|
+
<h1>This is page for sector (<%= @i %>, <%= @j %>, <%= @k %>)</h1>
|
11
|
+
|
12
|
+
<p>This sector is full of things.</p>
|
13
|
+
</body>
|
14
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= @i %>-<%= @j %>-<%= @k %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3
|
+
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
5
|
+
<head>
|
6
|
+
<title>Links to all sectors</title>
|
7
|
+
</head>
|
8
|
+
|
9
|
+
<body>
|
10
|
+
<h1>Sectors</h1>
|
11
|
+
|
12
|
+
<ul>
|
13
|
+
<% for i in @i %>
|
14
|
+
<% for j in @j %>
|
15
|
+
<% for k in @k %>
|
16
|
+
<li><a href="coordinates.<%= i %>-<%= j %>-<%= k %>.html">Sector (<%= i %>, <%= j %>, <%= k %>)</a></li>
|
17
|
+
<% end %>
|
18
|
+
<% end %>
|
19
|
+
<% end %>
|
20
|
+
</ul>
|
21
|
+
</body>
|
22
|
+
</html>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
3
|
+
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
4
|
+
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
6
|
+
<head>
|
7
|
+
<title><%= @book[:title] %>, by <%= @book[:author] %></title>
|
8
|
+
</head>
|
9
|
+
|
10
|
+
<body>
|
11
|
+
<p><img class="cover" alt="<%= @book[:title] %>, by <%= @book[:author] %>" src="<%= @book[:cover].nil? ? "../Images/cover.jpg" : @book[:cover].path %>" /></p>
|
12
|
+
</body>
|
13
|
+
</html>
|
Binary file
|
Binary file
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module EpubForge
|
2
|
+
module Action
|
3
|
+
class <%= @class_name %> < ThorAction
|
4
|
+
|
5
|
+
<% for action in @actions %>
|
6
|
+
desc( "<%= @slug %>:<%= action %>", "do action <%= action %>" )
|
7
|
+
def <%= action %>( project, *args )
|
8
|
+
puts "Do action <%= action %> to your project."
|
9
|
+
end
|
10
|
+
|
11
|
+
<% end %>
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Used by epubforge.
|
2
|
+
metadata do
|
3
|
+
name "<%= @book[:title] || "My Book" %>" # The title of the book
|
4
|
+
author "<%= @book[:author] || "Author" %>" # Your moniker. Your Nom de Plume. The thing people say to get your attention.
|
5
|
+
license "<%= @book[:license] || "All Rights Reserved" %>"
|
6
|
+
publisher "<%= @book[:publisher] || 'My Publisher' %>"
|
7
|
+
original_publication "<%= @book[:original_publication] || Time.now.strftime('%Y-%m-%d') %>" # The year this work was first published
|
8
|
+
end
|
9
|
+
|
10
|
+
filename "<%= (@book[:title] || "my_book").epf_underscorize %>" # The default filename for your ebook (no extension).
|
11
|
+
|
12
|
+
<% if @git %>
|
13
|
+
############### GOT GIT? #####################################
|
14
|
+
git do
|
15
|
+
repo_folder "<%= @git[:repo] %>"
|
16
|
+
remote_host "<%= @git[:host] %>"
|
17
|
+
remote_user "<%= @git[:user] %>"
|
18
|
+
repo_id "<%= @git[:repo_id] %>"
|
19
|
+
end
|
20
|
+
############### /GOT GIT? #####################################
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
|
24
|
+
# Any pages not listed here will be added
|
25
|
+
# to the ebook after the listed pages, in alphabetical order of
|
26
|
+
# filename. In this example, the title_page.markdown file goes first,
|
27
|
+
# then the foreword.markdown page, then chapters 1 and 2 (in alphanumeric order)
|
28
|
+
# and finally the afterword. Any pages not matched will be put after the
|
29
|
+
# set of matched pages.
|
30
|
+
|
31
|
+
pages do
|
32
|
+
book [
|
33
|
+
# matches title_page.markdown, title_page.textile, or
|
34
|
+
# title_page.(any other valid extension). This will be the first
|
35
|
+
# scene/chapter/division in the book.
|
36
|
+
"title_page",
|
37
|
+
"foreword",
|
38
|
+
|
39
|
+
# filename matches chapter, followed by anything. If you have a page called
|
40
|
+
# chapter_summary that comes after, you might want to define the matcher more
|
41
|
+
# specifically, for example 'chapter-\d+' (chapter followed by dash followed by any number of numbers).
|
42
|
+
#
|
43
|
+
"chapter-.*",
|
44
|
+
"afterword"
|
45
|
+
]
|
46
|
+
|
47
|
+
notes [
|
48
|
+
# You can set the order that the notes entries appear in below.
|
49
|
+
"example89823786",
|
50
|
+
"example89723987"
|
51
|
+
]
|
52
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Add htmlizer classes here. They will be loaded and used in preference over the default htmlizers
|
2
|
+
# The default htmlizers are given below as examples.
|
3
|
+
#
|
4
|
+
#
|
5
|
+
# # This htmlizer leaves the input file unaltered
|
6
|
+
# EpubForge::Utils::Htmlizer.define do |html|
|
7
|
+
# html.format :xhtml
|
8
|
+
# html.group :default
|
9
|
+
# html.executable "false"
|
10
|
+
# html.cmd "cat {{f}}"
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# # This htmlizer uses the multimarkdown executable.
|
14
|
+
# # cmd explains to the htmlizer how to execute as a
|
15
|
+
# # shell command:
|
16
|
+
# # {{x}} - name of the executable
|
17
|
+
# # {{o}} - then come the options
|
18
|
+
# # {{f}} - then the name of the file
|
19
|
+
# # The output of the executable is captured. The command you
|
20
|
+
# # use should output html-tagged text (<h1>...</h1>, <p>...</p>, etc.),
|
21
|
+
# # but not a complete html page.
|
22
|
+
# EpubForge::Utils::Htmlizer.define do |html|
|
23
|
+
# html.format :markdown
|
24
|
+
# html.group :default # the default is :user, so user-defined ones don't have to set it
|
25
|
+
# html.executable "multimarkdown"
|
26
|
+
# html.cmd "{{x}} {{o}} {{f}}"
|
27
|
+
# # html.opts "" # the default
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# EpubForge::Utils::Htmlizer.define do |html|
|
31
|
+
# html.format :markdown
|
32
|
+
# html.group :default
|
33
|
+
# html.executable "pandoc"
|
34
|
+
# html.cmd "{{x}} {{o}} {{f}}"
|
35
|
+
# html.opts "--from=markdown --to=html"
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# EpubForge::Utils::Htmlizer.define do |html|
|
39
|
+
# html.format :textile
|
40
|
+
# html.group :default
|
41
|
+
# html.executable "pandoc"
|
42
|
+
# html.cmd "{{x}} {{o}} {{f}}"
|
43
|
+
# html.opts "--from=textile --to=html"
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
#
|
47
|
+
# # Emergency backups
|
48
|
+
# EpubForge::Utils::Htmlizer.define do |html|
|
49
|
+
# html.format :markdown
|
50
|
+
# html.group :fallback
|
51
|
+
# html.executable "false"
|
52
|
+
# html.cmd "echo \"<pre>\" && cat {{f}} && echo \"</pre>\""
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
# EpubForge::Utils::Htmlizer.define do |html|
|
56
|
+
# html.format :textile
|
57
|
+
# html.group :fallback
|
58
|
+
# html.executable "false"
|
59
|
+
# html.cmd "echo \"<pre>\" && cat {{f}} && echo \"</pre>\""
|
60
|
+
# end
|
61
|
+
#
|
62
|
+
# EpubForge::Utils::Htmlizer.define do |html|
|
63
|
+
# html.format :txt
|
64
|
+
# html.group :fallback
|
65
|
+
# html.executable "false"
|
66
|
+
# html.cmd "echo \"<pre>\" && cat {{f}} && echo \"</pre>\""
|
67
|
+
# end
|
68
|
+
#
|
69
|
+
# # Would be nice to detect and strip out the outer tags
|
70
|
+
# # leaving only the content.
|
71
|
+
# EpubForge::Utils::Htmlizer.define do |html|
|
72
|
+
# html.format :html
|
73
|
+
# html.group :fallback
|
74
|
+
# html.executable "false"
|
75
|
+
# html.cmd "cat {{f}}"
|
76
|
+
# end
|
77
|
+
#
|
78
|
+
# EpubForge::Utils::Htmlizer.define do |html|
|
79
|
+
# html.format :unknown
|
80
|
+
# html.group :fallback
|
81
|
+
# html.executable "false"
|
82
|
+
# html.cmd "echo \"<pre>\" && cat {{f}} && echo \"</pre>\""
|
83
|
+
# end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# require 'helper'
|
2
|
+
|
3
|
+
# pulling this feature. May not be worth implementing.
|
4
|
+
# class TestDirectoryBuilder < FunWith::Templates::TestCase
|
5
|
+
# context "testing template() function which FWT adds to FunWith::Files::DirectoryBuilder" do
|
6
|
+
# setup do
|
7
|
+
# @templates_dir = FunWith::Templates.root("test", "templates")
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# should "successfully print off a template" do
|
11
|
+
# FunWith::Files::DirectoryBuilder.tmpdir do |b|
|
12
|
+
# b.template( @templates_dir.join("00", "a.rb.template") ) do |coll|
|
13
|
+
# coll.var(:module, "Cats")
|
14
|
+
# coll.var(:class, "Kitten")
|
15
|
+
# coll.var(:args, %w(lick paws?))
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
#
|
19
|
+
#
|
20
|
+
# raise "WORK ON THIS!!!!"
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
# end
|