hoboken 0.0.1.beta2 → 0.0.1.beta3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/Rakefile +11 -4
- data/lib/hoboken.rb +102 -221
- data/lib/hoboken/add_ons/heroku.rb +40 -0
- data/lib/hoboken/add_ons/internationalization.rb +24 -0
- data/lib/hoboken/add_ons/metrics.rb +34 -0
- data/lib/hoboken/add_ons/sprockets.rb +97 -0
- data/lib/hoboken/generate.rb +33 -15
- data/lib/hoboken/templates/Gemfile.erb.tt +2 -0
- data/lib/hoboken/templates/Rakefile.tt +6 -1
- data/lib/hoboken/templates/config.ru.tt +2 -0
- data/lib/hoboken/templates/gitignore +1 -0
- data/lib/hoboken/templates/sequel.rake +19 -0
- data/lib/hoboken/templates/test/support/rack_test_assertions.rb.tt +15 -2
- data/lib/hoboken/templates/test/{unit/test_helper.rb.tt → test_helper.rb.tt} +5 -2
- data/lib/hoboken/templates/test/unit/app_test.rb.tt +1 -1
- data/lib/hoboken/version.rb +1 -1
- data/test/integration/add_on_test.rb +118 -0
- data/test/integration/generate_test.rb +71 -0
- data/test/test_helper.rb +69 -0
- data/test/unit/hoboken_actions_test.rb +1 -1
- metadata +14 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92e42c10869f91d6dd97bc1f6445bfc441ba7c3f
|
4
|
+
data.tar.gz: 28fdbb0fd176c28fce090ab5c08694f579cbe3d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9084680cea5d0f1a2cb8c9bb56187bfc16a6f769269aa7d196635fe94e49ada236894b74e3e69f3b94b10f3a3ccde046e262c16fdffbd702c83384f4e61eb65
|
7
|
+
data.tar.gz: d4e6120ee3d411dff96b3c6cf8374571d79e2175591fc3b2f7ce8166dc9dfa60ae477758c73198f87371ad15a1439bc8060a4c64314c46fde9b5e0330b9ef724
|
data/README.md
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
# Hoboken
|
2
2
|
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/hoboken.png)](http://badge.fury.io/rb/hoboken)
|
3
4
|
[![Dependency Status](https://gemnasium.com/bnadlerjr/hoboken.png)](https://gemnasium.com/bnadlerjr/hoboken)
|
4
5
|
|
5
6
|
Generate Sinatra project templates.
|
6
7
|
|
7
8
|
## Installation
|
8
9
|
|
9
|
-
$ gem install hoboken
|
10
|
+
$ gem install hoboken --pre
|
10
11
|
|
11
12
|
## Usage
|
12
13
|
|
@@ -42,6 +43,7 @@ Additional generators are available for existing projects generated using Hoboke
|
|
42
43
|
$ hoboken add:i18n # Internationalization support using sinatra-r18n
|
43
44
|
$ hoboken add:metrics # Add metrics (flog, flay, simplecov)
|
44
45
|
$ hoboken add:omniauth # OmniAuth authentication (allows you to select a provider)
|
46
|
+
$ hoboken add:sequel # Database access via Sequel gem
|
45
47
|
$ hoboken add:sprockets # Rack-based asset packaging system
|
46
48
|
|
47
49
|
## Contributing
|
data/Rakefile
CHANGED
@@ -1,11 +1,18 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rake/testtask"
|
3
3
|
|
4
|
-
task :default => "test:
|
4
|
+
task :default => "test:all"
|
5
5
|
|
6
6
|
namespace :test do
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
types = %w(unit integration)
|
8
|
+
|
9
|
+
types.each do |type|
|
10
|
+
Rake::TestTask.new(type.to_sym) do |t|
|
11
|
+
t.libs << "test/#{type}"
|
12
|
+
t.test_files = Dir["test/#{type}/**/*_test.rb"]
|
13
|
+
end
|
10
14
|
end
|
15
|
+
|
16
|
+
desc "Run all tests"
|
17
|
+
task :all => types.map { |s| "test:#{s}" }
|
11
18
|
end
|
data/lib/hoboken.rb
CHANGED
@@ -6,6 +6,99 @@ require_relative "hoboken/generate"
|
|
6
6
|
require_relative "hoboken/actions"
|
7
7
|
|
8
8
|
module Hoboken
|
9
|
+
class Group < Thor::Group
|
10
|
+
include Thor::Actions
|
11
|
+
include Hoboken::Actions
|
12
|
+
|
13
|
+
def self.source_root
|
14
|
+
File.dirname(__FILE__)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Sequel < Thor::Group
|
19
|
+
include Thor::Actions
|
20
|
+
include Hoboken::Actions
|
21
|
+
|
22
|
+
def self.source_root
|
23
|
+
File.dirname(__FILE__)
|
24
|
+
end
|
25
|
+
|
26
|
+
def add_gems
|
27
|
+
gem "sequel", "4.6.0"
|
28
|
+
gem "sqlite3", "1.3.8", group: [:development, :test]
|
29
|
+
end
|
30
|
+
|
31
|
+
def setup_directories
|
32
|
+
empty_directory("db/migrate")
|
33
|
+
empty_directory("tasks")
|
34
|
+
end
|
35
|
+
|
36
|
+
def copy_rake_task
|
37
|
+
copy_file("hoboken/templates/sequel.rake", "tasks/sequel.rake")
|
38
|
+
end
|
39
|
+
|
40
|
+
def setup_database_connection_in_rackup_file
|
41
|
+
insert_into_file("config.ru", after: /require "bundler\/setup"/) do
|
42
|
+
"\nrequire \"logger\"\nrequire \"sequel\""
|
43
|
+
end
|
44
|
+
|
45
|
+
app_name = File.open("config.ru").grep(/run.+/).first.chomp.gsub("run ", "")
|
46
|
+
|
47
|
+
gsub_file("config.ru", /run #{app_name}/) do
|
48
|
+
<<CODE
|
49
|
+
|
50
|
+
db = Sequel.connect(ENV["DATABASE_URL"], loggers: [Logger.new($stdout)])
|
51
|
+
Sequel.extension :migration
|
52
|
+
Sequel::Migrator.check_current(db, "db/migrate") if Dir.glob("db/migrate/*.rb").size > 0
|
53
|
+
|
54
|
+
app = #{app_name}
|
55
|
+
app.set :database, db
|
56
|
+
run app
|
57
|
+
CODE
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_database_test_helper_class
|
62
|
+
insert_into_file("test/test_helper.rb", after: /require "test\/unit"/) do
|
63
|
+
"\nrequire \"sequel\""
|
64
|
+
end
|
65
|
+
|
66
|
+
append_file("test/test_helper.rb") do
|
67
|
+
<<CODE
|
68
|
+
|
69
|
+
module Test::Database
|
70
|
+
class TestCase < Test::Unit::TestCase
|
71
|
+
def run(*args, &block)
|
72
|
+
result = nil
|
73
|
+
database.transaction(rollback: :always) { result = super }
|
74
|
+
result
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def database
|
80
|
+
@database ||= Sequel.sqlite.tap do |db|
|
81
|
+
Sequel.extension :migration
|
82
|
+
Sequel::Migrator.run(db, 'db/migrate') if Dir.glob("db/migrate/*.rb").size > 0
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
CODE
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def reminders
|
92
|
+
say "\nGemfile updated... don't forget to 'bundle install'"
|
93
|
+
say <<TEXT
|
94
|
+
|
95
|
+
Notes:
|
96
|
+
* The sqlite3 gem has been installed for dev and test environments only. You will need to specify a gem to use for production.
|
97
|
+
* You will need to specify an environment variable 'DATABASE_URL' (either add it to .env or export it)
|
98
|
+
TEXT
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
9
102
|
class OmniAuth < Thor::Group
|
10
103
|
include Thor::Actions
|
11
104
|
include Hoboken::Actions
|
@@ -116,223 +209,10 @@ CODE
|
|
116
209
|
end
|
117
210
|
end
|
118
211
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
def self.source_root
|
124
|
-
File.dirname(__FILE__)
|
125
|
-
end
|
126
|
-
|
127
|
-
def create_assets_folder
|
128
|
-
empty_directory("assets")
|
129
|
-
FileUtils.cp("public/css/styles.css", "assets/styles.css")
|
130
|
-
FileUtils.cp("public/js/app.js", "assets/app.js")
|
131
|
-
end
|
132
|
-
|
133
|
-
def add_gems
|
134
|
-
gem "sprockets", "2.10.0", group: :assets
|
135
|
-
gem "uglifier", "2.1.1", group: :assets
|
136
|
-
gem "yui-compressor", "0.9.6", group: :assets
|
137
|
-
end
|
138
|
-
|
139
|
-
def copy_sprockets_helpers
|
140
|
-
copy_file("hoboken/templates/sprockets.rake", "tasks/sprockets.rake")
|
141
|
-
copy_file("hoboken/templates/sprockets_chain.rb", "middleware/sprockets_chain.rb")
|
142
|
-
copy_file("hoboken/templates/sprockets_helper.rb", "helpers/sprockets.rb")
|
143
|
-
end
|
144
|
-
|
145
|
-
def update_app
|
146
|
-
insert_into_file("app.rb", after: /configure :development do\n/) do
|
147
|
-
<<CODE
|
148
|
-
require File.expand_path('middleware/sprockets_chain', settings.root)
|
149
|
-
use Middleware::SprocketsChain, %r{/assets} do |env|
|
150
|
-
%w(assets vendor).each do |f|
|
151
|
-
env.append_path File.expand_path("../\#{f}", __FILE__)
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
CODE
|
156
|
-
end
|
157
|
-
|
158
|
-
insert_into_file("app.rb", after: /set :root, File.dirname\(__FILE__\)\n/) do
|
159
|
-
" helpers Helpers::Sprockets"
|
160
|
-
end
|
161
|
-
|
162
|
-
gsub_file("app.rb", /require "sinatra\/reloader" if development\?/) do
|
163
|
-
<<CODE
|
164
|
-
if development?
|
165
|
-
require "sinatra/reloader"
|
166
|
-
|
167
|
-
require File.expand_path('middleware/sprockets_chain', settings.root)
|
168
|
-
use Middleware::SprocketsChain, %r{/assets} do |env|
|
169
|
-
%w(assets vendor).each do |f|
|
170
|
-
env.append_path File.expand_path("../\#{f}", __FILE__)
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
helpers Helpers::Sprockets
|
176
|
-
CODE
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
def adjust_link_tags
|
181
|
-
insert_into_file("views/layout.erb", before: /<\/head>/) do
|
182
|
-
<<HTML
|
183
|
-
<%= stylesheet_tag :styles %>
|
184
|
-
|
185
|
-
<%= javascript_tag :app %>
|
186
|
-
HTML
|
187
|
-
end
|
188
|
-
|
189
|
-
gsub_file("views/layout.erb", /<link rel="stylesheet" type="text\/css" href="css\/styles.css">/, "")
|
190
|
-
gsub_file("views/layout.erb", /<script type="text\/javascript" src="js\/app.js"><\/script>/, "")
|
191
|
-
end
|
192
|
-
|
193
|
-
def directions
|
194
|
-
text = <<TEXT
|
195
|
-
|
196
|
-
Run `bundle install` to get the sprockets gem and its
|
197
|
-
dependencies.
|
198
|
-
|
199
|
-
Running the server in development mode will serve css
|
200
|
-
and js files from /assets. In order to serve assets in
|
201
|
-
production, you must run `rake assets:precompile`. Read
|
202
|
-
the important note below before running this rake task.
|
203
|
-
TEXT
|
204
|
-
|
205
|
-
important = <<TEXT
|
206
|
-
|
207
|
-
Important Note:
|
208
|
-
Any css or js files from the /public folder have been copied
|
209
|
-
to /assets, the original files remain intact in /public, but
|
210
|
-
will be replaced the first time you run `rake assets:precompile`.
|
211
|
-
You may want to backup those files if they are not under source
|
212
|
-
control before running the Rake command.
|
213
|
-
TEXT
|
214
|
-
|
215
|
-
say text
|
216
|
-
say important, :red
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
class Heroku < Thor::Group
|
221
|
-
include Thor::Actions
|
222
|
-
include Hoboken::Actions
|
223
|
-
|
224
|
-
def self.source_root
|
225
|
-
File.dirname(__FILE__)
|
226
|
-
end
|
227
|
-
|
228
|
-
def add_gem
|
229
|
-
gem "foreman", "0.63.0", group: :development
|
230
|
-
end
|
231
|
-
|
232
|
-
def procfile
|
233
|
-
create_file("Procfile") do
|
234
|
-
"web: bundle exec thin start -p $PORT -e $RACK_ENV"
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
def env_file
|
239
|
-
create_file(".env") do
|
240
|
-
"RACK_ENV=development\nPORT=9292"
|
241
|
-
end
|
242
|
-
append_to_file(".gitignore", ".env") if File.exist?(".gitignore")
|
243
|
-
end
|
244
|
-
|
245
|
-
def slugignore
|
246
|
-
create_file(".slugignore") do
|
247
|
-
"tags\n/test\n/tmp"
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
def fix_stdout_for_logging
|
252
|
-
prepend_file("config.ru", "$stdout.sync = true\n")
|
253
|
-
end
|
254
|
-
|
255
|
-
def replace_server_rake_task
|
256
|
-
gsub_file("Rakefile", /desc.*server.*{rack_env}"\)\nend$/m) do
|
257
|
-
<<TASK
|
258
|
-
desc "Start the development server with Foreman"
|
259
|
-
task :server do
|
260
|
-
exec("foreman start")
|
261
|
-
end
|
262
|
-
TASK
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
def reminders
|
267
|
-
say "\nGemfile updated... don't forget to 'bundle install'"
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
class Internationalization < Thor::Group
|
272
|
-
include Thor::Actions
|
273
|
-
include Hoboken::Actions
|
274
|
-
|
275
|
-
def self.source_root
|
276
|
-
File.dirname(__FILE__)
|
277
|
-
end
|
278
|
-
|
279
|
-
def add_gem
|
280
|
-
gem "sinatra-r18n", "1.1.5"
|
281
|
-
insert_into_file("app.rb", after: /require "sinatra("|\/base")/) do
|
282
|
-
"\nrequire \"sinatra/r18n\""
|
283
|
-
end
|
284
|
-
insert_into_file("app.rb", after: /Sinatra::Base/) do
|
285
|
-
"\n register Sinatra::R18n"
|
286
|
-
end
|
287
|
-
end
|
288
|
-
|
289
|
-
def translations
|
290
|
-
empty_directory("i18n")
|
291
|
-
template("hoboken/templates/en.yml.tt", "i18n/en.yml")
|
292
|
-
end
|
293
|
-
|
294
|
-
def reminders
|
295
|
-
say "\nGemfile updated... don't forget to 'bundle install'"
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
class Metrics < Thor::Group
|
300
|
-
include Thor::Actions
|
301
|
-
include Hoboken::Actions
|
302
|
-
|
303
|
-
def self.source_root
|
304
|
-
File.dirname(__FILE__)
|
305
|
-
end
|
306
|
-
|
307
|
-
def add_gems
|
308
|
-
gem "flog", "2.5.3", group: :test
|
309
|
-
gem "flay", "1.4.3", group: :test
|
310
|
-
gem "simplecov", "0.7.1", require: false, group: :test
|
311
|
-
end
|
312
|
-
|
313
|
-
def copy_task_templates
|
314
|
-
empty_directory("tasks")
|
315
|
-
template("hoboken/templates/metrics.rake.tt", "tasks/metrics.rake")
|
316
|
-
end
|
317
|
-
|
318
|
-
def simplecov_snippet
|
319
|
-
insert_into_file "test/unit/test_helper.rb", before: /require "test\/unit"/ do
|
320
|
-
<<CODE
|
321
|
-
|
322
|
-
require 'simplecov'
|
323
|
-
SimpleCov.start do
|
324
|
-
add_filter "/test/"
|
325
|
-
coverage_dir 'tmp/coverage'
|
326
|
-
end
|
327
|
-
|
328
|
-
CODE
|
329
|
-
end
|
330
|
-
end
|
331
|
-
|
332
|
-
def reminders
|
333
|
-
say "\nGemfile updated... don't forget to 'bundle install'"
|
334
|
-
end
|
335
|
-
end
|
212
|
+
require_relative "hoboken/add_ons/metrics"
|
213
|
+
require_relative "hoboken/add_ons/internationalization"
|
214
|
+
require_relative "hoboken/add_ons/heroku"
|
215
|
+
require_relative "hoboken/add_ons/sprockets"
|
336
216
|
|
337
217
|
class CLI < Thor
|
338
218
|
desc "version", "Print version and quit"
|
@@ -343,10 +223,11 @@ CODE
|
|
343
223
|
register(Generate, "generate", "generate [APP_NAME]", "Generate a new Sinatra app")
|
344
224
|
tasks["generate"].options = Hoboken::Generate.class_options
|
345
225
|
|
346
|
-
register(Metrics, "add:metrics", "add:metrics", "Add metrics (flog, flay, simplecov)")
|
347
|
-
register(Internationalization, "add:i18n", "add:i18n", "Internationalization support using sinatra-r18n")
|
348
|
-
register(Heroku, "add:heroku", "add:heroku", "Heroku deployment support")
|
226
|
+
register(AddOns::Metrics, "add:metrics", "add:metrics", "Add metrics (flog, flay, simplecov)")
|
227
|
+
register(AddOns::Internationalization, "add:i18n", "add:i18n", "Internationalization support using sinatra-r18n")
|
228
|
+
register(AddOns::Heroku, "add:heroku", "add:heroku", "Heroku deployment support")
|
349
229
|
register(OmniAuth, "add:omniauth", "add:omniauth", "OmniAuth authentication (allows you to select a provider)")
|
350
|
-
register(Sprockets, "add:sprockets", "add:sprockets", "Rack-based asset packaging system")
|
230
|
+
register(AddOns::Sprockets, "add:sprockets", "add:sprockets", "Rack-based asset packaging system")
|
231
|
+
register(Sequel, "add:sequel", "add:sequel", "Database access via Sequel gem")
|
351
232
|
end
|
352
233
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Hoboken
|
2
|
+
module AddOns
|
3
|
+
class Heroku < ::Hoboken::Group
|
4
|
+
def add_gem
|
5
|
+
gem "foreman", "0.63.0", group: :development
|
6
|
+
end
|
7
|
+
|
8
|
+
def procfile
|
9
|
+
create_file("Procfile") do
|
10
|
+
"web: bundle exec thin start -p $PORT -e $RACK_ENV"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def slugignore
|
15
|
+
create_file(".slugignore") do
|
16
|
+
"tags\n/test\n/tmp"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def fix_stdout_for_logging
|
21
|
+
prepend_file("config.ru", "$stdout.sync = true\n")
|
22
|
+
end
|
23
|
+
|
24
|
+
def replace_server_rake_task
|
25
|
+
gsub_file("Rakefile", /desc.*server.*{rack_env}"\)\nend$/m) do
|
26
|
+
<<TASK
|
27
|
+
desc "Start the development server with Foreman"
|
28
|
+
task :server do
|
29
|
+
exec("foreman start")
|
30
|
+
end
|
31
|
+
TASK
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def reminders
|
36
|
+
say "\nGemfile updated... don't forget to 'bundle install'"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Hoboken
|
2
|
+
module AddOns
|
3
|
+
class Internationalization < ::Hoboken::Group
|
4
|
+
def add_gem
|
5
|
+
gem "sinatra-r18n", "1.1.5"
|
6
|
+
insert_into_file("app.rb", after: /require "sinatra("|\/base")/) do
|
7
|
+
"\nrequire \"sinatra/r18n\""
|
8
|
+
end
|
9
|
+
insert_into_file("app.rb", after: /Sinatra::Base/) do
|
10
|
+
"\n register Sinatra::R18n"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def translations
|
15
|
+
empty_directory("i18n")
|
16
|
+
template("hoboken/templates/en.yml.tt", "i18n/en.yml")
|
17
|
+
end
|
18
|
+
|
19
|
+
def reminders
|
20
|
+
say "\nGemfile updated... don't forget to 'bundle install'"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Hoboken
|
2
|
+
module AddOns
|
3
|
+
class Metrics < ::Hoboken::Group
|
4
|
+
def add_gems
|
5
|
+
gem "flog", "2.5.3", group: :test
|
6
|
+
gem "flay", "1.4.3", group: :test
|
7
|
+
gem "simplecov", "0.7.1", require: false, group: :test
|
8
|
+
end
|
9
|
+
|
10
|
+
def copy_task_templates
|
11
|
+
empty_directory("tasks")
|
12
|
+
template("hoboken/templates/metrics.rake.tt", "tasks/metrics.rake")
|
13
|
+
end
|
14
|
+
|
15
|
+
def simplecov_snippet
|
16
|
+
insert_into_file "test/test_helper.rb", before: /require "test\/unit"/ do
|
17
|
+
<<CODE
|
18
|
+
|
19
|
+
require 'simplecov'
|
20
|
+
SimpleCov.start do
|
21
|
+
add_filter "/test/"
|
22
|
+
coverage_dir 'tmp/coverage'
|
23
|
+
end
|
24
|
+
|
25
|
+
CODE
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def reminders
|
30
|
+
say "\nGemfile updated... don't forget to 'bundle install'"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Hoboken
|
2
|
+
module AddOns
|
3
|
+
class Sprockets < ::Hoboken::Group
|
4
|
+
def create_assets_folder
|
5
|
+
empty_directory("assets")
|
6
|
+
FileUtils.cp("public/css/styles.css", "assets/styles.css")
|
7
|
+
FileUtils.cp("public/js/app.js", "assets/app.js")
|
8
|
+
end
|
9
|
+
|
10
|
+
def add_gems
|
11
|
+
gem "sprockets", "2.10.0", group: :assets
|
12
|
+
gem "uglifier", "2.1.1", group: :assets
|
13
|
+
gem "yui-compressor", "0.9.6", group: :assets
|
14
|
+
end
|
15
|
+
|
16
|
+
def copy_sprockets_helpers
|
17
|
+
copy_file("hoboken/templates/sprockets.rake", "tasks/sprockets.rake")
|
18
|
+
copy_file("hoboken/templates/sprockets_chain.rb", "middleware/sprockets_chain.rb")
|
19
|
+
copy_file("hoboken/templates/sprockets_helper.rb", "helpers/sprockets.rb")
|
20
|
+
end
|
21
|
+
|
22
|
+
def update_app
|
23
|
+
insert_into_file("app.rb", after: /configure :development do\n/) do
|
24
|
+
<<CODE
|
25
|
+
require File.expand_path('middleware/sprockets_chain', settings.root)
|
26
|
+
use Middleware::SprocketsChain, %r{/assets} do |env|
|
27
|
+
%w(assets vendor).each do |f|
|
28
|
+
env.append_path File.expand_path("../\#{f}", __FILE__)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
CODE
|
33
|
+
end
|
34
|
+
|
35
|
+
insert_into_file("app.rb", after: /set :root, File.dirname\(__FILE__\)\n/) do
|
36
|
+
" helpers Helpers::Sprockets"
|
37
|
+
end
|
38
|
+
|
39
|
+
gsub_file("app.rb", /require "sinatra\/reloader" if development\?/) do
|
40
|
+
<<CODE
|
41
|
+
if development?
|
42
|
+
require "sinatra/reloader"
|
43
|
+
|
44
|
+
require File.expand_path('middleware/sprockets_chain', settings.root)
|
45
|
+
use Middleware::SprocketsChain, %r{/assets} do |env|
|
46
|
+
%w(assets vendor).each do |f|
|
47
|
+
env.append_path File.expand_path("../\#{f}", __FILE__)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
helpers Helpers::Sprockets
|
53
|
+
CODE
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def adjust_link_tags
|
58
|
+
insert_into_file("views/layout.erb", before: /<\/head>/) do
|
59
|
+
<<HTML
|
60
|
+
<%= stylesheet_tag :styles %>
|
61
|
+
|
62
|
+
<%= javascript_tag :app %>
|
63
|
+
HTML
|
64
|
+
end
|
65
|
+
|
66
|
+
gsub_file("views/layout.erb", /<link rel="stylesheet" type="text\/css" href="css\/styles.css">/, "")
|
67
|
+
gsub_file("views/layout.erb", /<script type="text\/javascript" src="js\/app.js"><\/script>/, "")
|
68
|
+
end
|
69
|
+
|
70
|
+
def directions
|
71
|
+
text = <<TEXT
|
72
|
+
|
73
|
+
Run `bundle install` to get the sprockets gem and its
|
74
|
+
dependencies.
|
75
|
+
|
76
|
+
Running the server in development mode will serve css
|
77
|
+
and js files from /assets. In order to serve assets in
|
78
|
+
production, you must run `rake assets:precompile`. Read
|
79
|
+
the important note below before running this rake task.
|
80
|
+
TEXT
|
81
|
+
|
82
|
+
important = <<TEXT
|
83
|
+
|
84
|
+
Important Note:
|
85
|
+
Any css or js files from the /public folder have been copied
|
86
|
+
to /assets, the original files remain intact in /public, but
|
87
|
+
will be replaced the first time you run `rake assets:precompile`.
|
88
|
+
You may want to backup those files if they are not under source
|
89
|
+
control before running the Rake command.
|
90
|
+
TEXT
|
91
|
+
|
92
|
+
say text
|
93
|
+
say important, :red
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/hoboken/generate.rb
CHANGED
@@ -47,16 +47,6 @@ module Hoboken
|
|
47
47
|
apply_template("views/index.erb.tt", "views/index.erb")
|
48
48
|
end
|
49
49
|
|
50
|
-
def inline_views
|
51
|
-
return unless options[:tiny]
|
52
|
-
combined_views = %w(layout index).map do |f|
|
53
|
-
"@@#{f}\n" + File.read("#{snake_name}/views/#{f}.erb")
|
54
|
-
end.join("\n")
|
55
|
-
|
56
|
-
append_to_file("#{snake_name}/app.rb", "\n__END__\n\n#{combined_views}")
|
57
|
-
remove_dir("#{snake_name}/views")
|
58
|
-
end
|
59
|
-
|
60
50
|
def public_folder
|
61
51
|
return if options[:tiny]
|
62
52
|
inside snake_name do
|
@@ -73,26 +63,45 @@ module Hoboken
|
|
73
63
|
|
74
64
|
def test_folder
|
75
65
|
empty_directory("#{snake_name}/test/unit")
|
66
|
+
empty_directory("#{snake_name}/test/integration")
|
76
67
|
empty_directory("#{snake_name}/test/support")
|
77
|
-
apply_template("test/
|
68
|
+
apply_template("test/test_helper.rb.tt", "test/test_helper.rb")
|
78
69
|
apply_template("test/unit/app_test.rb.tt", "test/unit/app_test.rb")
|
79
70
|
apply_template("test/support/rack_test_assertions.rb.tt", "test/support/rack_test_assertions.rb")
|
80
71
|
end
|
81
72
|
|
73
|
+
def env_file
|
74
|
+
inside snake_name do
|
75
|
+
create_file(".env") do
|
76
|
+
"RACK_ENV=development\nPORT=9292"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
82
81
|
def make_modular
|
83
82
|
return unless "modular" == options[:type]
|
84
83
|
empty_directory("#{snake_name}/helpers")
|
85
84
|
remove_file("#{snake_name}/app.rb")
|
86
85
|
apply_template("modular.rb.tt", "app.rb")
|
87
|
-
["config.ru", "test/
|
86
|
+
["config.ru", "test/test_helper.rb"].each do |f|
|
88
87
|
path = File.join(snake_name, f)
|
89
88
|
gsub_file(path, /Sinatra::Application/, "#{camel_name}::App")
|
90
89
|
end
|
91
90
|
end
|
92
91
|
|
92
|
+
def inline_views
|
93
|
+
return unless options[:tiny]
|
94
|
+
combined_views = %w(layout index).map do |f|
|
95
|
+
"@@#{f}\n" + File.read("#{snake_name}/views/#{f}.erb")
|
96
|
+
end.join("\n")
|
97
|
+
|
98
|
+
append_to_file("#{snake_name}/app.rb", "\n__END__\n\n#{combined_views}")
|
99
|
+
remove_dir("#{snake_name}/views")
|
100
|
+
end
|
101
|
+
|
93
102
|
def create_git_repository
|
94
103
|
return unless options[:git]
|
95
|
-
if
|
104
|
+
if has_git?
|
96
105
|
copy_file("templates/gitignore", "#{snake_name}/.gitignore")
|
97
106
|
inside snake_name do
|
98
107
|
run("git init .")
|
@@ -115,7 +124,7 @@ module Hoboken
|
|
115
124
|
end
|
116
125
|
|
117
126
|
def camel_name
|
118
|
-
Thor::Util.camel_case(name)
|
127
|
+
Thor::Util.camel_case(name.split("/").last)
|
119
128
|
end
|
120
129
|
|
121
130
|
def titleized_name
|
@@ -123,7 +132,16 @@ module Hoboken
|
|
123
132
|
end
|
124
133
|
|
125
134
|
def author
|
126
|
-
|
135
|
+
if has_git?
|
136
|
+
`git config user.name`.chomp
|
137
|
+
else
|
138
|
+
say "\nNo Git executable found. Using result of `whoami` as author name."
|
139
|
+
`whoami`.chomp
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def has_git?
|
144
|
+
system("git --version >#{NULL} 2>&1")
|
127
145
|
end
|
128
146
|
|
129
147
|
def apply_template(src, dest)
|
@@ -18,6 +18,11 @@ namespace :test do
|
|
18
18
|
t.test_files = Dir["test/unit/**/*_test.rb"]
|
19
19
|
end
|
20
20
|
|
21
|
+
Rake::TestTask.new(:integration) do |t|
|
22
|
+
t.libs << 'test/unit'
|
23
|
+
t.test_files = Dir["test/integration/**/*_test.rb"]
|
24
|
+
end
|
25
|
+
|
21
26
|
desc "Run all tests"
|
22
|
-
task :all => %w[test:unit]
|
27
|
+
task :all => %w[test:unit test:integration]
|
23
28
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
namespace :db do
|
2
|
+
require 'sequel'
|
3
|
+
|
4
|
+
Sequel.extension :migration
|
5
|
+
DB = Sequel.connect(ENV['DATABASE_URL'] || "sqlite://db/development.db")
|
6
|
+
|
7
|
+
desc 'Migrate the database to latest version'
|
8
|
+
task :migrate do
|
9
|
+
Sequel::Migrator.run(DB, 'db/migrate')
|
10
|
+
puts '<= db:migrate executed'
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'Perform migration reset (full erase and migration up)'
|
14
|
+
task :reset do
|
15
|
+
Sequel::Migrator.run(DB, 'db/migrate', :target => 0)
|
16
|
+
Sequel::Migrator.run(DB, 'db/migrate')
|
17
|
+
puts '<= db:reset executed'
|
18
|
+
end
|
19
|
+
end
|
@@ -6,6 +6,11 @@ module Rack::Test::Assertions
|
|
6
6
|
:redirect => 302
|
7
7
|
}
|
8
8
|
|
9
|
+
CONTENT_TYPES = {
|
10
|
+
:json => "application/json;charset=utf-8",
|
11
|
+
:html => "text/html;charset=utf-8"
|
12
|
+
}
|
13
|
+
|
9
14
|
def assert_body_contains(expected, message=nil)
|
10
15
|
msg = build_message(message, "expected body to contain <?>\n#{last_response.body}", expected)
|
11
16
|
assert_block(msg) do
|
@@ -13,6 +18,14 @@ module Rack::Test::Assertions
|
|
13
18
|
end
|
14
19
|
end
|
15
20
|
|
21
|
+
def assert_content_type(content_type)
|
22
|
+
unless CONTENT_TYPES.keys.include?(content_type)
|
23
|
+
raise ArgumentError, "unrecognized content_type (#{content_type})"
|
24
|
+
end
|
25
|
+
|
26
|
+
assert_equal CONTENT_TYPES[content_type], last_response.content_type
|
27
|
+
end
|
28
|
+
|
16
29
|
def assert_flash(type=:notice, message=nil)
|
17
30
|
msg = build_message(message, "expected <?> flash to exist, but was nil", type.to_s)
|
18
31
|
assert_block(msg) do
|
@@ -40,13 +53,13 @@ module Rack::Test::Assertions
|
|
40
53
|
assert_has_session
|
41
54
|
msg = build_message(message, "expected session to have key named <?>", key)
|
42
55
|
assert_block(msg) do
|
43
|
-
last_request.env["rack.session"].keys.include?(key)
|
56
|
+
last_request.env["rack.session"].keys.include?(key.to_s)
|
44
57
|
end
|
45
58
|
end
|
46
59
|
|
47
60
|
def assert_session(key, expected, message=nil)
|
48
61
|
assert_session_has_key(key)
|
49
|
-
actual = last_request.env["rack.session"][key]
|
62
|
+
actual = last_request.env["rack.session"][key.to_s]
|
50
63
|
msg = build_message(message, "expected session key <?> to be <?>, but was <?>", key, expected, actual)
|
51
64
|
assert_block(msg) do
|
52
65
|
expected == actual
|
@@ -4,8 +4,11 @@ require "bundler/setup"
|
|
4
4
|
require "test/unit"
|
5
5
|
require "contest"
|
6
6
|
require "rack/test"
|
7
|
-
|
8
|
-
require_relative "
|
7
|
+
require "dotenv"
|
8
|
+
require_relative "support/rack_test_assertions"
|
9
|
+
require_relative "../app"
|
10
|
+
|
11
|
+
Dotenv.load
|
9
12
|
|
10
13
|
class Test::Unit::TestCase
|
11
14
|
# Syntactic sugar for defining a memoized helper method.
|
data/lib/hoboken/version.rb
CHANGED
@@ -0,0 +1,118 @@
|
|
1
|
+
require_relative "../test_helper"
|
2
|
+
|
3
|
+
class AddOnTest < IntegrationTestCase
|
4
|
+
def test_metrics_add_on
|
5
|
+
run_hoboken(:generate) do
|
6
|
+
bin_path = File.expand_path("../../../bin/hoboken", __FILE__)
|
7
|
+
execute("#{bin_path} add:metrics")
|
8
|
+
assert_file("Gemfile", /flog/, /flay/, /simplecov/)
|
9
|
+
assert_file("tasks/metrics.rake")
|
10
|
+
assert_file("test/test_helper.rb",
|
11
|
+
<<CODE
|
12
|
+
|
13
|
+
require 'simplecov'
|
14
|
+
SimpleCov.start do
|
15
|
+
add_filter "/test/"
|
16
|
+
coverage_dir 'tmp/coverage'
|
17
|
+
end
|
18
|
+
|
19
|
+
CODE
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_internationalization_add_on_classic
|
25
|
+
run_hoboken(:generate) do
|
26
|
+
bin_path = File.expand_path("../../../bin/hoboken", __FILE__)
|
27
|
+
execute("#{bin_path} add:i18n")
|
28
|
+
assert_file("Gemfile", "sinatra-r18n")
|
29
|
+
assert_file("app.rb", 'require "sinatra/r18n"')
|
30
|
+
assert_file("i18n/en.yml")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_internationalization_add_on_modular
|
35
|
+
run_hoboken(:generate, type: :modular) do
|
36
|
+
bin_path = File.expand_path("../../../bin/hoboken", __FILE__)
|
37
|
+
execute("#{bin_path} add:i18n")
|
38
|
+
assert_file("Gemfile", "sinatra-r18n")
|
39
|
+
assert_file("app.rb", 'require "sinatra/r18n"', "register Sinatra::R18n")
|
40
|
+
assert_file("i18n/en.yml")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_heroku_add_on
|
45
|
+
run_hoboken(:generate) do
|
46
|
+
bin_path = File.expand_path("../../../bin/hoboken", __FILE__)
|
47
|
+
execute("#{bin_path} add:heroku")
|
48
|
+
assert_file("Gemfile", "foreman")
|
49
|
+
assert_file("Procfile")
|
50
|
+
assert_file(".slugignore")
|
51
|
+
assert_file("config.ru", /\$stdout.sync = true/)
|
52
|
+
assert_file("Rakefile", /exec\("foreman start"\)/)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_sprockets_add_on_classic
|
57
|
+
run_hoboken(:generate) do
|
58
|
+
bin_path = File.expand_path("../../../bin/hoboken", __FILE__)
|
59
|
+
execute("#{bin_path} add:sprockets")
|
60
|
+
assert_file("assets/styles.css")
|
61
|
+
assert_file("assets/app.js")
|
62
|
+
assert_file("Gemfile", "sprockets", "uglifier", "yui-compressor")
|
63
|
+
assert_file("tasks/sprockets.rake")
|
64
|
+
assert_file("middleware/sprockets_chain.rb")
|
65
|
+
assert_file("helpers/sprockets.rb")
|
66
|
+
assert_file("app.rb", <<CODE
|
67
|
+
if development?
|
68
|
+
require "sinatra/reloader"
|
69
|
+
|
70
|
+
require File.expand_path('middleware/sprockets_chain', settings.root)
|
71
|
+
use Middleware::SprocketsChain, %r{/assets} do |env|
|
72
|
+
%w(assets vendor).each do |f|
|
73
|
+
env.append_path File.expand_path("../\#{f}", __FILE__)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
helpers Helpers::Sprockets
|
79
|
+
CODE
|
80
|
+
)
|
81
|
+
assert_file("views/layout.erb", <<CODE
|
82
|
+
<%= stylesheet_tag :styles %>
|
83
|
+
|
84
|
+
<%= javascript_tag :app %>
|
85
|
+
CODE
|
86
|
+
)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_sprockets_add_on_modular
|
91
|
+
run_hoboken(:generate, type: :modular) do
|
92
|
+
bin_path = File.expand_path("../../../bin/hoboken", __FILE__)
|
93
|
+
execute("#{bin_path} add:sprockets")
|
94
|
+
assert_file("assets/styles.css")
|
95
|
+
assert_file("assets/app.js")
|
96
|
+
assert_file("Gemfile", "sprockets", "uglifier", "yui-compressor")
|
97
|
+
assert_file("tasks/sprockets.rake")
|
98
|
+
assert_file("middleware/sprockets_chain.rb")
|
99
|
+
assert_file("helpers/sprockets.rb")
|
100
|
+
assert_file("app.rb", <<CODE
|
101
|
+
configure :development do
|
102
|
+
require File.expand_path('middleware/sprockets_chain', settings.root)
|
103
|
+
use Middleware::SprocketsChain, %r{/assets} do |env|
|
104
|
+
%w(assets vendor).each do |f|
|
105
|
+
env.append_path File.expand_path("../\#{f}", __FILE__)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
CODE
|
109
|
+
)
|
110
|
+
assert_file("views/layout.erb", <<CODE
|
111
|
+
<%= stylesheet_tag :styles %>
|
112
|
+
|
113
|
+
<%= javascript_tag :app %>
|
114
|
+
CODE
|
115
|
+
)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative "../test_helper"
|
2
|
+
|
3
|
+
class GenerateTest < IntegrationTestCase
|
4
|
+
def test_generate_classic
|
5
|
+
run_hoboken(:generate) do
|
6
|
+
assert_file ".env"
|
7
|
+
assert_file "Gemfile"
|
8
|
+
assert_file "README.md"
|
9
|
+
assert_file "Rakefile"
|
10
|
+
assert_file "app.rb", /require "sinatra"/
|
11
|
+
assert_file "config.ru", /run Sinatra::Application/
|
12
|
+
assert_directory "public"
|
13
|
+
assert_directory "test"
|
14
|
+
assert_file "views/index.erb"
|
15
|
+
assert_file "views/layout.erb"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_generate_classic_tiny
|
20
|
+
run_hoboken(:generate, tiny: true) do
|
21
|
+
refute_directory("public")
|
22
|
+
assert_file "app.rb", /__END__/, /@@layout/, /@@index/
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_generate_classic_can_run_tests
|
27
|
+
run_hoboken(:generate) do
|
28
|
+
assert_match /1 tests, 1 assertions, 0 failures, 0 errors, 0 skips/, execute("rake test:all")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_generate_modular
|
33
|
+
run_hoboken(:generate, type: :modular) do
|
34
|
+
assert_file ".env"
|
35
|
+
assert_file "Gemfile"
|
36
|
+
assert_file "README.md"
|
37
|
+
assert_file "Rakefile"
|
38
|
+
assert_file "app.rb", /require "sinatra\/base"/, /module Sample/, /class App < Sinatra::Base/
|
39
|
+
assert_file "config.ru", /run Sample::App/
|
40
|
+
assert_directory "public"
|
41
|
+
assert_file "test/test_helper.rb", /Sample::App/
|
42
|
+
assert_file "views/index.erb"
|
43
|
+
assert_file "views/layout.erb"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_generate_modular_tiny
|
48
|
+
run_hoboken(:generate, tiny: true, type: :modular) do
|
49
|
+
refute_directory("public")
|
50
|
+
assert_file "app.rb", /__END__/, /@@layout/, /@@index/
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_generate_modular_can_run_tests
|
55
|
+
run_hoboken(:generate, type: :modular) do
|
56
|
+
assert_match /1 tests, 1 assertions, 0 failures, 0 errors, 0 skips/, execute("rake test:all")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_generate_with_ruby_version
|
61
|
+
run_hoboken(:generate, ruby_version: "2.1.0") do
|
62
|
+
assert_file "Gemfile", /ruby "2\.1\.0"/
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_generate_with_git
|
67
|
+
run_hoboken(:generate, git: true) do
|
68
|
+
assert_directory ".git"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "fileutils"
|
3
|
+
|
4
|
+
$hoboken_counter = 0
|
5
|
+
DESTINATION = File.expand_path("../tmp", __FILE__)
|
6
|
+
FileUtils.rm_rf(DESTINATION)
|
7
|
+
|
8
|
+
class IntegrationTestCase < Test::Unit::TestCase
|
9
|
+
def teardown
|
10
|
+
if self.passed?
|
11
|
+
FileUtils.rm_rf("#{DESTINATION}/#{$hoboken_counter}")
|
12
|
+
else
|
13
|
+
puts "Left #{DESTINATION}/#{$hoboken_counter}/sample in place since test failed."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def run_hoboken(command, **opts)
|
18
|
+
options = Array.new.tap do |o|
|
19
|
+
o << "--git" if opts.fetch(:git) { false }
|
20
|
+
o << "--tiny" if opts.fetch(:tiny) { false }
|
21
|
+
o << "--type=#{opts[:type]}" if opts.has_key?(:type)
|
22
|
+
o << "--ruby-version=#{opts[:ruby_version]}" if opts.has_key?(:ruby_version)
|
23
|
+
end
|
24
|
+
|
25
|
+
$hoboken_counter += 1
|
26
|
+
bin_path = File.expand_path("../../bin/hoboken", __FILE__)
|
27
|
+
|
28
|
+
`#{bin_path} #{command} #{DESTINATION}/#{$hoboken_counter}/sample #{options.join(" ")}`
|
29
|
+
yield
|
30
|
+
end
|
31
|
+
|
32
|
+
def execute(command)
|
33
|
+
current_path = Dir.pwd
|
34
|
+
FileUtils.cd("#{DESTINATION}/#{$hoboken_counter}/sample")
|
35
|
+
`bundle install` unless File.exists?("Gemfile.lock")
|
36
|
+
`#{command}`
|
37
|
+
ensure
|
38
|
+
FileUtils.cd(current_path)
|
39
|
+
end
|
40
|
+
|
41
|
+
def assert_file(filename, *contents)
|
42
|
+
full_path = File.join(DESTINATION, $hoboken_counter.to_s, "sample", filename)
|
43
|
+
assert_block("expected #{filename.inspect} to exist") do
|
44
|
+
File.exists?(full_path)
|
45
|
+
end
|
46
|
+
|
47
|
+
unless contents.empty?
|
48
|
+
read = File.read(full_path)
|
49
|
+
contents.each do |content|
|
50
|
+
assert_block("expected #{filename.inspect} to contain #{content}:\n#{read}") do
|
51
|
+
pattern = content.is_a?(Regexp) ? content : /#{content}/
|
52
|
+
read =~ pattern
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def assert_directory(name)
|
59
|
+
assert_block("expected #{name} directory to exist") do
|
60
|
+
File.directory?(File.join(DESTINATION, $hoboken_counter.to_s, "sample", name))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def refute_directory(name)
|
65
|
+
assert_block("did not expect directory #{name} to exist") do
|
66
|
+
!File.directory?(File.join(DESTINATION, $hoboken_counter.to_s, "sample", name))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hoboken
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.beta3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bob Nadler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -69,6 +69,10 @@ files:
|
|
69
69
|
- hoboken.gemspec
|
70
70
|
- lib/hoboken.rb
|
71
71
|
- lib/hoboken/actions.rb
|
72
|
+
- lib/hoboken/add_ons/heroku.rb
|
73
|
+
- lib/hoboken/add_ons/internationalization.rb
|
74
|
+
- lib/hoboken/add_ons/metrics.rb
|
75
|
+
- lib/hoboken/add_ons/sprockets.rb
|
72
76
|
- lib/hoboken/generate.rb
|
73
77
|
- lib/hoboken/templates/Gemfile.erb.tt
|
74
78
|
- lib/hoboken/templates/README.md.tt
|
@@ -81,19 +85,23 @@ files:
|
|
81
85
|
- lib/hoboken/templates/hoboken.png
|
82
86
|
- lib/hoboken/templates/metrics.rake.tt
|
83
87
|
- lib/hoboken/templates/modular.rb.tt
|
88
|
+
- lib/hoboken/templates/sequel.rake
|
84
89
|
- lib/hoboken/templates/sinatra.png
|
85
90
|
- lib/hoboken/templates/sprockets.rake
|
86
91
|
- lib/hoboken/templates/sprockets_chain.rb
|
87
92
|
- lib/hoboken/templates/sprockets_helper.rb
|
88
93
|
- lib/hoboken/templates/styles.css.tt
|
89
94
|
- lib/hoboken/templates/test/support/rack_test_assertions.rb.tt
|
95
|
+
- lib/hoboken/templates/test/test_helper.rb.tt
|
90
96
|
- lib/hoboken/templates/test/unit/app_test.rb.tt
|
91
|
-
- lib/hoboken/templates/test/unit/test_helper.rb.tt
|
92
97
|
- lib/hoboken/templates/views/index.erb.tt
|
93
98
|
- lib/hoboken/templates/views/layout.erb.tt
|
94
99
|
- lib/hoboken/version.rb
|
95
100
|
- test/fixtures/Gemfile
|
96
101
|
- test/fixtures/Gemfile.pristine
|
102
|
+
- test/integration/add_on_test.rb
|
103
|
+
- test/integration/generate_test.rb
|
104
|
+
- test/test_helper.rb
|
97
105
|
- test/unit/hoboken_actions_test.rb
|
98
106
|
homepage: https://github.com/bnadlerjr/hoboken
|
99
107
|
licenses:
|
@@ -122,4 +130,7 @@ summary: Sinatra project generator.
|
|
122
130
|
test_files:
|
123
131
|
- test/fixtures/Gemfile
|
124
132
|
- test/fixtures/Gemfile.pristine
|
133
|
+
- test/integration/add_on_test.rb
|
134
|
+
- test/integration/generate_test.rb
|
135
|
+
- test/test_helper.rb
|
125
136
|
- test/unit/hoboken_actions_test.rb
|