bookfile 0.1.0 → 0.1.1
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 +4 -4
- data/Manifest.txt +2 -0
- data/lib/bookfile.rb +4 -0
- data/lib/bookfile/bookfile.rb +19 -1
- data/lib/bookfile/builder.rb +12 -3
- data/lib/bookfile/database/database.rb +57 -21
- data/lib/bookfile/version.rb +1 -1
- data/test/bookfile/beer.rb +120 -0
- data/test/bookfile/world.rb +10 -10
- data/test/test_beer.rb +29 -0
- data/test/test_world.rb +3 -4
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4311caaae87c30b6ac285adb85a3495ddd177eaa
|
4
|
+
data.tar.gz: 4645efcb233160f0078bcc2d8919cda290d3c981
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c575efd458e00c39081e84ea811300de44736b5f79e7a44599438ceac6323f597fe10fbbdd468f06592244cdfe757eab6fb48e45b96be909d58388a02c55969c
|
7
|
+
data.tar.gz: b1df8f6c2766d0db1b51363c89ee8df6708d077fa28559a6f9eef674f18a781dfec4cd806dc8669500e9c68a04a251877f6718e4790fd354a8eaef82396a9438
|
data/Manifest.txt
CHANGED
@@ -12,7 +12,9 @@ lib/bookfile/helpers/markdown.rb
|
|
12
12
|
lib/bookfile/helpers/misc.rb
|
13
13
|
lib/bookfile/package/package.rb
|
14
14
|
lib/bookfile/version.rb
|
15
|
+
test/bookfile/beer.rb
|
15
16
|
test/bookfile/world.rb
|
16
17
|
test/helper.rb
|
18
|
+
test/test_beer.rb
|
17
19
|
test/test_world.rb
|
18
20
|
test/test_world_templates.rb
|
data/lib/bookfile.rb
CHANGED
@@ -9,6 +9,10 @@ require 'ostruct'
|
|
9
9
|
##############
|
10
10
|
# 3rd party gems
|
11
11
|
|
12
|
+
require 'logutils' # uses Logging etc.
|
13
|
+
require 'textutils' # uses File.read_utf8
|
14
|
+
|
15
|
+
|
12
16
|
require 'fetcher'
|
13
17
|
require 'zip' # use $ gem install rubyzip
|
14
18
|
require 'hybook' # todo/fix: check if hybook required/needed for now??
|
data/lib/bookfile/bookfile.rb
CHANGED
@@ -4,7 +4,25 @@ module Bookfile
|
|
4
4
|
|
5
5
|
class Bookfile
|
6
6
|
|
7
|
-
|
7
|
+
include LogUtils::Logging
|
8
|
+
|
9
|
+
## convenience method - use like Bookfile.load_file()
|
10
|
+
def self.load_file( path='./Bookfile' )
|
11
|
+
# Note: return datafile (of course, NOT the builder)
|
12
|
+
# if you want a builder use Bookfile::Builder ;-)
|
13
|
+
builder = Builder.load_file( path )
|
14
|
+
builder.bookfile
|
15
|
+
end
|
16
|
+
|
17
|
+
## another convenience method - use like Bookfile.load()
|
18
|
+
def self.load( code )
|
19
|
+
# Note: return datafile (of course, NOT the builder)
|
20
|
+
# if you want a builder use Bookfile::Builder ;-)
|
21
|
+
builder = Builder.load( code )
|
22
|
+
builder.bookfile
|
23
|
+
end
|
24
|
+
|
25
|
+
|
8
26
|
|
9
27
|
attr_reader :packages
|
10
28
|
attr_reader :databases
|
data/lib/bookfile/builder.rb
CHANGED
@@ -5,10 +5,10 @@ module Bookfile
|
|
5
5
|
|
6
6
|
class Builder
|
7
7
|
|
8
|
-
|
8
|
+
include LogUtils::Logging
|
9
9
|
|
10
10
|
def self.load_file( path )
|
11
|
-
code = File.
|
11
|
+
code = File.read_utf8( path )
|
12
12
|
self.load( code )
|
13
13
|
end
|
14
14
|
|
@@ -32,11 +32,20 @@ class Builder
|
|
32
32
|
@bookfile.packages << BookPackage.new( name, opts )
|
33
33
|
end
|
34
34
|
|
35
|
+
## database options
|
35
36
|
def world( opts={} )
|
36
37
|
puts "world opts: #{opts.inspect}"
|
37
|
-
@bookfile.databases <<
|
38
|
+
@bookfile.databases << WorldDef.new( opts )
|
38
39
|
end
|
39
40
|
|
41
|
+
def beer( opts={} )
|
42
|
+
puts "beer opts: #{opts.inspect}"
|
43
|
+
## todo: to avoid name class use BeerDef, WorldDef ?? etc.
|
44
|
+
@bookfile.databases << BeerDef.new( opts )
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
|
40
49
|
def book( opts={}, &block )
|
41
50
|
puts "book opts: #{opts.inspect}"
|
42
51
|
@bookfile.books << BookDef.new( opts, block )
|
@@ -7,10 +7,22 @@ class Database
|
|
7
7
|
def initialize( db_config )
|
8
8
|
@db_config = db_config
|
9
9
|
end
|
10
|
+
|
11
|
+
def connect
|
12
|
+
print " connecting..."
|
13
|
+
ActiveRecord::Base.establish_connection( @db_config )
|
14
|
+
puts "OK"
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup ## use connect/prepare - why, why not??
|
18
|
+
prepare # step 1: prepare - require and include models
|
19
|
+
connect # step 2: connect
|
20
|
+
end
|
10
21
|
end
|
11
22
|
|
12
23
|
|
13
|
-
|
24
|
+
|
25
|
+
class WorldDef < Database ## change to WorldDatabase or DatabaseWorld - why, why not???
|
14
26
|
def initialize( db_config ) ## check - if it works by default (no initialze specfied)
|
15
27
|
super
|
16
28
|
end
|
@@ -19,35 +31,59 @@ class World < Database ## change to WorldDatabase or DatabaseWorld - why, why
|
|
19
31
|
puts "setup world: #{@db_config.inspect}"
|
20
32
|
|
21
33
|
res = require 'worlddb/models'
|
22
|
-
if res
|
23
|
-
puts " include WorldDb::Models"
|
24
|
-
|
25
|
-
### check/fix: include as globals/top-level!!! how? possible???
|
26
|
-
Builder.send :include, WorldDb::Models
|
27
|
-
PageCtx.send :include, WorldDb::Models
|
28
|
-
HybookHelper.send :include, WorldDb::Models ## constants not accesible (include in module too)
|
29
|
-
## BookCtx.send :include, WorldDb::Models -- needed for Book context too?? why, why not??
|
30
34
|
|
31
35
|
## also add to xxxx ???
|
32
36
|
## (possible to include as globals ???? how - Object.send :include ???) or
|
33
37
|
## Module.send :include ??
|
34
|
-
else
|
35
38
|
## find a better check - check for constants defined??? if not define???
|
36
39
|
## or use constant_missing handler???
|
37
|
-
|
40
|
+
|
41
|
+
if res == false
|
42
|
+
puts " todo/fix: WorldDb::Models already included ??"
|
38
43
|
end
|
39
|
-
|
44
|
+
|
45
|
+
puts "include WorldDb::Models"
|
40
46
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
47
|
+
### check/fix: include as globals/top-level!!! how? possible???
|
48
|
+
Builder.send :include, WorldDb::Models
|
49
|
+
PageCtx.send :include, WorldDb::Models
|
50
|
+
HybookHelper.send :include, WorldDb::Models ## constants not accesible (include in module too)
|
51
|
+
## BookCtx.send :include, WorldDb::Models -- needed for Book context too?? why, why not??
|
52
|
+
end # method prepare
|
53
|
+
end # class WorldDef
|
46
54
|
|
47
|
-
|
48
|
-
|
49
|
-
|
55
|
+
|
56
|
+
class BeerDef < Database ## change to BeerDatabase or DatabaseBeer - why, why not???
|
57
|
+
def initialize( db_config ) ## check - if it works by default (no initialze specfied)
|
58
|
+
super
|
50
59
|
end
|
51
|
-
|
60
|
+
|
61
|
+
def prepare ## change to require - why, why not??
|
62
|
+
puts "setup beer: #{@db_config.inspect}"
|
63
|
+
|
64
|
+
res = require 'beerdb/models'
|
65
|
+
|
66
|
+
## also add to xxxx ???
|
67
|
+
## (possible to include as globals ???? how - Object.send :include ???) or
|
68
|
+
## Module.send :include ??
|
69
|
+
|
70
|
+
if res == false
|
71
|
+
## find a better check - check for constants defined??? if not define???
|
72
|
+
## or use constant_missing handler???
|
73
|
+
puts " todo/fix: BeerDb::Models already included ??"
|
74
|
+
end
|
75
|
+
|
76
|
+
## for now always include
|
77
|
+
puts " include BeerDb::Models"
|
78
|
+
|
79
|
+
### check/fix: include as globals/top-level!!! how? possible???
|
80
|
+
Builder.send :include, BeerDb::Models
|
81
|
+
PageCtx.send :include, BeerDb::Models
|
82
|
+
HybookHelper.send :include, BeerDb::Models ## constants not accesible (include in module too)
|
83
|
+
|
84
|
+
|
85
|
+
end # method prepare
|
86
|
+
end # class BeerDef
|
87
|
+
|
52
88
|
|
53
89
|
end # module Bookfile
|
data/lib/bookfile/version.rb
CHANGED
@@ -0,0 +1,120 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
package 'book-templates/beer'
|
5
|
+
|
6
|
+
|
7
|
+
beer adapter: 'sqlite3', database: './beer.db'
|
8
|
+
|
9
|
+
|
10
|
+
book do |b|
|
11
|
+
|
12
|
+
### generate what's news in 2014
|
13
|
+
|
14
|
+
years = [2014,2013,2012,2011,2010]
|
15
|
+
years.each do |year|
|
16
|
+
b.page( "#{year}", title: "What's News in #{year}?",
|
17
|
+
id: "#{year}" ) do |page|
|
18
|
+
page.write render_whats_news_in_year( year, opts )
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
### generate breweries index
|
24
|
+
|
25
|
+
b.page( 'breweries', title: 'Breweries Index',
|
26
|
+
id: 'breweries' ) do |page|
|
27
|
+
page.write render_breweries_idx( opts )
|
28
|
+
end
|
29
|
+
|
30
|
+
### generate beers index
|
31
|
+
|
32
|
+
b.page( 'beers', title: 'Beers Index',
|
33
|
+
id: 'beers' ) do |page|
|
34
|
+
page.write render_beers_idx( opts )
|
35
|
+
end
|
36
|
+
|
37
|
+
### generate brands index
|
38
|
+
|
39
|
+
b.page( 'brands', title: 'Brands Index',
|
40
|
+
id: 'brands' ) do |page|
|
41
|
+
page.write render_brands_idx( opts )
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
### generate table of contents (toc)
|
46
|
+
|
47
|
+
b.page( 'index', title: 'Contents',
|
48
|
+
id: 'index' ) do |page|
|
49
|
+
page.write render_toc( opts )
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
### generate pages for countries
|
54
|
+
|
55
|
+
country_count=0
|
56
|
+
# Country.where( "key in ('at','mx','hr', 'de', 'be', 'nl', 'cz')" ).each do |country|
|
57
|
+
Country.order(:id).each do |country|
|
58
|
+
beers_count = country.beers.count
|
59
|
+
breweries_count = country.breweries.count
|
60
|
+
next if beers_count == 0 && breweries_count == 0
|
61
|
+
|
62
|
+
country_count += 1
|
63
|
+
puts "build country page #{country.key}..."
|
64
|
+
|
65
|
+
path = country.to_path
|
66
|
+
puts "path=#{path}"
|
67
|
+
b.page( path, title: "#{country.title} (#{country.code})",
|
68
|
+
id: "#{country.key}" ) do |page|
|
69
|
+
page.write render_country( country, opts )
|
70
|
+
end
|
71
|
+
|
72
|
+
## todo - add b.divider() - for inline version - why, why not ????
|
73
|
+
|
74
|
+
## break if country_count == 3 # note: for testing only build three country pages
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
=begin
|
80
|
+
###
|
81
|
+
## todo: move to its own bookfile
|
82
|
+
## - how to pass in country parameter ???
|
83
|
+
|
84
|
+
def build_book_for_country( country_code, opts={} )
|
85
|
+
|
86
|
+
country = Country.find_by_key!( country_code )
|
87
|
+
|
88
|
+
b = BookBuilder.new( PAGES_DIR, opts )
|
89
|
+
|
90
|
+
### generate breweries index
|
91
|
+
|
92
|
+
b.page( "#{country.key}-breweries", title: 'Breweries Index',
|
93
|
+
id: "/#{country.key}-breweries" ) do |page|
|
94
|
+
page.write render_breweries_idx( opts )
|
95
|
+
end
|
96
|
+
|
97
|
+
### generate pages for countries
|
98
|
+
|
99
|
+
puts "build country page #{country.key}..."
|
100
|
+
|
101
|
+
path = country.to_path
|
102
|
+
puts "path=#{path}"
|
103
|
+
b.page( path, title: "#{country.title} (#{country.code})",
|
104
|
+
id: "#{country.key}" ) do |page|
|
105
|
+
page.write render_country( country, opts )
|
106
|
+
end
|
107
|
+
|
108
|
+
b.page( "#{country.key}-mini", title: "#{country.title} (#{country.code}) - Mini",
|
109
|
+
id: "#{country.key}-mini" ) do |page|
|
110
|
+
page.write render_country_mini( country, opts )
|
111
|
+
end
|
112
|
+
|
113
|
+
b.page( "#{country.key}-stats", title: "#{country.title} (#{country.code}) - Stats",
|
114
|
+
id: "#{country.key}-stats.html" ) do |page|
|
115
|
+
page.write render_country_stats( country, opts )
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
=end
|
120
|
+
|
data/test/bookfile/world.rb
CHANGED
@@ -39,17 +39,17 @@ book do |b|
|
|
39
39
|
puts "self.class.name (in book block): #{self.class.name}"
|
40
40
|
|
41
41
|
b.page 'index', title: 'Contents',
|
42
|
-
id: 'index' do |
|
42
|
+
id: 'index' do |page|
|
43
43
|
puts "enter index"
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
page.write "render_toc()" ## render_toc() ## render_toc( opts )
|
45
|
+
page.write "render_toc() 2x"
|
46
|
+
page.write "render_toc() 3x"
|
47
|
+
|
48
|
+
page.render_toc( {} )
|
49
49
|
## render :toc -- auto includes opts???
|
50
50
|
|
51
51
|
puts "self.class.name (in page block): #{self.class.name}"
|
52
|
-
|
52
|
+
page.write "continent.count: #{Continent.count}"
|
53
53
|
puts "leave index"
|
54
54
|
|
55
55
|
puts "continent.count: #{Continent.count}"
|
@@ -67,9 +67,9 @@ book do |b|
|
|
67
67
|
puts "path=#{path}"
|
68
68
|
|
69
69
|
b.page path, title: "#{country.name} (#{country.code})",
|
70
|
-
id: country.key do |
|
71
|
-
|
72
|
-
|
70
|
+
id: country.key do |page|
|
71
|
+
page.write "render_country(#{country.name})" ## render_country( country ) ## render_country( country, opts )
|
72
|
+
page.render_country( country, {} ) ### fix: auto-include opts in render - how??
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
data/test/test_beer.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_beer.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
class TestBeer < MiniTest::Test
|
11
|
+
|
12
|
+
def test_beer
|
13
|
+
book_templates_unzip_dir = './tmp/book-beer'
|
14
|
+
|
15
|
+
bookfile = Bookfile::Bookfile.load_file( './test/bookfile/beer.rb' )
|
16
|
+
|
17
|
+
bookfile.download # download book packages (templates n scripts)
|
18
|
+
bookfile.unzip( book_templates_unzip_dir )
|
19
|
+
|
20
|
+
bookfile.prepare( book_templates_unzip_dir )
|
21
|
+
bookfile.connect
|
22
|
+
|
23
|
+
bookfile.build( book_templates_unzip_dir )
|
24
|
+
|
25
|
+
assert true # if we get here - test success
|
26
|
+
end
|
27
|
+
|
28
|
+
end # class TestWorld
|
29
|
+
|
data/test/test_world.rb
CHANGED
@@ -10,13 +10,12 @@ require 'helper'
|
|
10
10
|
class TestWorld < MiniTest::Test
|
11
11
|
|
12
12
|
def test_world
|
13
|
-
book_templates_unzip_dir = './tmp/book'
|
13
|
+
book_templates_unzip_dir = './tmp/book-world'
|
14
14
|
|
15
|
-
|
16
|
-
bookfile = builder.bookfile
|
15
|
+
bookfile = Bookfile::Bookfile.load_file( './test/bookfile/world.rb' )
|
17
16
|
|
18
17
|
# bookfile.download # download book packages (templates n scripts)
|
19
|
-
|
18
|
+
bookfile.unzip( book_templates_unzip_dir )
|
20
19
|
|
21
20
|
bookfile.prepare( book_templates_unzip_dir )
|
22
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.1
|
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-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: props
|
@@ -146,8 +146,10 @@ files:
|
|
146
146
|
- lib/bookfile/helpers/misc.rb
|
147
147
|
- lib/bookfile/package/package.rb
|
148
148
|
- lib/bookfile/version.rb
|
149
|
+
- test/bookfile/beer.rb
|
149
150
|
- test/bookfile/world.rb
|
150
151
|
- test/helper.rb
|
152
|
+
- test/test_beer.rb
|
151
153
|
- test/test_world.rb
|
152
154
|
- test/test_world_templates.rb
|
153
155
|
homepage: https://github.com/hybook/bookfile
|
@@ -177,5 +179,6 @@ signing_key:
|
|
177
179
|
specification_version: 4
|
178
180
|
summary: bookfile - builder for books
|
179
181
|
test_files:
|
182
|
+
- test/test_beer.rb
|
180
183
|
- test/test_world.rb
|
181
184
|
- test/test_world_templates.rb
|