bookfile 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/bookfile/book/book.rb +52 -17
- data/lib/bookfile/book/config.rb +5 -0
- data/lib/bookfile/helpers/markdown.rb +4 -11
- data/lib/bookfile/version.rb +1 -1
- data/test/bookfile/beer.rb +11 -8
- data/test/bookfile/world.rb +12 -3
- data/test/test_world.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74b333b35376fce6fd4afde31fae74dab34ba163
|
4
|
+
data.tar.gz: 61c75af3c41c19bf6e722e061512fe19082548f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c221e53441b7f2ea5ef14ceb20fa9b967767f37dca002616c7da188ea4fb1b08a46e6e667fcde76619e032d5103a98b3d66edbc91e8e690dc3f4e900d58ed682
|
7
|
+
data.tar.gz: f2d98a2a3927abd4f265075473b3041259a75d772b9c43536dc330c03a0fac002e0ea4a1eccfe8e653ddfc24bffdf2171c91d25f855e79c09c05c087edebf3e4
|
data/lib/bookfile/book/book.rb
CHANGED
@@ -16,21 +16,30 @@ class PageCtx ## page context for evaluate
|
|
16
16
|
|
17
17
|
include HybookHelper
|
18
18
|
|
19
|
+
attr_reader :content
|
20
|
+
|
19
21
|
def initialize( config ) ## BookConfig
|
20
|
-
|
21
|
-
##
|
22
|
-
|
23
|
-
##
|
24
|
-
|
22
|
+
@config = config
|
23
|
+
@content = '' ## rename to body,text,buf,out - why, why not???
|
24
|
+
|
25
|
+
## track rendering (stack) level - only output if in top-level (1)
|
26
|
+
## -- check/todo - is there a better way???
|
27
|
+
## use a (separate) partial method or keep using on render method etc. ???
|
28
|
+
## any other ways??
|
29
|
+
@level = 0
|
25
30
|
end
|
26
31
|
|
32
|
+
|
27
33
|
def write( text )
|
28
34
|
puts "*** write:"
|
29
|
-
puts " #{text}"
|
35
|
+
## puts " #{text}"
|
36
|
+
|
37
|
+
@content << text
|
30
38
|
end
|
31
39
|
|
32
40
|
def render( name, opts={}, locals={} ) ## possible? - make opts required ??
|
33
|
-
|
41
|
+
@level +=1
|
42
|
+
puts "*** render(#{@level}) #{name}:"
|
34
43
|
|
35
44
|
tmpl = File.read_utf8( "#{@config.templates_dir}/#{name}.md" ) ## name e.g. includes/_city
|
36
45
|
|
@@ -42,7 +51,15 @@ class PageCtx ## page context for evaluate
|
|
42
51
|
|
43
52
|
text = TextUtils::PageTemplate.new( tmpl ).render( binding )
|
44
53
|
|
45
|
-
|
54
|
+
## note: only add text to content if top-level render call
|
55
|
+
## (do NOT add for partials/includes/etc.)
|
56
|
+
if @level == 1
|
57
|
+
@content << text
|
58
|
+
end
|
59
|
+
|
60
|
+
@level -=1
|
61
|
+
|
62
|
+
## puts " #{text}"
|
46
63
|
text
|
47
64
|
end
|
48
65
|
|
@@ -68,17 +85,25 @@ end # class PageCtx
|
|
68
85
|
|
69
86
|
class BookCtx
|
70
87
|
|
71
|
-
def initialize( config )
|
72
|
-
@config
|
88
|
+
def initialize( config, book_opts={} )
|
89
|
+
@config = config
|
90
|
+
## todo: add opts to config ???
|
91
|
+
## e.g. title, layout, inline ??? - why? why not??
|
92
|
+
@builder = BookBuilder.new( config.pages_dir, book_opts )
|
73
93
|
end
|
74
94
|
|
75
|
-
|
76
|
-
|
77
|
-
|
95
|
+
## change name to path - why, why not??
|
96
|
+
def page( name, page_opts={} ) ## &block
|
97
|
+
puts "[BookCtx#page] #{name} opts:#{page_opts.inspect}"
|
98
|
+
|
78
99
|
puts "[BookCtx#page] before yield"
|
79
|
-
ctx = PageCtx.new( @config ) ## pass along
|
100
|
+
ctx = PageCtx.new( @config ) ## pass along self (bookctx) as parent
|
80
101
|
yield( ctx ) ## same as - ctx.instance_eval( &block )
|
81
102
|
puts "[BookCtx#page] after yield"
|
103
|
+
|
104
|
+
@builder.page( name, page_opts ) do |page|
|
105
|
+
page.write ctx.content
|
106
|
+
end
|
82
107
|
end
|
83
108
|
|
84
109
|
end # class BootCtx
|
@@ -92,9 +117,19 @@ class BookDef
|
|
92
117
|
end
|
93
118
|
|
94
119
|
def build( unzip_dir )
|
95
|
-
|
96
|
-
|
97
|
-
|
120
|
+
defaults = { templates_dir: "#{unzip_dir}/_templates",
|
121
|
+
pages_dir: "#{unzip_dir}/_pages" }
|
122
|
+
|
123
|
+
## note:
|
124
|
+
## (auto)build two versions:
|
125
|
+
## 1) multi-page version - for (easy) browsing
|
126
|
+
## 2) all-in-one-page version - for (easy)pdf conversion
|
127
|
+
|
128
|
+
multi_page_ctx = BookCtx.new( BookConfig.new( defaults ))
|
129
|
+
@proc.call( multi_page_ctx ) ## same as - ctx.instance_eval( &@codeblock ) -- use instance_eval - why, why not??
|
130
|
+
|
131
|
+
one_page_ctx = BookCtx.new( BookConfig.new( defaults ), inline: true )
|
132
|
+
@proc.call( one_page_ctx ) ## same as - ctx.instance_eval( &@codeblock ) -- use instance_eval - why, why not??
|
98
133
|
end
|
99
134
|
end # class BookDef
|
100
135
|
|
data/lib/bookfile/book/config.rb
CHANGED
@@ -19,21 +19,14 @@ end
|
|
19
19
|
def columns_begin( opts={} )
|
20
20
|
# note: will add columns2 or columns3 etc. depending on columns option passed in
|
21
21
|
|
22
|
-
|
22
|
+
## note: default was 2 (columns) for world.db, 300 (px) for beer.db
|
23
|
+
columns = opts[:columns] || 300
|
23
24
|
|
24
|
-
|
25
|
-
buf << "\n"
|
26
|
-
buf << "<div class='columns#{columns}' markdown='1'>\n"
|
27
|
-
buf << "\n"
|
28
|
-
buf
|
25
|
+
"\n<div class='columns#{columns}' markdown='1'>\n\n"
|
29
26
|
end
|
30
27
|
|
31
28
|
def columns_end
|
32
|
-
|
33
|
-
buf << "\n"
|
34
|
-
buf << "</div>\n"
|
35
|
-
buf << "\n"
|
36
|
-
buf
|
29
|
+
"\n</div>\n\n"
|
37
30
|
end
|
38
31
|
|
39
32
|
### todo: check if we can use columns simply w/ yield for body ??
|
data/lib/bookfile/version.rb
CHANGED
data/test/bookfile/beer.rb
CHANGED
@@ -9,13 +9,16 @@ beer adapter: 'sqlite3', database: './beer.db'
|
|
9
9
|
|
10
10
|
book do |b|
|
11
11
|
|
12
|
-
|
12
|
+
## todo/fix:
|
13
|
+
## find a way to pass along opts - why, why not??
|
14
|
+
opts = {}
|
13
15
|
|
14
|
-
|
16
|
+
### generate what's news in 2015
|
17
|
+
years = [2015,2014,2013,2012,2011,2010]
|
15
18
|
years.each do |year|
|
16
19
|
b.page( "#{year}", title: "What's News in #{year}?",
|
17
20
|
id: "#{year}" ) do |page|
|
18
|
-
page.
|
21
|
+
page.render_whats_news_in_year( year, opts )
|
19
22
|
end
|
20
23
|
end
|
21
24
|
|
@@ -24,21 +27,21 @@ book do |b|
|
|
24
27
|
|
25
28
|
b.page( 'breweries', title: 'Breweries Index',
|
26
29
|
id: 'breweries' ) do |page|
|
27
|
-
page.
|
30
|
+
page.render_breweries_idx( opts )
|
28
31
|
end
|
29
32
|
|
30
33
|
### generate beers index
|
31
34
|
|
32
35
|
b.page( 'beers', title: 'Beers Index',
|
33
36
|
id: 'beers' ) do |page|
|
34
|
-
page.
|
37
|
+
page.render_beers_idx( opts )
|
35
38
|
end
|
36
39
|
|
37
40
|
### generate brands index
|
38
41
|
|
39
42
|
b.page( 'brands', title: 'Brands Index',
|
40
43
|
id: 'brands' ) do |page|
|
41
|
-
page.
|
44
|
+
page.render_brands_idx( opts )
|
42
45
|
end
|
43
46
|
|
44
47
|
|
@@ -46,7 +49,7 @@ book do |b|
|
|
46
49
|
|
47
50
|
b.page( 'index', title: 'Contents',
|
48
51
|
id: 'index' ) do |page|
|
49
|
-
page.
|
52
|
+
page.render_toc( opts )
|
50
53
|
end
|
51
54
|
|
52
55
|
|
@@ -66,7 +69,7 @@ book do |b|
|
|
66
69
|
puts "path=#{path}"
|
67
70
|
b.page( path, title: "#{country.title} (#{country.code})",
|
68
71
|
id: "#{country.key}" ) do |page|
|
69
|
-
page.
|
72
|
+
page.render_country( country, opts )
|
70
73
|
end
|
71
74
|
|
72
75
|
## todo - add b.divider() - for inline version - why, why not ????
|
data/test/bookfile/world.rb
CHANGED
@@ -30,11 +30,20 @@ end
|
|
30
30
|
=end
|
31
31
|
|
32
32
|
|
33
|
+
#################
|
34
|
+
# self.class.name (in top level): Bookfile::Builder
|
35
|
+
# self.class.name (in book block): Bookfile::Builder
|
36
|
+
# self.class.name (in page block): Bookfile::Builder
|
37
|
+
|
33
38
|
puts "self.class.name (in top level): #{self.class.name}"
|
34
39
|
|
35
40
|
|
36
41
|
book do |b|
|
37
|
-
|
42
|
+
|
43
|
+
## todo/fix:
|
44
|
+
## find a way to pass along opts - why, why not??
|
45
|
+
opts = {}
|
46
|
+
|
38
47
|
puts "before first page"
|
39
48
|
puts "self.class.name (in book block): #{self.class.name}"
|
40
49
|
|
@@ -45,7 +54,7 @@ book do |b|
|
|
45
54
|
page.write "render_toc() 2x"
|
46
55
|
page.write "render_toc() 3x"
|
47
56
|
|
48
|
-
page.render_toc(
|
57
|
+
page.render_toc( opts )
|
49
58
|
## render :toc -- auto includes opts???
|
50
59
|
|
51
60
|
puts "self.class.name (in page block): #{self.class.name}"
|
@@ -69,7 +78,7 @@ book do |b|
|
|
69
78
|
b.page path, title: "#{country.name} (#{country.code})",
|
70
79
|
id: country.key do |page|
|
71
80
|
page.write "render_country(#{country.name})" ## render_country( country ) ## render_country( country, opts )
|
72
|
-
page.render_country( country,
|
81
|
+
page.render_country( country, opts ) ### fix: auto-include opts in render - how??
|
73
82
|
end
|
74
83
|
end
|
75
84
|
end
|
data/test/test_world.rb
CHANGED
@@ -14,8 +14,8 @@ class TestWorld < MiniTest::Test
|
|
14
14
|
|
15
15
|
bookfile = Bookfile::Bookfile.load_file( './test/bookfile/world.rb' )
|
16
16
|
|
17
|
-
|
18
|
-
bookfile.unzip( book_templates_unzip_dir )
|
17
|
+
## bookfile.download # download book packages (templates n scripts)
|
18
|
+
## bookfile.unzip( book_templates_unzip_dir )
|
19
19
|
|
20
20
|
bookfile.prepare( book_templates_unzip_dir )
|
21
21
|
bookfile.connect
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bookfile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: props
|