frank 0.3.0.beta → 0.3.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/frankup +1 -1
- data/frank.gemspec +2 -3
- data/lib/frank/base.rb +31 -13
- data/lib/frank/lorem.rb +1 -3
- data/lib/frank/templates/404.haml +0 -2
- data/lib/frank/tilt.rb +1 -0
- data/spec/base_spec.rb +0 -7
- data/spec/output_spec.rb +12 -12
- data/spec/render_spec.rb +50 -55
- metadata +3 -4
- data/spec/template/dynamic/coffee.coffee +0 -1
data/bin/frankup
CHANGED
@@ -41,7 +41,7 @@ if File.exist? 'settings.yml'
|
|
41
41
|
settings = YAML.load_file('settings.yml')
|
42
42
|
else
|
43
43
|
settings = {
|
44
|
-
:server => { 'handler' => 'mongrel', 'hostname' => '
|
44
|
+
:server => { 'handler' => 'mongrel', 'hostname' => '0.0.0.0', 'port' => 3601 },
|
45
45
|
:static_folder => '.',
|
46
46
|
:dynamic_folder => '.',
|
47
47
|
:environment => :serving
|
data/frank.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{frank}
|
8
|
-
s.version = "0.3.0.
|
8
|
+
s.version = "0.3.0.beta2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["blahed", "nwah"]
|
12
|
-
s.date = %q{2010-06-
|
12
|
+
s.date = %q{2010-06-18}
|
13
13
|
s.description = %q{Rapidly develop static sites using any supported templating language}
|
14
14
|
s.email = %q{travis.dunn@thisismedium.com}
|
15
15
|
s.executables = ["frank", "frankout", "frankup"]
|
@@ -65,7 +65,6 @@ Gem::Specification.new do |s|
|
|
65
65
|
"spec/template/dynamic/500.haml",
|
66
66
|
"spec/template/dynamic/_partial.haml",
|
67
67
|
"spec/template/dynamic/builder.builder",
|
68
|
-
"spec/template/dynamic/coffee.coffee",
|
69
68
|
"spec/template/dynamic/erb.erb",
|
70
69
|
"spec/template/dynamic/helper_test.haml",
|
71
70
|
"spec/template/dynamic/index.haml",
|
data/lib/frank/base.rb
CHANGED
@@ -6,7 +6,7 @@ require 'frank/middleware/imager'
|
|
6
6
|
require 'frank/middleware/refresh'
|
7
7
|
|
8
8
|
module Frank
|
9
|
-
VERSION = '0.3.0.
|
9
|
+
VERSION = '0.3.0.beta2'
|
10
10
|
|
11
11
|
module Render; end
|
12
12
|
|
@@ -83,9 +83,10 @@ module Frank
|
|
83
83
|
|
84
84
|
TMPL_EXTS = {
|
85
85
|
:html => %w[haml erb rhtml builder liquid mustache textile md mkd markdown],
|
86
|
-
:css => %w[sass less]
|
87
|
-
|
88
|
-
|
86
|
+
:css => %w[sass less scss]
|
87
|
+
}
|
88
|
+
|
89
|
+
LAYOUT_EXTS = %w[.haml .erb .rhtml .liquid .mustache]
|
89
90
|
|
90
91
|
# render request path or template path
|
91
92
|
def render(path)
|
@@ -97,7 +98,7 @@ module Frank
|
|
97
98
|
|
98
99
|
# regex for kinds that don't support meta
|
99
100
|
# and define the meta delimiter
|
100
|
-
nometa, delimiter = /\/_|\.(
|
101
|
+
nometa, delimiter = /\/_|\.(sass|less)$/, /^META-{3,}\n$/
|
101
102
|
|
102
103
|
# set the layout
|
103
104
|
layout = path.match(nometa) ? nil : layout_for(path)
|
@@ -164,21 +165,36 @@ module Frank
|
|
164
165
|
# reverse walks the layouts folder until we find a layout
|
165
166
|
# returns nil if layout is not found
|
166
167
|
def layout_for(path)
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
168
|
+
layout_exts = LAYOUT_EXTS.dup
|
169
|
+
ext = File.extname(path)
|
170
|
+
default = 'default' << layout_ext_or_first(layout_exts, ext)
|
171
|
+
file_path = path.sub(/\/[\w-]+\.[\w-]+$/, '')
|
172
|
+
folders = file_path.split('/')
|
173
|
+
|
171
174
|
until File.exist? File.join(@proj_dir, @layouts_folder, folders, default)
|
172
|
-
break if folders.empty?
|
173
|
-
|
175
|
+
break if layout_exts.empty? && folders.empty?
|
176
|
+
|
177
|
+
if layout_exts.empty?
|
178
|
+
layout_exts = LAYOUT_EXTS.dup
|
179
|
+
default = 'default' << layout_ext_or_first(layout_exts, ext)
|
180
|
+
folders.pop
|
181
|
+
else
|
182
|
+
default = 'default' << layout_exts.shift
|
183
|
+
end
|
174
184
|
end
|
175
|
-
|
176
|
-
if File.
|
185
|
+
|
186
|
+
if File.exists? File.join(@proj_dir, @layouts_folder, folders, default)
|
177
187
|
File.join(folders, default)
|
178
188
|
else
|
179
189
|
nil
|
180
190
|
end
|
181
191
|
end
|
192
|
+
|
193
|
+
# if the given ext is a layout ext, pop it off and return it
|
194
|
+
# otherwise return the first layout ext
|
195
|
+
def layout_ext_or_first(layout_exts, ext)
|
196
|
+
layout_exts.include?(ext) ? layout_exts.delete(ext) : layout_exts.first
|
197
|
+
end
|
182
198
|
|
183
199
|
# setup an object and extend it with TemplateHelpers and Render
|
184
200
|
# then send everything to tilt and get some template markup back
|
@@ -254,8 +270,10 @@ module Frank
|
|
254
270
|
def self.stub(project)
|
255
271
|
puts "\nFrank is...\n - \033[32mCreating\033[0m your project '#{project}'"
|
256
272
|
Dir.mkdir project
|
273
|
+
|
257
274
|
puts " - \033[32mCopying\033[0m Frank template"
|
258
275
|
FileUtils.cp_r( Dir.glob(File.join(LIBDIR, 'template/*')), project )
|
276
|
+
|
259
277
|
puts "\n \033[32mCongratulations, '#{project}' is ready to go!\033[0m"
|
260
278
|
rescue Errno::EEXIST
|
261
279
|
puts "\n \033[31muh oh, directory '#{project}' already exists...\033[0m"
|
data/lib/frank/lorem.rb
CHANGED
@@ -22,8 +22,6 @@
|
|
22
22
|
|
23
23
|
- if path.match(/\.css$/)
|
24
24
|
= "<tt>#{path.match(/([\w\/]+)\./)[1]}.sass</tt>"
|
25
|
-
- elsif path.match(/\.js$/)
|
26
|
-
= "<tt>#{path.match(/([\w\/]+)\./)[1]}.coffee</tt>"
|
27
25
|
- else
|
28
26
|
= "<tt>#{path.gsub(/\/$/, '')}.haml</tt>"
|
29
27
|
= "in the <tt>#{dynamic_folder}</tt> folder, or"
|
data/lib/frank/tilt.rb
CHANGED
data/spec/base_spec.rb
CHANGED
@@ -51,13 +51,6 @@ describe Frank::Base do
|
|
51
51
|
last_response.body.should == "#hello-worlds {\n background: red; }\n"
|
52
52
|
end
|
53
53
|
|
54
|
-
it 'renders dynamic javascript without a layout' do
|
55
|
-
get '/coffee.js'
|
56
|
-
|
57
|
-
last_response.should be_ok
|
58
|
-
last_response.body.should == "(function(){\n var greeting;\n greeting = \"Hello CoffeeScript\";\n})();"
|
59
|
-
end
|
60
|
-
|
61
54
|
it 'renders a 404 page if template not found' do
|
62
55
|
get '/not_here.css'
|
63
56
|
|
data/spec/output_spec.rb
CHANGED
@@ -51,32 +51,32 @@ describe Frank::Output do
|
|
51
51
|
|
52
52
|
it 'creates erb.html' do
|
53
53
|
output = File.join(File.dirname(__FILE__), 'template/output/erb.html')
|
54
|
-
File.read(output).should == "<h1>hello worlds</h1>\n
|
54
|
+
File.read(output).should == "<div id='p'>/erb</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'creates redcloth.html' do
|
58
58
|
output = File.join(File.dirname(__FILE__), 'template/output/redcloth.html')
|
59
|
-
File.read(output).should == "<h1>hello worlds</h1
|
59
|
+
File.read(output).should == "<div id='p'>/redcloth</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'creates markdown.html' do
|
63
63
|
output = File.join(File.dirname(__FILE__), 'template/output/markdown.html')
|
64
|
-
File.read(output).should == "<h1>hello worlds</h1>\n"
|
64
|
+
File.read(output).should == "<div id='p'>/markdown</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'creates mustache.html' do
|
68
68
|
output = File.join(File.dirname(__FILE__), 'template/output/mustache.html')
|
69
|
-
File.read(output).should == "<h1>hello worlds</h1>\n
|
69
|
+
File.read(output).should == "<div id='p'>/mustache</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'creates liquid.html' do
|
73
73
|
output = File.join(File.dirname(__FILE__), 'template/output/liquid.html')
|
74
|
-
File.read(output).should == "<h1>hello worlds</h1>\n"
|
74
|
+
File.read(output).should == "<div id='p'>/liquid</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
75
75
|
end
|
76
76
|
|
77
77
|
it 'creates builder.html' do
|
78
78
|
output = File.join(File.dirname(__FILE__), 'template/output/builder.html')
|
79
|
-
File.read(output).should == "<h1>hello worlds</h1>\n"
|
79
|
+
File.read(output).should == "<div id='p'>/builder</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
80
80
|
end
|
81
81
|
|
82
82
|
it 'copies static.html' do
|
@@ -158,32 +158,32 @@ describe Frank::Output do
|
|
158
158
|
|
159
159
|
it 'creates erb.html' do
|
160
160
|
output = File.join(File.dirname(__FILE__), 'template/output/erb/index.html')
|
161
|
-
File.read(output).should == "<h1>hello worlds</h1>\n
|
161
|
+
File.read(output).should == "<div id='p'>/erb</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
162
162
|
end
|
163
163
|
|
164
164
|
it 'creates redcloth.html' do
|
165
165
|
output = File.join(File.dirname(__FILE__), 'template/output/redcloth/index.html')
|
166
|
-
File.read(output).should == "<h1>hello worlds</h1
|
166
|
+
File.read(output).should == "<div id='p'>/redcloth</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
167
167
|
end
|
168
168
|
|
169
169
|
it 'creates markdown.html' do
|
170
170
|
output = File.join(File.dirname(__FILE__), 'template/output/markdown/index.html')
|
171
|
-
File.read(output).should == "<h1>hello worlds</h1>\n"
|
171
|
+
File.read(output).should == "<div id='p'>/markdown</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
172
172
|
end
|
173
173
|
|
174
174
|
it 'creates mustache.html' do
|
175
175
|
output = File.join(File.dirname(__FILE__), 'template/output/mustache/index.html')
|
176
|
-
File.read(output).should == "<h1>hello worlds</h1>\n
|
176
|
+
File.read(output).should == "<div id='p'>/mustache</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
177
177
|
end
|
178
178
|
|
179
179
|
it 'creates liquid.html' do
|
180
180
|
output = File.join(File.dirname(__FILE__), 'template/output/liquid/index.html')
|
181
|
-
File.read(output).should == "<h1>hello worlds</h1>\n"
|
181
|
+
File.read(output).should == "<div id='p'>/liquid</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
182
182
|
end
|
183
183
|
|
184
184
|
it 'creates builder.html' do
|
185
185
|
output = File.join(File.dirname(__FILE__), 'template/output/builder/index.html')
|
186
|
-
File.read(output).should == "<h1>hello worlds</h1>\n"
|
186
|
+
File.read(output).should == "<div id='p'>/builder</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
187
187
|
end
|
188
188
|
|
189
189
|
it 'copies static.html' do
|
data/spec/render_spec.rb
CHANGED
@@ -45,62 +45,57 @@ describe Frank::Render do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'renders a haml template with no layout' do
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
template = @app.render('no_layout.haml')
|
49
|
+
template.should == "<h1>i have no layout</h1>\n"
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'renders haml template' do
|
53
|
+
template = @app.render('index.haml')
|
54
|
+
template.should == "<div id='p'>/</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n <h2>/</h2>\n</div>\n"
|
55
|
+
end
|
51
56
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
it 'renders haml template with a haml partial' do
|
58
|
-
template = @app.render('partial_test.haml')
|
59
|
-
template.should == "<div id='p'>/partial_test</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n <p>hello from partial</p>\n</div>\n"
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'renders sass template' do
|
63
|
-
template = @app.render('sass.sass')
|
64
|
-
template.should == "#hello-worlds {\n background: red; }\n"
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'renders coffee template' do
|
68
|
-
template = @app.render('coffee.coffee')
|
69
|
-
template.should == "(function(){\n var greeting;\n greeting = \"Hello CoffeeScript\";\n})();"
|
70
|
-
end
|
57
|
+
it 'renders haml template with a haml partial' do
|
58
|
+
template = @app.render('partial_test.haml')
|
59
|
+
template.should == "<div id='p'>/partial_test</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n <p>hello from partial</p>\n</div>\n"
|
60
|
+
end
|
71
61
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
62
|
+
it 'renders sass template' do
|
63
|
+
template = @app.render('sass.sass')
|
64
|
+
template.should == "#hello-worlds {\n background: red; }\n"
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'renders erb template' do
|
68
|
+
template = @app.render('erb.erb')
|
69
|
+
template.should == "<div id='p'>/erb</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'renders redcloth template' do
|
73
|
+
template = @app.render('redcloth.textile')
|
74
|
+
template.should == "<div id='p'>/redcloth</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'renders rdiscount template' do
|
78
|
+
template = @app.render('markdown.md')
|
79
|
+
template.should == "<div id='p'>/markdown</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'renders mustache template' do
|
83
|
+
template = @app.render('mustache.mustache')
|
84
|
+
template.should == "<div id='p'>/mustache</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'renders liquid template' do
|
88
|
+
template = @app.render('liquid.liquid')
|
89
|
+
template.should == "<div id='p'>/liquid</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'renders builder template' do
|
93
|
+
template = @app.render('builder.builder')
|
94
|
+
template.should == "<div id='p'>/builder</div>\n<div id='layout'>\n <h1>hello worlds</h1>\n</div>\n"
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'raise template error' do
|
98
|
+
lambda { @app.render('not_a.template') }.should raise_error(Frank::TemplateError)
|
99
|
+
end
|
105
100
|
|
106
101
|
end
|
metadata
CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
|
|
6
6
|
- 0
|
7
7
|
- 3
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.3.0.
|
9
|
+
- beta2
|
10
|
+
version: 0.3.0.beta2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- blahed
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-06-
|
19
|
+
date: 2010-06-18 00:00:00 -04:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -142,7 +142,6 @@ files:
|
|
142
142
|
- spec/template/dynamic/500.haml
|
143
143
|
- spec/template/dynamic/_partial.haml
|
144
144
|
- spec/template/dynamic/builder.builder
|
145
|
-
- spec/template/dynamic/coffee.coffee
|
146
145
|
- spec/template/dynamic/erb.erb
|
147
146
|
- spec/template/dynamic/helper_test.haml
|
148
147
|
- spec/template/dynamic/index.haml
|
@@ -1 +0,0 @@
|
|
1
|
-
greeting: "Hello CoffeeScript"
|