frank 0.3.2 → 0.4.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/.gitignore +4 -1
- data/Gemfile +27 -0
- data/Gemfile.lock +90 -0
- data/README.md +30 -31
- data/Rakefile +5 -4
- data/bin/frank +125 -7
- data/bin/frankout +24 -14
- data/bin/frankup +36 -38
- data/frank.gemspec +27 -18
- data/lib/frank/base.rb +139 -91
- data/lib/frank/lorem.rb +34 -23
- data/lib/frank/middleware/refresh.rb +6 -7
- data/lib/frank/output.rb +19 -19
- data/lib/frank/rescue.rb +14 -14
- data/lib/frank/settings.rb +52 -0
- data/lib/frank/tilt_setup.rb +58 -0
- data/lib/frank/upgrades.rb +90 -0
- data/lib/frank.rb +44 -0
- data/lib/template/dynamic/index.haml +2 -2
- data/lib/template/{settings.yml → setup.rb} +14 -8
- data/lib/template/static/favicon.ico +0 -0
- data/spec/base_spec.rb +30 -30
- data/spec/helper.rb +3 -1
- data/spec/output_spec.rb +42 -42
- data/spec/render_spec.rb +35 -28
- data/spec/template/dynamic/500.haml +1 -1
- data/spec/template/dynamic/lorem_test.haml +5 -1
- data/spec/template/dynamic/setting_in_layout.haml +2 -0
- data/spec/template/dynamic/{sass.sass → stylesheets/sass.sass} +0 -0
- data/spec/template/dynamic/stylesheets/sass_with_compass.sass +1 -0
- data/spec/template/dynamic/stylesheets/scss_with_compass.scss +5 -0
- data/spec/template/helpers.rb +5 -0
- data/spec/template/layouts/default.haml +2 -0
- data/spec/template/setup.rb +1 -0
- data/spec/template_helpers_spec.rb +29 -23
- metadata +45 -17
- data/lib/frank/tilt.rb +0 -794
- data/spec/template/settings.yml +0 -45
data/frank.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{frank}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["blahed", "nwah"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-09-02}
|
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"]
|
@@ -20,6 +20,8 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.files = [
|
21
21
|
".gitignore",
|
22
22
|
"Featurelist",
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
23
25
|
"LICENSE",
|
24
26
|
"README.md",
|
25
27
|
"Rakefile",
|
@@ -35,6 +37,7 @@ Gem::Specification.new do |s|
|
|
35
37
|
"lib/frank/middleware/statik.rb",
|
36
38
|
"lib/frank/output.rb",
|
37
39
|
"lib/frank/rescue.rb",
|
40
|
+
"lib/frank/settings.rb",
|
38
41
|
"lib/frank/template_helpers.rb",
|
39
42
|
"lib/frank/templates/404.haml",
|
40
43
|
"lib/frank/templates/500.haml",
|
@@ -50,12 +53,14 @@ Gem::Specification.new do |s|
|
|
50
53
|
"lib/frank/templates/imager/frank7.jpg",
|
51
54
|
"lib/frank/templates/imager/frank8.jpg",
|
52
55
|
"lib/frank/templates/imager/frank9.jpg",
|
53
|
-
"lib/frank/
|
56
|
+
"lib/frank/tilt_setup.rb",
|
57
|
+
"lib/frank/upgrades.rb",
|
54
58
|
"lib/template/dynamic/css/frank.sass",
|
55
59
|
"lib/template/dynamic/index.haml",
|
56
60
|
"lib/template/helpers.rb",
|
57
61
|
"lib/template/layouts/default.haml",
|
58
|
-
"lib/template/
|
62
|
+
"lib/template/setup.rb",
|
63
|
+
"lib/template/static/favicon.ico",
|
59
64
|
"lib/template/static/images/frank-med.png",
|
60
65
|
"lib/template/static/js/frank.js",
|
61
66
|
"spec/base_spec.rb",
|
@@ -82,19 +87,22 @@ Gem::Specification.new do |s|
|
|
82
87
|
"spec/template/dynamic/partial_test.haml",
|
83
88
|
"spec/template/dynamic/redcloth.textile",
|
84
89
|
"spec/template/dynamic/refresh.haml",
|
85
|
-
"spec/template/dynamic/
|
90
|
+
"spec/template/dynamic/setting_in_layout.haml",
|
91
|
+
"spec/template/dynamic/stylesheets/sass.sass",
|
92
|
+
"spec/template/dynamic/stylesheets/sass_with_compass.sass",
|
93
|
+
"spec/template/dynamic/stylesheets/scss_with_compass.scss",
|
86
94
|
"spec/template/helpers.rb",
|
87
95
|
"spec/template/layouts/default.haml",
|
88
96
|
"spec/template/layouts/explicit/layout2.haml",
|
89
97
|
"spec/template/layouts/nested/default.haml",
|
90
|
-
"spec/template/
|
98
|
+
"spec/template/setup.rb",
|
91
99
|
"spec/template/static/files/static.html",
|
92
100
|
"spec/template_helpers_spec.rb"
|
93
101
|
]
|
94
102
|
s.homepage = %q{http://github.com/blahed/frank}
|
95
103
|
s.rdoc_options = ["--charset=UTF-8"]
|
96
104
|
s.require_paths = ["lib"]
|
97
|
-
s.rubygems_version = %q{1.3.
|
105
|
+
s.rubygems_version = %q{1.3.7}
|
98
106
|
s.summary = %q{Static Site Non-Framework}
|
99
107
|
s.test_files = [
|
100
108
|
"spec/base_spec.rb",
|
@@ -102,6 +110,7 @@ Gem::Specification.new do |s|
|
|
102
110
|
"spec/output_spec.rb",
|
103
111
|
"spec/render_spec.rb",
|
104
112
|
"spec/template/helpers.rb",
|
113
|
+
"spec/template/setup.rb",
|
105
114
|
"spec/template_helpers_spec.rb"
|
106
115
|
]
|
107
116
|
|
@@ -109,24 +118,24 @@ Gem::Specification.new do |s|
|
|
109
118
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
110
119
|
s.specification_version = 3
|
111
120
|
|
112
|
-
if Gem::Version.new(Gem::
|
121
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
113
122
|
s.add_runtime_dependency(%q<rack>, [">= 1.0"])
|
114
|
-
s.add_runtime_dependency(%q<
|
115
|
-
s.add_runtime_dependency(%q<
|
116
|
-
s.add_development_dependency(%q<rspec>, [">= 0"])
|
123
|
+
s.add_runtime_dependency(%q<haml>, [">= 3.0"])
|
124
|
+
s.add_runtime_dependency(%q<tilt>, ["= 0.9"])
|
125
|
+
s.add_development_dependency(%q<rspec>, [">= 2.0.0.beta.19"])
|
117
126
|
s.add_development_dependency(%q<rack-test>, [">= 0.5"])
|
118
127
|
else
|
119
128
|
s.add_dependency(%q<rack>, [">= 1.0"])
|
120
|
-
s.add_dependency(%q<
|
121
|
-
s.add_dependency(%q<
|
122
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
129
|
+
s.add_dependency(%q<haml>, [">= 3.0"])
|
130
|
+
s.add_dependency(%q<tilt>, ["= 0.9"])
|
131
|
+
s.add_dependency(%q<rspec>, [">= 2.0.0.beta.19"])
|
123
132
|
s.add_dependency(%q<rack-test>, [">= 0.5"])
|
124
133
|
end
|
125
134
|
else
|
126
135
|
s.add_dependency(%q<rack>, [">= 1.0"])
|
127
|
-
s.add_dependency(%q<
|
128
|
-
s.add_dependency(%q<
|
129
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
136
|
+
s.add_dependency(%q<haml>, [">= 3.0"])
|
137
|
+
s.add_dependency(%q<tilt>, ["= 0.9"])
|
138
|
+
s.add_dependency(%q<rspec>, [">= 2.0.0.beta.19"])
|
130
139
|
s.add_dependency(%q<rack-test>, [">= 0.5"])
|
131
140
|
end
|
132
141
|
end
|
data/lib/frank/base.rb
CHANGED
@@ -1,37 +1,30 @@
|
|
1
|
-
require 'frank/
|
1
|
+
require 'frank/tilt_setup'
|
2
2
|
require 'frank/template_helpers'
|
3
3
|
require 'frank/rescue'
|
4
|
+
require 'frank/upgrades'
|
4
5
|
require 'frank/middleware/statik'
|
5
|
-
require 'frank/middleware/imager'
|
6
6
|
require 'frank/middleware/refresh'
|
7
7
|
|
8
8
|
module Frank
|
9
|
-
VERSION = '0.
|
10
|
-
|
9
|
+
VERSION = '0.4.0'
|
10
|
+
extend Frank::Upgrades
|
11
|
+
|
11
12
|
module Render; end
|
12
|
-
|
13
|
+
|
13
14
|
class Base
|
14
15
|
include Rack::Utils
|
15
16
|
include Frank::Rescue
|
16
17
|
include Frank::TemplateHelpers
|
17
18
|
include Frank::Render
|
18
|
-
|
19
|
-
attr_accessor :environment
|
20
|
-
attr_accessor :proj_dir
|
21
|
-
attr_accessor :server
|
22
|
-
attr_accessor :static_folder
|
23
|
-
attr_accessor :dynamic_folder
|
24
|
-
attr_accessor :layouts_folder
|
25
|
-
attr_accessor :templates
|
26
|
-
|
19
|
+
|
27
20
|
def initialize(&block)
|
28
|
-
instance_eval
|
21
|
+
instance_eval(&block) if block_given?
|
29
22
|
end
|
30
23
|
|
31
24
|
def call(env)
|
32
25
|
dup.call!(env)
|
33
26
|
end
|
34
|
-
|
27
|
+
|
35
28
|
def call!(env)
|
36
29
|
@env = env
|
37
30
|
@request = Rack::Request.new(env)
|
@@ -40,20 +33,20 @@ module Frank
|
|
40
33
|
@response.close
|
41
34
|
@response.finish
|
42
35
|
end
|
43
|
-
|
36
|
+
|
44
37
|
private
|
45
|
-
|
38
|
+
|
46
39
|
# setter for options
|
47
|
-
def set(option, value)
|
40
|
+
def set(option, value)
|
48
41
|
if respond_to?("#{option}=")
|
49
42
|
send "#{option}=", value
|
50
43
|
end
|
51
44
|
end
|
52
|
-
|
45
|
+
|
53
46
|
# attempt to render with the request path,
|
54
47
|
# if it cannot be found, render error page
|
55
48
|
def process
|
56
|
-
load_helpers
|
49
|
+
load_helpers
|
57
50
|
@response['Content-Type'] = Rack::Mime.mime_type(File.extname(@request.path), 'text/html')
|
58
51
|
@response.write render(@request.path)
|
59
52
|
rescue Frank::TemplateError
|
@@ -61,53 +54,52 @@ module Frank
|
|
61
54
|
rescue Exception => e
|
62
55
|
render_500 e
|
63
56
|
end
|
64
|
-
|
57
|
+
|
65
58
|
# prints requests and errors to STDOUT
|
66
59
|
def log_request(status, excp = nil)
|
67
60
|
out = "\033[1m[#{Time.now.strftime('%Y-%m-%d %H:%M')}]\033[22m (#{@request.request_method}) http://#{@request.host}:#{@request.port}#{@request.fullpath} - #{status}"
|
68
61
|
out << "\n\n#{excp.message}\n\n#{excp.backtrace.join("\n")} " if excp
|
69
62
|
puts out
|
70
63
|
end
|
71
|
-
|
64
|
+
|
72
65
|
def load_helpers
|
73
|
-
helpers = File.join(
|
66
|
+
helpers = File.join(Frank.root, 'helpers.rb')
|
74
67
|
if File.exist? helpers
|
75
|
-
load helpers
|
68
|
+
load helpers
|
76
69
|
Frank::TemplateHelpers.class_eval("include FrankHelpers")
|
77
70
|
end
|
78
71
|
end
|
79
|
-
|
80
72
|
end
|
81
|
-
|
73
|
+
|
82
74
|
module Render
|
83
|
-
|
84
|
-
TMPL_EXTS = {
|
75
|
+
|
76
|
+
TMPL_EXTS = {
|
85
77
|
:html => %w[haml erb rhtml builder liquid mustache textile md mkd markdown],
|
86
78
|
:css => %w[sass less scss]
|
87
79
|
}
|
88
|
-
|
80
|
+
|
89
81
|
LAYOUT_EXTS = %w[.haml .erb .rhtml .liquid .mustache]
|
90
|
-
|
82
|
+
|
91
83
|
# render request path or template path
|
92
84
|
def render(path, partial = false, local_vars = nil)
|
93
85
|
@current_path = path unless partial
|
94
|
-
|
86
|
+
|
95
87
|
# normalize the path
|
96
88
|
path.sub!(/^\/?(.*)$/, '/\1')
|
97
89
|
path.sub!(/\/$/, '/index.html')
|
98
90
|
path.sub!(/(\/[\w-]+)$/, '\1.html')
|
99
91
|
path = to_file_path(path) if defined? @request or path.match(/\/_[^\/]+$/)
|
100
|
-
|
92
|
+
|
101
93
|
# regex for kinds that don't support meta
|
102
94
|
# and define the meta delimiter
|
103
|
-
nometa, delimiter = /\/_|\.(sass|less)$/, /^META-{3,}\s*$|^-{3,}META\s*$/
|
104
|
-
|
95
|
+
nometa, delimiter = /\/_|\.(scss|sass|less)$/, /^META-{3,}\s*$|^-{3,}META\s*$/
|
96
|
+
|
105
97
|
# set the layout
|
106
98
|
layout = path.match(nometa) ? nil : layout_for(path)
|
107
|
-
|
108
|
-
template_path = File.join(
|
99
|
+
|
100
|
+
template_path = File.join(Frank.root, Frank.dynamic_folder, path)
|
109
101
|
raise Frank::TemplateError, "Template not found #{template_path}" unless File.exist? template_path
|
110
|
-
|
102
|
+
|
111
103
|
# read in the template
|
112
104
|
# check for meta and parse it if it exists
|
113
105
|
template = File.read(template_path) << "\n"
|
@@ -117,42 +109,50 @@ module Frank
|
|
117
109
|
|
118
110
|
# use given layout if defined as a meta field
|
119
111
|
layout = locals[:layout] == 'nil' ? nil : locals[:layout] if locals.has_key?(:layout)
|
120
|
-
|
112
|
+
|
113
|
+
page = setup_page
|
114
|
+
|
121
115
|
# let tilt determine the template handler
|
122
116
|
# and return some template markup
|
123
117
|
if layout.nil?
|
124
|
-
tilt(ext, template, locals)
|
118
|
+
tilt(page, ext, template, locals)
|
125
119
|
else
|
126
|
-
layout_path = File.join(
|
120
|
+
layout_path = File.join(Frank.root, Frank.layouts_folder, layout)
|
127
121
|
# add layout_path to locals
|
128
122
|
raise Frank::TemplateError, "Layout not found #{layout_path}" unless File.exist? layout_path
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
123
|
+
|
124
|
+
# original
|
125
|
+
# tilt(File.extname(layout), layout_path, locals) do
|
126
|
+
# tilt(ext, template, locals)
|
127
|
+
# end
|
128
|
+
|
129
|
+
page_content = tilt(page, ext, template, locals)
|
130
|
+
tilt(page, File.extname(layout), layout_path, locals) do
|
131
|
+
page_content
|
132
|
+
end
|
133
133
|
end
|
134
134
|
end
|
135
|
-
|
135
|
+
|
136
136
|
# converts a request path to a template path
|
137
137
|
def to_file_path(path)
|
138
138
|
file_name = File.basename(path, File.extname(path))
|
139
139
|
file_ext = File.extname(path).sub(/^\./, '')
|
140
|
-
folder = File.join(
|
140
|
+
folder = File.join(Frank.root, Frank.dynamic_folder)
|
141
141
|
engine = nil
|
142
|
-
|
142
|
+
|
143
143
|
TMPL_EXTS.each do |ext, engines|
|
144
144
|
if ext.to_s == file_ext
|
145
145
|
engine = engines.reject do |eng|
|
146
146
|
!File.exist? File.join(folder, path.sub(/\.[\w-]+$/, ".#{eng}"))
|
147
|
-
end.first
|
147
|
+
end.first
|
148
148
|
end
|
149
149
|
end
|
150
|
-
|
150
|
+
|
151
151
|
raise Frank::TemplateError, "Template not found #{path}" if engine.nil?
|
152
|
-
|
152
|
+
|
153
153
|
path.sub(/\.[\w-]+$/, ".#{engine}")
|
154
154
|
end
|
155
|
-
|
155
|
+
|
156
156
|
# lookup the original ext for given template path
|
157
157
|
# TODO: make non-ugly
|
158
158
|
def ext_from_handler(extension)
|
@@ -162,8 +162,8 @@ module Frank
|
|
162
162
|
end
|
163
163
|
orig_ext
|
164
164
|
end
|
165
|
-
|
166
|
-
|
165
|
+
|
166
|
+
|
167
167
|
# reverse walks the layouts folder until we find a layout
|
168
168
|
# returns nil if layout is not found
|
169
169
|
def layout_for(path)
|
@@ -172,10 +172,10 @@ module Frank
|
|
172
172
|
default = 'default' << layout_ext_or_first(layout_exts, ext)
|
173
173
|
file_path = path.sub(/\/[\w-]+\.[\w-]+$/, '')
|
174
174
|
folders = file_path.split('/')
|
175
|
-
|
176
|
-
until File.exist? File.join(
|
175
|
+
|
176
|
+
until File.exist? File.join(Frank.root, Frank.layouts_folder, folders, default)
|
177
177
|
break if layout_exts.empty? && folders.empty?
|
178
|
-
|
178
|
+
|
179
179
|
if layout_exts.empty?
|
180
180
|
layout_exts = LAYOUT_EXTS.dup
|
181
181
|
default = 'default' << layout_ext_or_first(layout_exts, ext)
|
@@ -184,37 +184,48 @@ module Frank
|
|
184
184
|
default = 'default' << layout_exts.shift
|
185
185
|
end
|
186
186
|
end
|
187
|
-
|
188
|
-
if File.exists? File.join(
|
187
|
+
|
188
|
+
if File.exists? File.join(Frank.root, Frank.layouts_folder, folders, default)
|
189
189
|
File.join(folders, default)
|
190
190
|
else
|
191
191
|
nil
|
192
192
|
end
|
193
193
|
end
|
194
|
-
|
194
|
+
|
195
195
|
# if the given ext is a layout ext, pop it off and return it
|
196
196
|
# otherwise return the first layout ext
|
197
197
|
def layout_ext_or_first(layout_exts, ext)
|
198
198
|
layout_exts.include?(ext) ? layout_exts.delete(ext) : layout_exts.first
|
199
199
|
end
|
200
|
-
|
201
|
-
#
|
202
|
-
|
203
|
-
|
204
|
-
|
200
|
+
|
201
|
+
# render a page using tilt and get the result template markup back
|
202
|
+
def tilt(page, ext, source, locals={}, &block)
|
203
|
+
Tilt[ext].new do
|
204
|
+
source = source.to_str if source.respond_to?(:to_str)
|
205
|
+
if source.match(/^[^\n]+$/) && File.exist?(source)
|
206
|
+
File.read(source)
|
207
|
+
else
|
208
|
+
source
|
209
|
+
end
|
210
|
+
end.render(page, locals=locals, &block)
|
211
|
+
end
|
212
|
+
|
213
|
+
# setup a new page object to be rendered
|
214
|
+
def setup_page
|
215
|
+
page = Object.new.extend(TemplateHelpers).extend(Render)
|
205
216
|
instance_variables.each do |var|
|
206
217
|
unless ['@response', '@env'].include? var
|
207
|
-
|
218
|
+
page.instance_variable_set(var.intern, instance_variable_get(var))
|
208
219
|
end
|
209
220
|
end
|
210
|
-
|
221
|
+
page
|
211
222
|
end
|
212
|
-
|
223
|
+
|
213
224
|
private
|
214
|
-
|
225
|
+
|
215
226
|
# parse the given meta string with yaml
|
216
227
|
# set the current_path local
|
217
|
-
def parse_meta_and_set_locals(meta, locals = nil)
|
228
|
+
def parse_meta_and_set_locals(meta, locals = nil)
|
218
229
|
# parse yaml and symbolize keys
|
219
230
|
if meta.nil?
|
220
231
|
meta = {}
|
@@ -223,57 +234,94 @@ module Frank
|
|
223
234
|
options[(key.to_sym rescue key) || key] = value
|
224
235
|
options
|
225
236
|
end
|
226
|
-
end
|
237
|
+
end
|
227
238
|
meta.merge!(locals) unless locals.nil?
|
228
239
|
meta[:current_path] = @current_path.sub(/\.[\w-]+$/, '').sub(/\/index/, '/')
|
229
|
-
|
240
|
+
|
230
241
|
meta
|
231
242
|
end
|
232
|
-
|
233
243
|
end
|
234
|
-
|
244
|
+
|
245
|
+
# Bootstrap will set up Frank up at a root path, and read in the setup.rb
|
246
|
+
def self.bootstrap(new_root = nil)
|
247
|
+
Frank.reset
|
248
|
+
Frank.root = new_root if new_root
|
249
|
+
|
250
|
+
# setup compass
|
251
|
+
begin
|
252
|
+
require 'compass'
|
253
|
+
|
254
|
+
Compass.configuration do |config|
|
255
|
+
# project_path should be the directory to which the sass directory is relative.
|
256
|
+
# I think maybe this should be one more directory up from the configuration file.
|
257
|
+
# Please update this if it is or remove this message if it can stay the way it is.
|
258
|
+
config.project_path = Frank.root
|
259
|
+
config.sass_dir = File.join('dynamic', 'stylesheets')
|
260
|
+
end
|
261
|
+
|
262
|
+
# sass_engine_options returns a hash, you can merge it with other options.
|
263
|
+
Frank.sass_options = Compass.sass_engine_options
|
264
|
+
rescue LoadError
|
265
|
+
# ignore if compass is not there
|
266
|
+
end
|
267
|
+
|
268
|
+
# try to pull in setup
|
269
|
+
setup = File.join(Frank.root, 'setup.rb')
|
270
|
+
if File.exists?(setup)
|
271
|
+
load setup
|
272
|
+
end
|
273
|
+
|
274
|
+
end
|
275
|
+
|
235
276
|
# starts the server
|
236
277
|
def self.new(&block)
|
237
|
-
base = Base.new(&block)
|
238
|
-
|
278
|
+
base = Base.new(&block)
|
279
|
+
|
239
280
|
builder = Rack::Builder.new do
|
240
|
-
use Frank::Middleware::Statik, :root =>
|
241
|
-
use Frank::Middleware::
|
242
|
-
use Frank::Middleware::Refresh, :watch => [ base.dynamic_folder, base.static_folder, base.layouts_folder ]
|
281
|
+
use Frank::Middleware::Statik, :root => Frank.static_folder
|
282
|
+
use Frank::Middleware::Refresh, :watch => [ Frank.dynamic_folder, Frank.static_folder, Frank.layouts_folder ]
|
243
283
|
run base
|
244
284
|
end
|
245
285
|
|
246
|
-
unless
|
286
|
+
unless Frank.environment == :test
|
247
287
|
m = "got it under control \n got your back \n holdin' it down
|
248
288
|
takin' care of business \n workin' some magic".split("\n").sort_by{rand}.first.strip
|
249
289
|
puts "\n-----------------------\n" +
|
250
290
|
" Frank's #{ m }...\n" +
|
251
|
-
" #{
|
252
|
-
|
253
|
-
|
254
|
-
|
291
|
+
" #{Frank.server.hostname}:#{Frank.server.port} \n\n"
|
292
|
+
|
293
|
+
begin
|
294
|
+
server = Rack::Handler.get(Frank.server.handler)
|
295
|
+
rescue LoadError
|
296
|
+
puts "\n\nUnable to find handler for: #{Frank.server.handler}"
|
297
|
+
puts "\nUse `gem install \"#{Frank.server.handler}\"` to install it"
|
298
|
+
puts "\nDefaulting to using webrick"
|
299
|
+
server = Rack::Handler.get("webrick")
|
300
|
+
end
|
301
|
+
|
302
|
+
server.run(builder, :Port => Frank.server.port, :Host => Frank.server.hostname) do
|
255
303
|
trap(:INT) { puts "\n\n-----------------------\n Show's over, fellas.\n\n"; exit }
|
256
304
|
end
|
257
305
|
end
|
258
|
-
|
306
|
+
|
259
307
|
base
|
260
|
-
|
308
|
+
|
261
309
|
rescue Errno::EADDRINUSE
|
262
|
-
puts " Hold on a second... Frank works alone.\n \033[31mSomething's already using port #{
|
310
|
+
puts " Hold on a second... Frank works alone.\n \033[31mSomething's already using port #{Frank.server.port}\033[0m\n\n"
|
263
311
|
end
|
264
|
-
|
312
|
+
|
265
313
|
# copies over the generic project template
|
266
314
|
def self.stub(project)
|
267
315
|
puts "\nFrank is...\n - \033[32mCreating\033[0m your project '#{project}'"
|
268
316
|
Dir.mkdir project
|
269
|
-
|
317
|
+
|
270
318
|
puts " - \033[32mCopying\033[0m Frank template"
|
271
319
|
FileUtils.cp_r( Dir.glob(File.join(LIBDIR, 'template/*')), project )
|
272
|
-
|
320
|
+
|
273
321
|
puts "\n \033[32mCongratulations, '#{project}' is ready to go!\033[0m"
|
274
322
|
rescue Errno::EEXIST
|
275
323
|
puts "\n \033[31muh oh, directory '#{project}' already exists...\033[0m"
|
276
324
|
exit
|
277
325
|
end
|
278
|
-
|
326
|
+
|
279
327
|
end
|
data/lib/frank/lorem.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
module Frank
|
2
2
|
class Lorem
|
3
3
|
WORDS = %w(alias consequatur aut perferendis sit voluptatem accusantium doloremque aperiam eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo aspernatur aut odit aut fugit sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt neque dolorem ipsum quia dolor sit amet consectetur adipisci velit sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem ut enim ad minima veniam quis nostrum exercitationem ullam corporis nemo enim ipsam voluptatem quia voluptas sit suscipit laboriosam nisi ut aliquid ex ea commodi consequatur quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae et iusto odio dignissimos ducimus qui blanditiis praesentium laudantium totam rem voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident sed ut perspiciatis unde omnis iste natus error similique sunt in culpa qui officia deserunt mollitia animi id est laborum et dolorum fuga et harum quidem rerum facilis est et expedita distinctio nam libero tempore cum soluta nobis est eligendi optio cumque nihil impedit quo porro quisquam est qui minus id quod maxime placeat facere possimus omnis voluptas assumenda est omnis dolor repellendus temporibus autem quibusdam et aut consequatur vel illum qui dolorem eum fugiat quo voluptas nulla pariatur at vero eos et accusamus officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae itaque earum rerum hic tenetur a sapiente delectus ut aut reiciendis voluptatibus maiores doloribus asperiores repellat)
|
4
|
-
|
4
|
+
|
5
5
|
def initialize(environment)
|
6
6
|
@environment = environment
|
7
|
-
|
7
|
+
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
def word(replacement = nil)
|
11
11
|
words 1, replacement
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def words(total, replacement = nil)
|
15
15
|
if @environment == :output && replacement
|
16
16
|
replacement
|
@@ -35,7 +35,7 @@ module Frank
|
|
35
35
|
end.join('. ')
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
def paragraph(replacement = nil)
|
40
40
|
paragraphs 1, replacement
|
41
41
|
end
|
@@ -49,7 +49,7 @@ module Frank
|
|
49
49
|
end.join("\n\n")
|
50
50
|
end
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
def date(fmt = '%a %b %d, %Y', replacement = nil)
|
54
54
|
if @environment == :output && replacement
|
55
55
|
replacement
|
@@ -60,7 +60,7 @@ module Frank
|
|
60
60
|
Time.local(y,m,d).strftime(fmt)
|
61
61
|
end
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
def name(replacement = nil)
|
65
65
|
if @environment == :output && replacement
|
66
66
|
replacement
|
@@ -68,7 +68,7 @@ module Frank
|
|
68
68
|
"#{first_name} #{last_name}"
|
69
69
|
end
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
def first_name(replacement = nil)
|
73
73
|
if @environment == :output && replacement
|
74
74
|
replacement
|
@@ -77,7 +77,7 @@ module Frank
|
|
77
77
|
names[rand(names.size)]
|
78
78
|
end
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
def last_name(replacement = nil)
|
82
82
|
if @environment == :output && replacement
|
83
83
|
replacement
|
@@ -91,31 +91,42 @@ module Frank
|
|
91
91
|
if @environment == :output && replacement
|
92
92
|
replacement
|
93
93
|
else
|
94
|
-
delimiters = ['_','-','']
|
95
|
-
domains = %w(gmail.com yahoo.com hotmail.com email.com live.com me.com mac.com aol.com fastmail.com mail.com)
|
94
|
+
delimiters = [ '_', '-', '' ]
|
95
|
+
domains = %w(gmail.com yahoo.com hotmail.com email.com live.com me.com mac.com aol.com fastmail.com mail.com)
|
96
96
|
username = name.gsub(/[^\w]/, delimiters[rand(delimiters.size)])
|
97
97
|
"#{username}@#{domains[rand(domains.size)]}".downcase
|
98
98
|
end
|
99
99
|
end
|
100
|
-
|
101
|
-
def image(
|
102
|
-
if @environment == :output && replacement
|
103
|
-
replacement
|
100
|
+
|
101
|
+
def image(size, options)
|
102
|
+
if @environment == :output && options[:replacement]
|
103
|
+
options[:replacement]
|
104
104
|
else
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
105
|
+
src = "http://placehold.it/#{size}"
|
106
|
+
hex = %w[a b c d e f 0 1 2 3 4 5 6 7 8 9]
|
107
|
+
background_color = options[:background_color]
|
108
|
+
color = options[:color]
|
109
|
+
|
110
|
+
if options[:random_color]
|
111
|
+
background_color = hex.shuffle[0...6].join
|
112
|
+
color = hex.shuffle[0...6].join
|
109
113
|
end
|
114
|
+
|
115
|
+
src << "/#{background_color.sub(/^#/, '')}" if background_color
|
116
|
+
src << "/ccc" if background_color.nil? && color
|
117
|
+
src << "/#{color.sub(/^#/, '')}" if color
|
118
|
+
src << "&text=#{Rack::Utils::escape(options[:text])}" if options[:text]
|
119
|
+
|
120
|
+
src
|
110
121
|
end
|
111
122
|
end
|
112
|
-
|
123
|
+
|
113
124
|
private
|
114
|
-
|
125
|
+
|
115
126
|
def randm(range)
|
116
127
|
a = range.to_a
|
117
128
|
a[rand(a.length)]
|
118
129
|
end
|
119
|
-
|
130
|
+
|
120
131
|
end
|
121
|
-
end
|
132
|
+
end
|