ichiban 0.0.2 → 1.0.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.
- data/lib/ichiban/command.rb +13 -1
- data/lib/ichiban/config.rb +7 -17
- data/lib/ichiban/deleter.rb +24 -0
- data/lib/ichiban/dependencies.rb +33 -0
- data/lib/ichiban/file.rb +115 -0
- data/lib/ichiban/helpers.rb +6 -10
- data/lib/ichiban/html_compiler.rb +61 -0
- data/lib/ichiban/logger.rb +59 -3
- data/lib/ichiban/markdown.rb +34 -0
- data/lib/ichiban/watcher.rb +35 -3
- data/lib/ichiban.rb +44 -17
- metadata +123 -74
- data/.gitignore +0 -5
- data/Gemfile +0 -4
- data/README +0 -56
- data/bin/ichiban.rb +0 -6
- data/ichiban.gemspec +0 -25
- data/klass.rb +0 -7
- data/lib/ichiban/compilation.rb +0 -93
- data/lib/ichiban/erb_page.rb +0 -16
- data/lib/ichiban/files.rb +0 -105
- data/lib/ichiban/layouts.rb +0 -10
- data/lib/ichiban/loading.rb +0 -19
- data/lib/ichiban/mapping.rb +0 -38
- data/lib/ichiban/path.rb +0 -55
- data/lib/ichiban/script_runner.rb +0 -33
- data/lib/ichiban/tasks.rb +0 -23
- data/lib/ichiban/version.rb +0 -3
- data/sample/Rakefile +0 -2
- data/sample/compiled/about.html +0 -13
- data/sample/compiled/bad.html +0 -0
- data/sample/compiled/images/check.png +0 -0
- data/sample/compiled/index.html +0 -13
- data/sample/compiled/javascripts/interaction.js +0 -1
- data/sample/compiled/staff/_employee.html +0 -13
- data/sample/compiled/staff/andre-marques.html +0 -13
- data/sample/compiled/staff/index.html +0 -17
- data/sample/compiled/staff/jarrett-colby.html +0 -13
- data/sample/compiled/stylesheets/reset.css +0 -1
- data/sample/compiled/stylesheets/screen.css +0 -1
- data/sample/config.rb +0 -3
- data/sample/content/about.html +0 -1
- data/sample/content/bad.html +0 -3
- data/sample/content/index.html +0 -1
- data/sample/content/staff/_employee.html +0 -1
- data/sample/content/staff/index.html +0 -6
- data/sample/data/employees.csv +0 -2
- data/sample/errors/404.html +0 -1
- data/sample/helpers/staff_helper.rb +0 -5
- data/sample/images/check.png +0 -0
- data/sample/javascripts/interaction.js +0 -1
- data/sample/layouts/default.html +0 -13
- data/sample/models/employee.rb +0 -16
- data/sample/scripts/bad.rb +0 -1
- data/sample/scripts/staff.rb +0 -8
- data/sample/stylesheets/reset.css +0 -1
- data/sample/stylesheets/screen.scss +0 -5
- data/spec/integration_spec.rb +0 -89
- data/spec/path_spec.rb +0 -15
- data/spec/spec_helper.rb +0 -19
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ichiban
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-11-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement:
|
15
|
+
name: erubis
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
requirement:
|
31
|
+
name: sass
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement:
|
47
|
+
name: listen
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,72 +53,114 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
47
|
-
|
48
|
-
|
49
|
-
-
|
50
|
-
|
51
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: activesupport
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: mocha
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: turn
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: lorax
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: Static website compiler with advanced feature, including watcher script.
|
127
|
+
email: jarrett@madebyhq.com
|
128
|
+
executables: []
|
52
129
|
extensions: []
|
53
130
|
extra_rdoc_files: []
|
54
131
|
files:
|
55
|
-
- .gitignore
|
56
|
-
- Gemfile
|
57
|
-
- README
|
58
|
-
- bin/ichiban.rb
|
59
|
-
- ichiban.gemspec
|
60
|
-
- klass.rb
|
61
|
-
- lib/ichiban.rb
|
62
132
|
- lib/ichiban/command.rb
|
63
|
-
- lib/ichiban/compilation.rb
|
64
133
|
- lib/ichiban/config.rb
|
65
|
-
- lib/ichiban/
|
66
|
-
- lib/ichiban/
|
134
|
+
- lib/ichiban/deleter.rb
|
135
|
+
- lib/ichiban/dependencies.rb
|
136
|
+
- lib/ichiban/file.rb
|
67
137
|
- lib/ichiban/helpers.rb
|
68
|
-
- lib/ichiban/
|
69
|
-
- lib/ichiban/loading.rb
|
138
|
+
- lib/ichiban/html_compiler.rb
|
70
139
|
- lib/ichiban/logger.rb
|
71
|
-
- lib/ichiban/
|
72
|
-
- lib/ichiban/path.rb
|
73
|
-
- lib/ichiban/script_runner.rb
|
74
|
-
- lib/ichiban/tasks.rb
|
75
|
-
- lib/ichiban/version.rb
|
140
|
+
- lib/ichiban/markdown.rb
|
76
141
|
- lib/ichiban/watcher.rb
|
77
|
-
-
|
78
|
-
|
79
|
-
- sample/compiled/bad.html
|
80
|
-
- sample/compiled/images/check.png
|
81
|
-
- sample/compiled/index.html
|
82
|
-
- sample/compiled/javascripts/interaction.js
|
83
|
-
- sample/compiled/staff/_employee.html
|
84
|
-
- sample/compiled/staff/andre-marques.html
|
85
|
-
- sample/compiled/staff/index.html
|
86
|
-
- sample/compiled/staff/jarrett-colby.html
|
87
|
-
- sample/compiled/stylesheets/reset.css
|
88
|
-
- sample/compiled/stylesheets/screen.css
|
89
|
-
- sample/config.rb
|
90
|
-
- sample/content/about.html
|
91
|
-
- sample/content/bad.html
|
92
|
-
- sample/content/index.html
|
93
|
-
- sample/content/staff/_employee.html
|
94
|
-
- sample/content/staff/index.html
|
95
|
-
- sample/data/employees.csv
|
96
|
-
- sample/errors/404.html
|
97
|
-
- sample/helpers/staff_helper.rb
|
98
|
-
- sample/images/check.png
|
99
|
-
- sample/javascripts/interaction.js
|
100
|
-
- sample/layouts/default.html
|
101
|
-
- sample/models/employee.rb
|
102
|
-
- sample/scripts/bad.rb
|
103
|
-
- sample/scripts/staff.rb
|
104
|
-
- sample/stylesheets/reset.css
|
105
|
-
- sample/stylesheets/screen.scss
|
106
|
-
- spec/integration_spec.rb
|
107
|
-
- spec/path_spec.rb
|
108
|
-
- spec/spec_helper.rb
|
109
|
-
homepage: ''
|
142
|
+
- lib/ichiban.rb
|
143
|
+
homepage: https://github.com/jarrett/ichiban
|
110
144
|
licenses: []
|
111
|
-
post_install_message:
|
145
|
+
post_install_message: ! 'Ichiban was installed successfully.
|
146
|
+
|
147
|
+
Type `ichiban` for usage hints.
|
148
|
+
|
149
|
+
|
150
|
+
If you intend to use Markdown in your projects,
|
151
|
+
|
152
|
+
be sure to install one of these Markdown gems:
|
153
|
+
|
154
|
+
redcarpet
|
155
|
+
|
156
|
+
maruku
|
157
|
+
|
158
|
+
rdiscount
|
159
|
+
|
160
|
+
|
161
|
+
For more information:
|
162
|
+
|
163
|
+
https://github.com/jarrett/ichiban'
|
112
164
|
rdoc_options: []
|
113
165
|
require_paths:
|
114
166
|
- lib
|
@@ -125,12 +177,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
177
|
- !ruby/object:Gem::Version
|
126
178
|
version: '0'
|
127
179
|
requirements: []
|
128
|
-
rubyforge_project:
|
129
|
-
rubygems_version: 1.8.
|
180
|
+
rubyforge_project:
|
181
|
+
rubygems_version: 1.8.24
|
130
182
|
signing_key:
|
131
183
|
specification_version: 3
|
132
|
-
summary:
|
133
|
-
test_files:
|
134
|
-
- spec/integration_spec.rb
|
135
|
-
- spec/path_spec.rb
|
136
|
-
- spec/spec_helper.rb
|
184
|
+
summary: Ichiban
|
185
|
+
test_files: []
|
data/.gitignore
DELETED
data/Gemfile
DELETED
data/README
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
To use, create a folder for your project. Populate it with the appropriate folders. Create a Rakefile and add this:
|
2
|
-
|
3
|
-
require 'ichiban'
|
4
|
-
Ichiban::Tasks.new.define
|
5
|
-
|
6
|
-
Overall design
|
7
|
-
==============
|
8
|
-
|
9
|
-
The Rakefile should have as little in it as possible.
|
10
|
-
|
11
|
-
Each individual bit of functionality should be separate and self-sufficient, although they can all depend on a configured project.
|
12
|
-
|
13
|
-
For each of the following:
|
14
|
-
|
15
|
-
- Content file
|
16
|
-
- Stylesheet
|
17
|
-
- JS
|
18
|
-
- Image
|
19
|
-
|
20
|
-
...do each of these:
|
21
|
-
|
22
|
-
- Compile/copy one
|
23
|
-
- List all
|
24
|
-
- List stale
|
25
|
-
- Compile/copy all
|
26
|
-
- Compile/copy stale
|
27
|
-
|
28
|
-
Listing is done in files.rb. Compiling is done in compilation.rb.
|
29
|
-
|
30
|
-
Further:
|
31
|
-
|
32
|
-
- List all data files
|
33
|
-
- Run scripts
|
34
|
-
|
35
|
-
The compilation logger needs to be accessible from everywhere so that generators etc. can get to it.
|
36
|
-
|
37
|
-
The watcher should delete files in the compiled directory when they're no longer needed. This can't be automatically determined for files based on scripts.
|
38
|
-
|
39
|
-
The watcher should use the fork process described here:
|
40
|
-
|
41
|
-
http://rkh.im/code-reloading
|
42
|
-
|
43
|
-
Initially, the watcher forks. Both the parent and child process watch for changes, but they respond differently. The parent's only job is to kill the
|
44
|
-
child and refork upon changes to models, scripts, and helpers. The child's job is to compile.
|
45
|
-
|
46
|
-
Scripts should have an optional dependencies block:
|
47
|
-
|
48
|
-
dependencies('data/employees.csv', 'data/stores.csv') do
|
49
|
-
# Generate calls go here
|
50
|
-
end
|
51
|
-
|
52
|
-
This will cause the block to run only when employees.csv or stores.csv has changed. Since there's no way to infer the output file paths,
|
53
|
-
we need to simply keep track of when the script was last run. Then, if any of the dependencies have changed after that, we re-run the script.
|
54
|
-
To track this, we'll store a JSON hash in scripts/.last_runs
|
55
|
-
|
56
|
-
{'employees.rb': 1316041807}
|
data/bin/ichiban.rb
DELETED
data/ichiban.gemspec
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "ichiban/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "ichiban"
|
7
|
-
s.version = Ichiban::VERSION
|
8
|
-
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Jarrett Colby"]
|
10
|
-
s.email = ["jarrettcolby@gmail.com"]
|
11
|
-
s.homepage = ""
|
12
|
-
s.summary = %q{Static website compiler}
|
13
|
-
s.description = %q{The most elegant way to compile static websites}
|
14
|
-
|
15
|
-
s.rubyforge_project = "ichiban"
|
16
|
-
|
17
|
-
s.add_dependency 'activesupport'
|
18
|
-
s.add_dependency 'erubis'
|
19
|
-
s.add_dependency 'maruku'
|
20
|
-
|
21
|
-
s.files = `git ls-files`.split("\n")
|
22
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
23
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
|
-
s.require_paths = ["lib"]
|
25
|
-
end
|
data/klass.rb
DELETED
data/lib/ichiban/compilation.rb
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
module Ichiban
|
2
|
-
class Compiler
|
3
|
-
include Layouts
|
4
|
-
|
5
|
-
# This should not be called from the watcher. The watcher should have a more fine-grained way of looking at changed files.
|
6
|
-
def compile
|
7
|
-
load_all_ruby_files
|
8
|
-
compile_stale
|
9
|
-
run_scripts
|
10
|
-
end
|
11
|
-
|
12
|
-
# Includes, content, images, etc
|
13
|
-
def compile_all
|
14
|
-
content_files.each { |path| compile_content_file(path) }
|
15
|
-
javascripts.each { |path| copy_javascript(path) }
|
16
|
-
images.each { |path| copy_image(path) }
|
17
|
-
stylesheets.each { |path| copy_or_compile_stylesheet(path) }
|
18
|
-
end
|
19
|
-
|
20
|
-
def compile_content_file(src_path)
|
21
|
-
dest_path = content_dest(src_path)
|
22
|
-
FileUtils.mkdir_p File.dirname(dest_path.abs)
|
23
|
-
File.open(dest_path.replace_ext('html').abs, 'w') do |f|
|
24
|
-
begin
|
25
|
-
f.write(compile_content_file_to_string(src_path))
|
26
|
-
rescue Exception => exc
|
27
|
-
Ichiban.logger.exception(exc)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def compile_content_file_to_string(src_path)
|
33
|
-
erb_context = ErbPage::Context.new(:_current_path => content_dest(src_path).web)
|
34
|
-
result = ErbPage.new(File.read(src_path.abs), :filename => src_path.abs).evaluate(erb_context)
|
35
|
-
result = case src_path.ext
|
36
|
-
when 'markdown'
|
37
|
-
Maruku.new(result).to_html
|
38
|
-
when 'html'
|
39
|
-
result
|
40
|
-
else
|
41
|
-
raise "compile_file_to_string doesn't know how to handle #{src_path.abs}"
|
42
|
-
end
|
43
|
-
wrap_in_layouts(erb_context, result)
|
44
|
-
end
|
45
|
-
|
46
|
-
# Includes, content, images, etc
|
47
|
-
def compile_stale
|
48
|
-
stale_content_files.each { |path| compile_content_file(path) }
|
49
|
-
stale_javascripts.each { |path| copy_js(path) }
|
50
|
-
stale_images.each { |path| copy_image(path) }
|
51
|
-
stale_stylesheets.each { |path| copy_or_compile_stylesheet(path) }
|
52
|
-
end
|
53
|
-
|
54
|
-
def copy_image(path)
|
55
|
-
dest = image_dest(path)
|
56
|
-
FileUtils.mkdir_p(dest.dirname)
|
57
|
-
FileUtils.cp(path.abs, dest.abs)
|
58
|
-
end
|
59
|
-
|
60
|
-
def copy_javascript(path)
|
61
|
-
dest = javascript_dest(path)
|
62
|
-
FileUtils.mkdir_p(dest.dirname)
|
63
|
-
FileUtils.cp(path.abs, dest.abs)
|
64
|
-
end
|
65
|
-
|
66
|
-
def copy_or_compile_stylesheet(path)
|
67
|
-
dest = stylesheet_dest(path)
|
68
|
-
case path.ext
|
69
|
-
when 'css'
|
70
|
-
FileUtils.mkdir_p(dest.dirname)
|
71
|
-
FileUtils.cp(path.abs, dest.abs)
|
72
|
-
when 'scss', 'sass'
|
73
|
-
Sass.compile_file(path.abs, dest.abs, :style => :compressed)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def fresh
|
78
|
-
load_all_ruby_files
|
79
|
-
compile_all
|
80
|
-
run_scripts
|
81
|
-
end
|
82
|
-
|
83
|
-
def run_scripts
|
84
|
-
scripts.each do |path|
|
85
|
-
begin
|
86
|
-
ScriptRunner.run_script_file(path)
|
87
|
-
rescue Exception => exc
|
88
|
-
Ichiban.logger.exception(exc)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
data/lib/ichiban/erb_page.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
module Ichiban
|
2
|
-
class ErbPage < Erubis::Eruby
|
3
|
-
def add_preamble(src)
|
4
|
-
src << "@_erb_out = _buf = '';"
|
5
|
-
end
|
6
|
-
|
7
|
-
class Context < Erubis::Context
|
8
|
-
include ::Ichiban::Helpers
|
9
|
-
include ::Erubis::XmlHelper
|
10
|
-
|
11
|
-
def layout_stack
|
12
|
-
@_layout_stack or ['default']
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/lib/ichiban/files.rb
DELETED
@@ -1,105 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
- Content file
|
3
|
-
- Stylesheet
|
4
|
-
- JS
|
5
|
-
- Image
|
6
|
-
|
7
|
-
...do each of these:
|
8
|
-
|
9
|
-
- Compile/copy one
|
10
|
-
- List all
|
11
|
-
- List stale
|
12
|
-
- Compile/copy all
|
13
|
-
- Compile/copy stale
|
14
|
-
=end
|
15
|
-
|
16
|
-
module Ichiban
|
17
|
-
class Compiler
|
18
|
-
def content_files
|
19
|
-
paths_in('content').reject { |path| path.directory? }
|
20
|
-
end
|
21
|
-
|
22
|
-
def data_files
|
23
|
-
paths_in 'data'
|
24
|
-
end
|
25
|
-
|
26
|
-
def helpers
|
27
|
-
paths_in 'helpers', 'rb'
|
28
|
-
end
|
29
|
-
|
30
|
-
def images
|
31
|
-
paths_in 'images'
|
32
|
-
end
|
33
|
-
|
34
|
-
def models
|
35
|
-
paths_in 'models', 'rb'
|
36
|
-
end
|
37
|
-
|
38
|
-
# Returns all stylesheet except for those beginning with an underscore
|
39
|
-
def stylesheets
|
40
|
-
paths_in('stylesheets').reject { |path| path.filename.start_with?('_') }
|
41
|
-
end
|
42
|
-
|
43
|
-
def javascripts
|
44
|
-
paths_in 'javascripts', 'js'
|
45
|
-
end
|
46
|
-
|
47
|
-
def scripts
|
48
|
-
paths_in 'scripts', 'rb'
|
49
|
-
end
|
50
|
-
|
51
|
-
# For the stale methods, we rely on the source-destination mapping as provided by mapping.rb.
|
52
|
-
|
53
|
-
def stale_content_files
|
54
|
-
stale(content_files) do |src_path|
|
55
|
-
content_dest(src_path)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def stale_images
|
60
|
-
stale(images) do |src_path|
|
61
|
-
image_dest(src_path)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def stale_stylesheets
|
66
|
-
stale(stylesheets) do |src_path|
|
67
|
-
stylesheet_dest(src_path)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def stale_javascripts
|
72
|
-
stale(javascripts) do |src_path|
|
73
|
-
javascript_dest(src_path)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
private
|
78
|
-
|
79
|
-
def paths_in(dir, ext = nil)
|
80
|
-
pattern = ext ? "**/*.#{ext}" : '**/*'
|
81
|
-
Dir.glob(File.join(Ichiban.project_root, dir, pattern)).collect { |abs| Path.new abs }
|
82
|
-
end
|
83
|
-
|
84
|
-
# This method accepts a block. The block will be passed a source file path and must return either a destination path or an array thereof.
|
85
|
-
def stale(source_paths)
|
86
|
-
source_paths.reject do |path|
|
87
|
-
dest = yield(path)
|
88
|
-
dest = [dest] unless dest.is_a?(Array)
|
89
|
-
up_to_date?(path, *dest)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# Accepts one source file and one or more destination files. Pass in Path objects.
|
94
|
-
# Note that this method is different from the one in FileUtils: The FileUtils version accepts
|
95
|
-
# one destination and multiple sources.
|
96
|
-
def up_to_date?(src, *dests)
|
97
|
-
src_time = File.mtime(src.abs)
|
98
|
-
dests.each do |dest|
|
99
|
-
return false if !File.exists?(dest.abs)
|
100
|
-
return false unless File.mtime(dest.abs) > src_time
|
101
|
-
end
|
102
|
-
true
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
data/lib/ichiban/layouts.rb
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
module Ichiban
|
2
|
-
module Layouts
|
3
|
-
def wrap_in_layouts(erb_context, html)
|
4
|
-
erb_context.layout_stack.reverse.inject(html) do |html, layout_name|
|
5
|
-
layout_path = Path.new(File.join(Ichiban.project_root, 'layouts', layout_name + '.html'))
|
6
|
-
ErbPage.new(File.read(layout_path.abs), :filename => layout_path.abs).evaluate(erb_context) { html }
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
data/lib/ichiban/loading.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
module Ichiban
|
2
|
-
class Compiler
|
3
|
-
def load_all_ruby_files
|
4
|
-
models.each { |path| load path.abs }
|
5
|
-
helpers.each { |path| load_helper path }
|
6
|
-
end
|
7
|
-
|
8
|
-
def load_helper(path)
|
9
|
-
load path.abs
|
10
|
-
mod_name = path.filename_without_ext.classify
|
11
|
-
begin
|
12
|
-
mod = Object.const_get(mod_name)
|
13
|
-
rescue NameError
|
14
|
-
raise "Expected #{path.abs} to define module #{classname}"
|
15
|
-
end
|
16
|
-
ErbPage::Context.send(:include, mod)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/lib/ichiban/mapping.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
module Ichiban
|
2
|
-
class Compiler
|
3
|
-
def content_dest(src_path)
|
4
|
-
if src_path.ext == 'markdown'
|
5
|
-
src_path = src_path.replace_ext('html')
|
6
|
-
end
|
7
|
-
Path.new(
|
8
|
-
File.join(Ichiban.project_root, 'compiled',
|
9
|
-
src_path.relative_from('content')
|
10
|
-
)
|
11
|
-
)
|
12
|
-
end
|
13
|
-
|
14
|
-
def image_dest(src_path)
|
15
|
-
Path.new(
|
16
|
-
File.join(Ichiban.project_root, 'compiled', 'images',
|
17
|
-
src_path.relative_from('images')
|
18
|
-
)
|
19
|
-
)
|
20
|
-
end
|
21
|
-
|
22
|
-
def javascript_dest(src_path)
|
23
|
-
Path.new(
|
24
|
-
File.join(Ichiban.project_root, 'compiled', 'javascripts',
|
25
|
-
src_path.relative_from('javascripts')
|
26
|
-
)
|
27
|
-
)
|
28
|
-
end
|
29
|
-
|
30
|
-
def stylesheet_dest(src_path)
|
31
|
-
Path.new(
|
32
|
-
File.join(Ichiban.project_root, 'compiled', 'stylesheets',
|
33
|
-
src_path.relative_from('stylesheets')
|
34
|
-
)
|
35
|
-
).replace_ext('css')
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/lib/ichiban/path.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
# A Path object is a wrapper around an absolute path.
|
2
|
-
|
3
|
-
class Path
|
4
|
-
attr_reader :abs
|
5
|
-
|
6
|
-
def directory?
|
7
|
-
File.directory?(abs)
|
8
|
-
end
|
9
|
-
|
10
|
-
def dirname
|
11
|
-
File.dirname(abs)
|
12
|
-
end
|
13
|
-
|
14
|
-
def ext
|
15
|
-
File.extname(abs).slice(1..-1)
|
16
|
-
end
|
17
|
-
|
18
|
-
def filename
|
19
|
-
File.basename(abs)
|
20
|
-
end
|
21
|
-
|
22
|
-
def filename_without_ext
|
23
|
-
File.basename(abs, File.extname(abs))
|
24
|
-
end
|
25
|
-
|
26
|
-
def initialize(abs)
|
27
|
-
@abs = abs
|
28
|
-
end
|
29
|
-
|
30
|
-
# Returns a string relative to the given folder
|
31
|
-
def relative_from(folder_in_project_root)
|
32
|
-
prefix = File.join(Ichiban.project_root, folder_in_project_root)
|
33
|
-
raise(ArgumentError, "#{abs} does not start with #{prefix}") unless abs.start_with?(prefix)
|
34
|
-
abs.slice(prefix.length..-1)
|
35
|
-
end
|
36
|
-
|
37
|
-
def replace_ext(new_ext)
|
38
|
-
self.class.new(abs.sub(/\..+$/, '.' + new_ext))
|
39
|
-
end
|
40
|
-
|
41
|
-
# Only meaningful for paths in the compiled directory. Returns a string representing the path from the web root.
|
42
|
-
# Assumes Ichiban's standard URL rewriting rules are in effect.
|
43
|
-
def web
|
44
|
-
web_path = relative_from('compiled')
|
45
|
-
if web_path.end_with?('.html')
|
46
|
-
if web_path.end_with?('index.html')
|
47
|
-
web_path.slice(0..-11) # Slice index.html off the end
|
48
|
-
else
|
49
|
-
web_path.slice(0..-6) + '/' # Slice .html off the end and add the trailing slash
|
50
|
-
end
|
51
|
-
else
|
52
|
-
web_path
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|