bookfile 0.0.1 → 0.1.0
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/.gemtest +0 -0
- data/Manifest.txt +12 -0
- data/Rakefile +3 -0
- data/lib/bookfile.rb +27 -0
- data/lib/bookfile/book/book.rb +103 -0
- data/lib/bookfile/book/config.rb +17 -0
- data/lib/bookfile/bookfile.rb +88 -0
- data/lib/bookfile/builder.rb +48 -0
- data/lib/bookfile/database/database.rb +53 -0
- data/lib/bookfile/helpers/markdown.rb +42 -0
- data/lib/bookfile/helpers/misc.rb +13 -0
- data/lib/bookfile/package/package.rb +151 -0
- data/lib/bookfile/version.rb +4 -4
- data/test/bookfile/world.rb +77 -0
- data/test/helper.rb +9 -0
- data/test/test_world.rb +30 -0
- data/test/test_world_templates.rb +28 -0
- metadata +60 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e627081c49ba840795a25e2b2aeda693727563a
|
4
|
+
data.tar.gz: 9fa61a19d841748e24db5b8ae1184f2b32254b3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f90ddbe193fab0612db0c3e8450a8615a6e188f8165dfeeb6c22a29191187af7c67bbd8db7adb6f0bb9956f1f2633c383bf0f24dfb0597ad0aacde99243b6b6
|
7
|
+
data.tar.gz: 32cab29944e3f8da39666f205c8c7918c4b0f05479a44aabcabf4be7d1a7806b262842644266f0353103f6f8a65fa6132ebe9f66b6e89127667c42145b43fb1c
|
data/.gemtest
ADDED
File without changes
|
data/Manifest.txt
CHANGED
@@ -3,4 +3,16 @@ Manifest.txt
|
|
3
3
|
README.md
|
4
4
|
Rakefile
|
5
5
|
lib/bookfile.rb
|
6
|
+
lib/bookfile/book/book.rb
|
7
|
+
lib/bookfile/book/config.rb
|
8
|
+
lib/bookfile/bookfile.rb
|
9
|
+
lib/bookfile/builder.rb
|
10
|
+
lib/bookfile/database/database.rb
|
11
|
+
lib/bookfile/helpers/markdown.rb
|
12
|
+
lib/bookfile/helpers/misc.rb
|
13
|
+
lib/bookfile/package/package.rb
|
6
14
|
lib/bookfile/version.rb
|
15
|
+
test/bookfile/world.rb
|
16
|
+
test/helper.rb
|
17
|
+
test/test_world.rb
|
18
|
+
test/test_world_templates.rb
|
data/Rakefile
CHANGED
@@ -23,6 +23,9 @@ Hoe.spec 'bookfile' do
|
|
23
23
|
['props'], # settings / prop(ertie)s / env / INI
|
24
24
|
['logutils'], # logging
|
25
25
|
['textutils'], # e.g. >= 0.6 && <= 1.0 ## will include logutils, props
|
26
|
+
['rubyzip'], ## todo: check if included in ??
|
27
|
+
['fetcher'], ## todo: check if included in ??
|
28
|
+
['hybook'] ## todo: check if included in ??
|
26
29
|
]
|
27
30
|
|
28
31
|
self.spec_extras = {
|
data/lib/bookfile.rb
CHANGED
@@ -1,7 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
|
3
|
+
#############
|
4
|
+
# stdlibs
|
5
|
+
|
6
|
+
require 'pp'
|
7
|
+
require 'ostruct'
|
8
|
+
|
9
|
+
##############
|
10
|
+
# 3rd party gems
|
11
|
+
|
12
|
+
require 'fetcher'
|
13
|
+
require 'zip' # use $ gem install rubyzip
|
14
|
+
require 'hybook' # todo/fix: check if hybook required/needed for now??
|
2
15
|
|
3
16
|
####################
|
4
17
|
# our own code
|
5
18
|
|
6
19
|
require 'bookfile/version' # let it always go first
|
7
20
|
|
21
|
+
###
|
22
|
+
# helpers
|
23
|
+
# todo/fix: move helpers to hybook
|
24
|
+
require 'bookfile/helpers/markdown' ## module HybookHelper
|
25
|
+
require 'bookfile/helpers/misc' ## module HybookHelper
|
26
|
+
|
27
|
+
|
28
|
+
require 'bookfile/database/database'
|
29
|
+
require 'bookfile/package/package'
|
30
|
+
require 'bookfile/book/config'
|
31
|
+
require 'bookfile/book/book'
|
32
|
+
require 'bookfile/bookfile'
|
33
|
+
require 'bookfile/builder'
|
34
|
+
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
## todo/fix:
|
5
|
+
## render - auto-include/merge (global) book opts ???
|
6
|
+
## build book twice (std, and inline:true)
|
7
|
+
##
|
8
|
+
## use global inline? helper instead of passing along
|
9
|
+
## opts[:inline] == true ???? - why, why not???
|
10
|
+
|
11
|
+
|
12
|
+
module Bookfile
|
13
|
+
|
14
|
+
|
15
|
+
class PageCtx ## page context for evaluate
|
16
|
+
|
17
|
+
include HybookHelper
|
18
|
+
|
19
|
+
def initialize( config ) ## BookConfig
|
20
|
+
## pass in templates_dir here
|
21
|
+
## ## TEMPLATES_DIR = ?? -- passed in as config
|
22
|
+
## or pass in class to help find templates???
|
23
|
+
## TemplateMan( ??? )
|
24
|
+
@config = config
|
25
|
+
end
|
26
|
+
|
27
|
+
def write( text )
|
28
|
+
puts "*** write:"
|
29
|
+
puts " #{text}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def render( name, opts={}, locals={} ) ## possible? - make opts required ??
|
33
|
+
puts "*** render #{name}:"
|
34
|
+
|
35
|
+
tmpl = File.read_utf8( "#{@config.templates_dir}/#{name}.md" ) ## name e.g. includes/_city
|
36
|
+
|
37
|
+
### if any locals defined; add "header/preamble w/ shortcuts" to template
|
38
|
+
# e.g. country = locals[:country] etc.
|
39
|
+
unless locals.empty?
|
40
|
+
tmpl = _locals_code( locals ) + tmpl
|
41
|
+
end
|
42
|
+
|
43
|
+
text = TextUtils::PageTemplate.new( tmpl ).render( binding )
|
44
|
+
|
45
|
+
puts " #{text}"
|
46
|
+
text
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
def _locals_code( locals )
|
51
|
+
## convert locals hash to erb snippet with shortcuts
|
52
|
+
## e.g. country = locals[:country]
|
53
|
+
## and so on
|
54
|
+
|
55
|
+
buf = "<%\n"
|
56
|
+
locals.each do |k,v|
|
57
|
+
puts " add local '#{k}' #{k.class.name} - #{v.class.name}"
|
58
|
+
|
59
|
+
buf << "#{k} = locals[:#{k}];\n"
|
60
|
+
end
|
61
|
+
buf << "%>\n"
|
62
|
+
buf
|
63
|
+
end
|
64
|
+
|
65
|
+
end # class PageCtx
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
class BookCtx
|
70
|
+
|
71
|
+
def initialize( config )
|
72
|
+
@config = config
|
73
|
+
end
|
74
|
+
|
75
|
+
def page( name, opts={} ) ## &block
|
76
|
+
puts "[BookCtx#page] #{name} opts:#{opts.inspect}"
|
77
|
+
|
78
|
+
puts "[BookCtx#page] before yield"
|
79
|
+
ctx = PageCtx.new( @config ) ## pass along book configs
|
80
|
+
yield( ctx ) ## same as - ctx.instance_eval( &block )
|
81
|
+
puts "[BookCtx#page] after yield"
|
82
|
+
end
|
83
|
+
|
84
|
+
end # class BootCtx
|
85
|
+
|
86
|
+
|
87
|
+
class BookDef
|
88
|
+
def initialize( opts={}, proc )
|
89
|
+
@opts = opts
|
90
|
+
@proc = proc ## use name block (why,why not??)
|
91
|
+
## @block = block ## save block as proc ?? ??
|
92
|
+
end
|
93
|
+
|
94
|
+
def build( unzip_dir )
|
95
|
+
config = BookConfig.new( templates_dir: "#{unzip_dir}/_templates" )
|
96
|
+
ctx = BookCtx.new( config )
|
97
|
+
@proc.call( ctx ) ## same as - ctx.instance_eval( &@codeblock ) -- use instance_eval - why, why not??
|
98
|
+
end
|
99
|
+
end # class BookDef
|
100
|
+
|
101
|
+
|
102
|
+
end # module Bookfile
|
103
|
+
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Bookfile
|
4
|
+
|
5
|
+
class Bookfile
|
6
|
+
|
7
|
+
## include LogUtils::Logging
|
8
|
+
|
9
|
+
attr_reader :packages
|
10
|
+
attr_reader :databases
|
11
|
+
attr_reader :books
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@packages = [] # only allow single package - why, why not??
|
15
|
+
@databases = [] # only allow single database - why, why not??
|
16
|
+
@books = [] # only allow single book - why, why not??
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def download
|
21
|
+
puts "[bookfile] dowload book packages"
|
22
|
+
@packages.each do |package|
|
23
|
+
package.download
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
###
|
28
|
+
## todo/fix - add unzip_dir as an option/config to constructor - why, why not??
|
29
|
+
## location needs to get (re)used in prepare too
|
30
|
+
## for now pass along unzip_dir again ???
|
31
|
+
def unzip( unzip_dir )
|
32
|
+
puts "[bookfile] unzip book packages"
|
33
|
+
### fix: for multiple packages use a number?? - how to make path unique
|
34
|
+
## for now is ./book
|
35
|
+
@packages.each do |package|
|
36
|
+
package.unzip( unzip_dir )
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
=begin
|
42
|
+
def setup
|
43
|
+
puts "[bookfile] setup database connections n models"
|
44
|
+
@databases.each do |database|
|
45
|
+
database.setup
|
46
|
+
end
|
47
|
+
end
|
48
|
+
=end
|
49
|
+
|
50
|
+
def connect
|
51
|
+
puts "[bookfile] connect to database(s)"
|
52
|
+
@databases.each do |database|
|
53
|
+
database.connect
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def prepare( unzip_dir )
|
59
|
+
@databases.each do |database|
|
60
|
+
database.prepare ## require models and include in builder/page ctx
|
61
|
+
end
|
62
|
+
@packages.each do |package|
|
63
|
+
package.prepare( unzip_dir ) ## require helpers and include in builder/page ctx
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
def build( unzip_dir )
|
69
|
+
puts "[bookfile] build books"
|
70
|
+
@books.each do |book|
|
71
|
+
book.build( unzip_dir )
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
def dump
|
78
|
+
## ## for debugging dump datasets (note: will/might also check if zip exits)
|
79
|
+
## logger.info( "[datafile] dump datasets (for debugging)" )
|
80
|
+
## @datasets.each do |dataset|
|
81
|
+
## dataset.dump()
|
82
|
+
## end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
end # class Bookfile
|
87
|
+
end # module Bookfile
|
88
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module Bookfile
|
5
|
+
|
6
|
+
class Builder
|
7
|
+
|
8
|
+
## include LogUtils::Logging
|
9
|
+
|
10
|
+
def self.load_file( path )
|
11
|
+
code = File.read( path )
|
12
|
+
self.load( code )
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.load( code )
|
16
|
+
builder = Builder.new
|
17
|
+
builder.instance_eval( code )
|
18
|
+
builder
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
attr_reader :bookfile
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
puts "starting new bookfile; lets go"
|
26
|
+
@bookfile = Bookfile.new
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def package( name, opts={} )
|
31
|
+
puts "package '#{name}'"
|
32
|
+
@bookfile.packages << BookPackage.new( name, opts )
|
33
|
+
end
|
34
|
+
|
35
|
+
def world( opts={} )
|
36
|
+
puts "world opts: #{opts.inspect}"
|
37
|
+
@bookfile.databases << World.new( opts )
|
38
|
+
end
|
39
|
+
|
40
|
+
def book( opts={}, &block )
|
41
|
+
puts "book opts: #{opts.inspect}"
|
42
|
+
@bookfile.books << BookDef.new( opts, block )
|
43
|
+
end
|
44
|
+
|
45
|
+
end # class Builder
|
46
|
+
|
47
|
+
end # module Bookfile
|
48
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module Bookfile
|
5
|
+
|
6
|
+
class Database
|
7
|
+
def initialize( db_config )
|
8
|
+
@db_config = db_config
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
class World < Database ## change to WorldDatabase or DatabaseWorld - why, why not???
|
14
|
+
def initialize( db_config ) ## check - if it works by default (no initialze specfied)
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def prepare ## change to require - why, why not??
|
19
|
+
puts "setup world: #{@db_config.inspect}"
|
20
|
+
|
21
|
+
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
|
+
|
31
|
+
## also add to xxxx ???
|
32
|
+
## (possible to include as globals ???? how - Object.send :include ???) or
|
33
|
+
## Module.send :include ??
|
34
|
+
else
|
35
|
+
## find a better check - check for constants defined??? if not define???
|
36
|
+
## or use constant_missing handler???
|
37
|
+
puts " assume WorldDb::Models already included ??"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def connect
|
42
|
+
print " connecting..."
|
43
|
+
ActiveRecord::Base.establish_connection( @db_config )
|
44
|
+
puts "OK"
|
45
|
+
end
|
46
|
+
|
47
|
+
def setup ## use connect/prepare - why, why not??
|
48
|
+
prepare # step 1: prepare - require and include models
|
49
|
+
connect # step 2: connect
|
50
|
+
end
|
51
|
+
end # class World
|
52
|
+
|
53
|
+
end # module Bookfile
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module HybookHelper
|
4
|
+
|
5
|
+
###########################
|
6
|
+
# markdown helpers
|
7
|
+
|
8
|
+
###
|
9
|
+
# fix: move to Markdown gem
|
10
|
+
# add to new module
|
11
|
+
# MarkdownHelper or Markdown::Helper ???
|
12
|
+
|
13
|
+
|
14
|
+
def link_to( title, link )
|
15
|
+
"[#{title}](#{link})"
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def columns_begin( opts={} )
|
20
|
+
# note: will add columns2 or columns3 etc. depending on columns option passed in
|
21
|
+
|
22
|
+
columns = opts[:columns] || 2
|
23
|
+
|
24
|
+
buf = ''
|
25
|
+
buf << "\n"
|
26
|
+
buf << "<div class='columns#{columns}' markdown='1'>\n"
|
27
|
+
buf << "\n"
|
28
|
+
buf
|
29
|
+
end
|
30
|
+
|
31
|
+
def columns_end
|
32
|
+
buf = ''
|
33
|
+
buf << "\n"
|
34
|
+
buf << "</div>\n"
|
35
|
+
buf << "\n"
|
36
|
+
buf
|
37
|
+
end
|
38
|
+
|
39
|
+
### todo: check if we can use columns simply w/ yield for body ??
|
40
|
+
|
41
|
+
|
42
|
+
end # module HybookHelper
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module HybookHelper
|
4
|
+
|
5
|
+
### todo:
|
6
|
+
## add to textutils ?? why? why not??
|
7
|
+
def number_with_delimiter( num )
|
8
|
+
delimiter = '.'
|
9
|
+
num.to_s.reverse.gsub( /(\d{3})(?=\d)/, "\\1#{delimiter}").reverse
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
end # module HybookHelper
|
@@ -0,0 +1,151 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
|
4
|
+
module Bookfile
|
5
|
+
|
6
|
+
class BookPackage ## change to BookTemplates/BookTheme/BookPack/BookClass/BookStyle ???
|
7
|
+
def initialize( name, opts={} )
|
8
|
+
@name = name
|
9
|
+
@opts = opts
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def remote_zip_url # remote zip url
|
14
|
+
### note: use http:// for now - lets us use (personal proxy NOT working w/ https) for now
|
15
|
+
## "https://github.com/#{@name}/archive/gh-pages.zip"
|
16
|
+
"http://github.com/#{@name}/archive/gh-pages.zip"
|
17
|
+
end
|
18
|
+
|
19
|
+
def local_zip_name
|
20
|
+
### note: replace / in name w/ --I--
|
21
|
+
## e.g. flatten the filename, that is, do NOT include any folders
|
22
|
+
@name.gsub('/', '--I--') # note: will NOT include/return .zip extension
|
23
|
+
end
|
24
|
+
|
25
|
+
def local_zip_dir
|
26
|
+
"./tmp"
|
27
|
+
end
|
28
|
+
|
29
|
+
def local_zip_path # local zip path
|
30
|
+
"#{local_zip_dir}/#{local_zip_name}.zip"
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
=begin
|
35
|
+
def local_unzip_dir() "./book"; end
|
36
|
+
|
37
|
+
def local_scripts_dir
|
38
|
+
## fix: just use _scripts -- remove helpers in repo!!!
|
39
|
+
"#{local_unzip_dir}/_scripts"
|
40
|
+
end
|
41
|
+
=end
|
42
|
+
|
43
|
+
|
44
|
+
def download
|
45
|
+
## logger.info( "download book package '#{@name}'" )
|
46
|
+
## logger.info( " from '#{remote_zip_url}'" )
|
47
|
+
## logger.info( " to '#{local_zip_path}'..." )
|
48
|
+
|
49
|
+
## note: lets use http:// instead of https:// for now - lets us use person proxy (NOT working w/ https for now)
|
50
|
+
src = remote_zip_url
|
51
|
+
dest_zip = local_zip_path
|
52
|
+
|
53
|
+
## make sure dest folder exists
|
54
|
+
FileUtils.mkdir_p( local_zip_dir ) unless Dir.exists?( local_zip_dir )
|
55
|
+
|
56
|
+
fetch_book_templates( src, dest_zip )
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
def unzip( unzip_dir )
|
61
|
+
src = local_zip_path
|
62
|
+
dest_unzip = unzip_dir ## local_unzip_dir
|
63
|
+
|
64
|
+
## check if folders exists? if not create folder in path
|
65
|
+
FileUtils.mkdir_p( dest_unzip ) unless Dir.exists?( dest_unzip )
|
66
|
+
|
67
|
+
unzip_book_templates( src, dest_unzip )
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def prepare( unzip_dir ) ## change to require - why, why not??
|
72
|
+
puts "auto-require/include book scripts in '#{unzip_dir}/_scripts'"
|
73
|
+
|
74
|
+
files = Dir["#{unzip_dir}/_scripts/**/*.rb"]
|
75
|
+
pp files
|
76
|
+
|
77
|
+
files.each_with_index do |file,idx|
|
78
|
+
## todo/check: check for exceptions???
|
79
|
+
puts " [#{idx+1}/#{files.count}] try auto-require '#{file}'..."
|
80
|
+
require file
|
81
|
+
end
|
82
|
+
|
83
|
+
## include Hytext::Helper or use HytextHelper ??
|
84
|
+
## include Bookfile::Helper or use BookfileHelper ??
|
85
|
+
## check Rails example names for helper modules
|
86
|
+
## get Helper module name from book template name ???
|
87
|
+
|
88
|
+
=begin
|
89
|
+
res = require 'worlddb/models'
|
90
|
+
if res
|
91
|
+
puts " include WorldDb::Models"
|
92
|
+
|
93
|
+
Builder.send :include, WorldDb::Models
|
94
|
+
## PageCtx.send :include, WorldDb::Models
|
95
|
+
## BookCtx.send :include, WorldDb::Models
|
96
|
+
|
97
|
+
## also add to xxxx ???
|
98
|
+
## (possible to include as globals ???? how - Object.send :include ???) or
|
99
|
+
## Module.send :include ??
|
100
|
+
else
|
101
|
+
## find a better check - check for constants defined??? if not define???
|
102
|
+
## or use constant_missing handler???
|
103
|
+
puts " assume WorldDb::Models already included ??"
|
104
|
+
end
|
105
|
+
=end
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def fetch_book_templates( src, dest )
|
112
|
+
## step 1 - fetch archive
|
113
|
+
worker = Fetcher::Worker.new
|
114
|
+
worker.copy( src, dest )
|
115
|
+
### fix: add src.sha5
|
116
|
+
### inside folder
|
117
|
+
### lets us check if current HEAD version is in place across datafiles etc.
|
118
|
+
## - try HTTP HEAD ?? to check?
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
######
|
123
|
+
# fix/todo:
|
124
|
+
# exclude _pages folder for now
|
125
|
+
# lets us include working live sample pages in template pack
|
126
|
+
|
127
|
+
def unzip_book_templates( src, dest, opts={} )
|
128
|
+
### todo/fix: rename or remove root folder -- use opts { root: false or something??}
|
129
|
+
# e.g
|
130
|
+
# !/beer-gh-pages/_templates/ becomes
|
131
|
+
# !/_templates/ etc.
|
132
|
+
|
133
|
+
Zip::File.open( src ) do |zipfile|
|
134
|
+
zipfile.each do |file|
|
135
|
+
if file.directory?
|
136
|
+
puts " skip directory zip entry - #{file.name}"
|
137
|
+
else
|
138
|
+
name = file.name[ file.name.index('/')+1..-1] ## cut-off root/first path entry
|
139
|
+
path = File.join( dest, name)
|
140
|
+
puts " unzip file zip entry - #{file.name} to #{path}"
|
141
|
+
FileUtils.mkdir_p( File.dirname( path) )
|
142
|
+
zipfile.extract(file, path) unless File.exist?(path)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
end # class BookPackage
|
149
|
+
|
150
|
+
end # module Bookfile
|
151
|
+
|
data/lib/bookfile/version.rb
CHANGED
@@ -0,0 +1,77 @@
|
|
1
|
+
|
2
|
+
package 'book-templates/world'
|
3
|
+
## use package or templates or theme (instead of ???)
|
4
|
+
## will auto-include all helpers etc. from _scripts/ folder (hierachy/tree)
|
5
|
+
|
6
|
+
|
7
|
+
world adapter: 'sqlite3', database: './world.db'
|
8
|
+
## will connect to database;
|
9
|
+
## will require all libs
|
10
|
+
## will include all models
|
11
|
+
|
12
|
+
|
13
|
+
## page 'index', title: 'Contents',
|
14
|
+
## id: 'index' do |p|
|
15
|
+
## p.write render_toc() ## render_toc( opts )
|
16
|
+
## ## render :toc -- auto includes opts???
|
17
|
+
## end
|
18
|
+
|
19
|
+
=begin
|
20
|
+
book do |b|
|
21
|
+
|
22
|
+
puts "before first page"
|
23
|
+
|
24
|
+
b.page 'index', title: 'Contents',
|
25
|
+
id: 'index' do |p|
|
26
|
+
puts "enter index"
|
27
|
+
puts "leave index"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
=end
|
31
|
+
|
32
|
+
|
33
|
+
puts "self.class.name (in top level): #{self.class.name}"
|
34
|
+
|
35
|
+
|
36
|
+
book do |b|
|
37
|
+
|
38
|
+
puts "before first page"
|
39
|
+
puts "self.class.name (in book block): #{self.class.name}"
|
40
|
+
|
41
|
+
b.page 'index', title: 'Contents',
|
42
|
+
id: 'index' do |p|
|
43
|
+
puts "enter index"
|
44
|
+
p.write "render_toc()" ## render_toc() ## render_toc( opts )
|
45
|
+
p.write "render_toc() 2x"
|
46
|
+
p.write "render_toc() 3x"
|
47
|
+
|
48
|
+
p.render_toc( {} )
|
49
|
+
## render :toc -- auto includes opts???
|
50
|
+
|
51
|
+
puts "self.class.name (in page block): #{self.class.name}"
|
52
|
+
p.write "continent.count: #{Continent.count}"
|
53
|
+
puts "leave index"
|
54
|
+
|
55
|
+
puts "continent.count: #{Continent.count}"
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
### generate pages for countries
|
60
|
+
# note: use same order as table of contents
|
61
|
+
|
62
|
+
Continent.order(:id).each do |continent|
|
63
|
+
continent.countries.order(:name).limit(1).each do |country|
|
64
|
+
|
65
|
+
puts "build country page #{country.key}..."
|
66
|
+
path = country.to_path
|
67
|
+
puts "path=#{path}"
|
68
|
+
|
69
|
+
b.page path, title: "#{country.name} (#{country.code})",
|
70
|
+
id: country.key do |p|
|
71
|
+
p.write "render_country(#{country.name})" ## render_country( country ) ## render_country( country, opts )
|
72
|
+
p.render_country( country, {} ) ### fix: auto-include opts in render - how??
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
data/test/helper.rb
ADDED
data/test/test_world.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_world.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
class TestWorld < MiniTest::Test
|
11
|
+
|
12
|
+
def test_world
|
13
|
+
book_templates_unzip_dir = './tmp/book'
|
14
|
+
|
15
|
+
builder = Bookfile::Builder.load_file( './test/bookfile/world.rb' )
|
16
|
+
bookfile = builder.bookfile
|
17
|
+
|
18
|
+
# bookfile.download # download book packages (templates n scripts)
|
19
|
+
# bookfile.unzip( book_templates_unzip_dir )
|
20
|
+
|
21
|
+
bookfile.prepare( book_templates_unzip_dir )
|
22
|
+
bookfile.connect
|
23
|
+
|
24
|
+
bookfile.build( book_templates_unzip_dir )
|
25
|
+
|
26
|
+
assert true # if we get here - test success
|
27
|
+
end
|
28
|
+
|
29
|
+
end # class TestWorld
|
30
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_world_templates.rb
|
6
|
+
|
7
|
+
|
8
|
+
require 'helper'
|
9
|
+
|
10
|
+
class TestWorldTemplates < MiniTest::Test
|
11
|
+
|
12
|
+
def test_unzip
|
13
|
+
builder = Bookfile::Builder.load_file( './test/bookfile/world.rb' )
|
14
|
+
bookfile = builder.bookfile
|
15
|
+
|
16
|
+
bookfile.download # download book packages (templates n scripts)
|
17
|
+
bookfile.unzip # unzip book packages (template)
|
18
|
+
|
19
|
+
bookfile.prepare # require models n helpers
|
20
|
+
|
21
|
+
# bookfile.connect
|
22
|
+
# bookfile.build
|
23
|
+
|
24
|
+
assert true # if we get here - test success
|
25
|
+
end
|
26
|
+
|
27
|
+
end # class TestWorldTemplates
|
28
|
+
|
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.0
|
4
|
+
version: 0.1.0
|
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-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: props
|
@@ -52,6 +52,48 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubyzip
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
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: fetcher
|
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: hybook
|
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'
|
55
97
|
- !ruby/object:Gem::Dependency
|
56
98
|
name: rdoc
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,12 +131,25 @@ extra_rdoc_files:
|
|
89
131
|
- Manifest.txt
|
90
132
|
- README.md
|
91
133
|
files:
|
134
|
+
- ".gemtest"
|
92
135
|
- HISTORY.md
|
93
136
|
- Manifest.txt
|
94
137
|
- README.md
|
95
138
|
- Rakefile
|
96
139
|
- lib/bookfile.rb
|
140
|
+
- lib/bookfile/book/book.rb
|
141
|
+
- lib/bookfile/book/config.rb
|
142
|
+
- lib/bookfile/bookfile.rb
|
143
|
+
- lib/bookfile/builder.rb
|
144
|
+
- lib/bookfile/database/database.rb
|
145
|
+
- lib/bookfile/helpers/markdown.rb
|
146
|
+
- lib/bookfile/helpers/misc.rb
|
147
|
+
- lib/bookfile/package/package.rb
|
97
148
|
- lib/bookfile/version.rb
|
149
|
+
- test/bookfile/world.rb
|
150
|
+
- test/helper.rb
|
151
|
+
- test/test_world.rb
|
152
|
+
- test/test_world_templates.rb
|
98
153
|
homepage: https://github.com/hybook/bookfile
|
99
154
|
licenses:
|
100
155
|
- Public Domain
|
@@ -121,4 +176,6 @@ rubygems_version: 2.4.2
|
|
121
176
|
signing_key:
|
122
177
|
specification_version: 4
|
123
178
|
summary: bookfile - builder for books
|
124
|
-
test_files:
|
179
|
+
test_files:
|
180
|
+
- test/test_world.rb
|
181
|
+
- test/test_world_templates.rb
|