rapid-app 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/.rspec +2 -0
- data/Gemfile +11 -0
- data/Rakefile +4 -0
- data/lib/rapid/app/settings.rb +259 -0
- data/lib/rapid/app/skeleton.rb +213 -0
- data/lib/rapid/app/version.rb +5 -0
- data/lib/rapid/app.rb +13 -0
- data/lib/rapid-app.rb +5 -0
- data/rapid-app.gemspec +33 -0
- data/spec/rapid/app/skeleton_spec.rb +50 -0
- data/spec/rapid/app_spec.rb +12 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/more_string_matchers.rb +21 -0
- data/spec/support/rapid.rb +1 -0
- data/spec/templates/app/controllers/application_controller_spec.rb +32 -0
- data/spec/templates/app/helpers/application_helper_spec.rb +32 -0
- data/spec/templates/app/mailers/test_mailer_spec.rb +22 -0
- data/spec/templates/app/views/test_mailer/test_email.text.erb_spec.rb +36 -0
- data/spec/templates/config/application_spec.rb +168 -0
- data/spec/templates/config/boot_spec.rb +17 -0
- data/spec/templates/config/cucumber.yml_spec.rb +22 -0
- data/spec/templates/config/deploy/production_spec.rb +155 -0
- data/spec/templates/config/deploy_spec.rb +156 -0
- data/spec/templates/config/environment_spec.rb +22 -0
- data/spec/templates/config/environments/development_spec.rb +50 -0
- data/spec/templates/config/environments/production_spec.rb +50 -0
- data/spec/templates/config/environments/test_spec.rb +50 -0
- data/spec/templates/config/initializers/airbrake_spec.rb +70 -0
- data/spec/templates/config/initializers/backtrace_silencers_spec.rb +17 -0
- data/spec/templates/config/initializers/email_spec.rb +106 -0
- data/spec/templates/config/initializers/mime_types_spec.rb +17 -0
- data/spec/templates/config/initializers/secret_token_spec.rb +36 -0
- data/spec/templates/config/initializers/session_store_spec.rb +36 -0
- data/spec/templates/config/initializers/wrap_parameters_spec.rb +17 -0
- data/spec/templates/config/roodi.yml_spec.rb +92 -0
- data/spec/templates/config/routes_spec.rb +36 -0
- data/spec/templates/config/schedule_spec.rb +22 -0
- data/spec/templates/config.ru_spec.rb +22 -0
- data/spec/templates/db/migrate/create_jobs_spec.rb +17 -0
- data/spec/templates/features/step_definitions/email_steps_spec.rb +17 -0
- data/spec/templates/features/step_definitions/web_steps/browsing_steps_spec.rb +17 -0
- data/spec/templates/features/step_definitions/web_steps/debug_steps_spec.rb +17 -0
- data/spec/templates/features/step_definitions/web_steps/form_steps_spec.rb +17 -0
- data/spec/templates/features/step_definitions/web_steps/step_scoper_spec.rb +17 -0
- data/spec/templates/features/support/email_spec.rb +17 -0
- data/spec/templates/features/support/env_spec.rb +56 -0
- data/spec/templates/features/support/paths_spec.rb +22 -0
- data/spec/templates/features/support/selectors_spec.rb +22 -0
- data/spec/templates/features/support/with_scope_spec.rb +17 -0
- data/spec/templates/lib/tasks/cucumber.rake_spec.rb +17 -0
- data/spec/templates/lib/tasks/test.rake_spec.rb +147 -0
- data/spec/templates/lib/tasks/test_mailer.rake_spec.rb +17 -0
- data/spec/templates/rspec_spec.rb +17 -0
- data/spec/templates/script/delayed_job_spec.rb +17 -0
- data/spec/templates/script/rails_spec.rb +17 -0
- data/spec/templates/spec/factories_spec.rb +27 -0
- data/spec/templates/spec/spec_helper_spec.rb +56 -0
- data/spec/templates/test/test_helper_spec.rb +17 -0
- data/templates/app/controllers/application_controller.rb +3 -0
- data/templates/app/helpers/application_helper.rb +2 -0
- data/templates/app/mailers/test_mailer.rb +7 -0
- data/templates/app/views/test_mailer/test_email.text.erb +4 -0
- data/templates/config/application.rb +32 -0
- data/templates/config/boot.rb +6 -0
- data/templates/config/cucumber.yml +8 -0
- data/templates/config/deploy/production.rb +37 -0
- data/templates/config/deploy.rb +43 -0
- data/templates/config/environment.rb +5 -0
- data/templates/config/environments/development.rb +35 -0
- data/templates/config/environments/production.rb +64 -0
- data/templates/config/environments/test.rb +46 -0
- data/templates/config/initializers/airbrake.rb +9 -0
- data/templates/config/initializers/backtrace_silencers.rb +7 -0
- data/templates/config/initializers/email.rb +10 -0
- data/templates/config/initializers/mime_types.rb +5 -0
- data/templates/config/initializers/secret_token.rb +7 -0
- data/templates/config/initializers/session_store.rb +8 -0
- data/templates/config/initializers/wrap_parameters.rb +14 -0
- data/templates/config/roodi.yml +13 -0
- data/templates/config/routes.rb +3 -0
- data/templates/config/schedule.rb +1 -0
- data/templates/config.ru +4 -0
- data/templates/db/migrate/create_jobs.rb +22 -0
- data/templates/features/step_definitions/email_steps.rb +194 -0
- data/templates/features/step_definitions/web_steps/browsing_steps.rb +82 -0
- data/templates/features/step_definitions/web_steps/debug_steps.rb +3 -0
- data/templates/features/step_definitions/web_steps/form_steps.rb +210 -0
- data/templates/features/step_definitions/web_steps/step_scoper.rb +9 -0
- data/templates/features/support/email.rb +2 -0
- data/templates/features/support/env.rb +55 -0
- data/templates/features/support/paths.rb +27 -0
- data/templates/features/support/selectors.rb +24 -0
- data/templates/features/support/with_scope.rb +6 -0
- data/templates/lib/tasks/cucumber.rake +65 -0
- data/templates/lib/tasks/test.rake +49 -0
- data/templates/lib/tasks/test_mailer.rake +10 -0
- data/templates/rspec +2 -0
- data/templates/script/delayed_job +5 -0
- data/templates/script/rails +6 -0
- data/templates/spec/factories.rb +1 -0
- data/templates/spec/spec_helper.rb +47 -0
- data/templates/test/test_helper.rb +13 -0
- metadata +316 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,259 @@
|
|
1
|
+
module Rapid
|
2
|
+
module App
|
3
|
+
|
4
|
+
class Settings
|
5
|
+
include Rapid::Settings
|
6
|
+
|
7
|
+
setting.string 'name'
|
8
|
+
setting.string 'secret_token'
|
9
|
+
setting.string 'session_cookie_name'
|
10
|
+
setting.string 'timezone'
|
11
|
+
|
12
|
+
setting.code 'controllers.application.body'
|
13
|
+
setting.code 'helpers.application.body'
|
14
|
+
setting.code 'config.body'
|
15
|
+
setting.code 'routes.body'
|
16
|
+
|
17
|
+
setting.namespace 'database', :default => true
|
18
|
+
setting.namespace 'database.sqlite', :default => true
|
19
|
+
setting.namespace 'database.mysql', :default => false
|
20
|
+
setting.namespace 'database.mongoid', :default => false
|
21
|
+
|
22
|
+
setting.namespace 'development', :default => true
|
23
|
+
setting.string 'development.domain', :default => "localhost"
|
24
|
+
setting.integer 'development.port'
|
25
|
+
|
26
|
+
setting.namespace 'test', :default => true
|
27
|
+
setting.string 'test.domain', :default => "www.example.com"
|
28
|
+
setting.integer 'test.port'
|
29
|
+
|
30
|
+
setting.integer 'test.coverage.threshold', :default => 90
|
31
|
+
setting.namespace 'test.unit', :default => true
|
32
|
+
|
33
|
+
setting.namespace 'test.rspec', :default => false
|
34
|
+
setting.code 'test.rspec.factories.body'
|
35
|
+
|
36
|
+
setting.namespace 'test.cucumber', :default => true
|
37
|
+
setting.integer 'test.cucumber.wip.max', :default => 20
|
38
|
+
setting.code 'test.cucumber.selectors.body'
|
39
|
+
setting.code 'test.cucumber.paths.body'
|
40
|
+
|
41
|
+
setting.namespace 'test.roodi', :default => true
|
42
|
+
setting.integer 'test.roodi.method.complexity', :default => 8
|
43
|
+
setting.integer 'test.roodi.method.lines.max', :default => 40
|
44
|
+
setting.integer 'test.roodi.block.complexity', :default => 4
|
45
|
+
setting.integer 'test.roodi.klass.lines.max', :default => 300
|
46
|
+
setting.integer 'test.roodi.module.lines.max', :default => 300
|
47
|
+
setting.integer 'test.roodi.parameters.max', :default => 5
|
48
|
+
|
49
|
+
setting.namespace 'production', :default => true
|
50
|
+
setting.string 'production.domain'
|
51
|
+
setting.integer 'production.port'
|
52
|
+
|
53
|
+
setting.namespace 'assets', :default => true
|
54
|
+
setting.namespace 'paginate', :default => true
|
55
|
+
setting.namespace 'net', :default => true
|
56
|
+
setting.namespace 'net.http', :default => true
|
57
|
+
|
58
|
+
setting.namespace 'i18n', :default => false
|
59
|
+
setting.namespace 'breadcrumbs', :default => false
|
60
|
+
setting.namespace 'upload', :default => false
|
61
|
+
setting.boolean 'upload.private', :default => false
|
62
|
+
|
63
|
+
setting.namespace 'import', :default => false
|
64
|
+
setting.namespace 'import.logs', :default => false
|
65
|
+
|
66
|
+
setting.namespace 'exceptions', :default => false
|
67
|
+
setting.namespace 'exceptions.airbrake', :default => false
|
68
|
+
setting.string 'exceptions.airbrake.api_key'
|
69
|
+
setting.string 'exceptions.airbrake.host'
|
70
|
+
setting.boolean 'exceptions.airbrake.secure'
|
71
|
+
|
72
|
+
setting.namespace 'deploy', :default => false
|
73
|
+
setting.string 'deploy.repository.url'
|
74
|
+
|
75
|
+
setting.namespace 'deploy.production', :default => false
|
76
|
+
setting.string 'deploy.production.domain'
|
77
|
+
setting.string 'deploy.production.path'
|
78
|
+
setting.string 'deploy.production.branch'
|
79
|
+
setting.string 'deploy.production.user'
|
80
|
+
setting.integer 'deploy.production.keep', :default => 5
|
81
|
+
setting.string 'deploy.production.server', :default => 'passenger'
|
82
|
+
setting.string 'deploy.production.bin'
|
83
|
+
setting.string 'deploy.production.rvm.type'
|
84
|
+
setting.string 'deploy.production.rvm.ruby'
|
85
|
+
setting.string 'deploy.production.rvm.gemset'
|
86
|
+
|
87
|
+
|
88
|
+
setting.namespace 'email', :default => false
|
89
|
+
setting.string 'email.smtp.provider'
|
90
|
+
setting.string 'email.smtp.address'
|
91
|
+
setting.string 'email.smtp.domain'
|
92
|
+
setting.string 'email.smtp.username'
|
93
|
+
setting.string 'email.smtp.password'
|
94
|
+
setting.integer 'email.smtp.port', :default => 587
|
95
|
+
setting.string 'email.smtp.authentication', :default => "plain"
|
96
|
+
setting.boolean 'email.smtp.tls', :default => true
|
97
|
+
|
98
|
+
setting.string 'email.test.subject', :default => "Test Email"
|
99
|
+
setting.string 'email.test.message', :default => "Emails are configured correctly!"
|
100
|
+
|
101
|
+
setting.namespace 'scheduler', :default => false
|
102
|
+
setting.code 'scheduler.body'
|
103
|
+
|
104
|
+
setting.namespace 'async', :default => false
|
105
|
+
setting.namespace 'async.delayed_job', :default => false
|
106
|
+
|
107
|
+
validates_presence_of 'name'
|
108
|
+
validates_presence_of 'upload', :if => :import?
|
109
|
+
validates_presence_of 'async', :if => :import?
|
110
|
+
validates_presence_of 'net.http', :if => 'root.exceptions.airbrake?'
|
111
|
+
|
112
|
+
validates_inclusion_of 'timezone', :in => ActiveSupport::TimeZone.all.collect {|z| z.name}, :allow_nil => true
|
113
|
+
validates_inclusion_of 'deploy.production.server', :in => %w(passenger heroku), :allow_nil => true
|
114
|
+
validates_inclusion_of 'email.smtp.provider', :in => %w(google sendgrid), :allow_nil => true
|
115
|
+
validates_inclusion_of 'deploy.production.rvm.type', :in => %w(system user), :allow_nil => true
|
116
|
+
|
117
|
+
def module_name
|
118
|
+
name.camelize if name
|
119
|
+
end
|
120
|
+
|
121
|
+
def module_name= name
|
122
|
+
self.name = name ? name.underscore : nil
|
123
|
+
end
|
124
|
+
|
125
|
+
def rails_all?
|
126
|
+
database.active_record? && assets? && test.unit?
|
127
|
+
end
|
128
|
+
|
129
|
+
def rails_all= bool
|
130
|
+
if bool
|
131
|
+
database.active_record = true
|
132
|
+
assets = true
|
133
|
+
test.unit = true
|
134
|
+
end
|
135
|
+
|
136
|
+
bool
|
137
|
+
end
|
138
|
+
|
139
|
+
setting.class_eval 'database' do
|
140
|
+
|
141
|
+
def active_record?
|
142
|
+
sqlite? || mysql?
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
setting.class_eval 'test' do
|
148
|
+
|
149
|
+
def tasks
|
150
|
+
tasks = []
|
151
|
+
tasks.push 'db:migrate' if root.database.active_record?
|
152
|
+
tasks.push 'rapid:check'
|
153
|
+
tasks.push 'roodi' if roodi?
|
154
|
+
tasks.push 'test' if unit?
|
155
|
+
tasks.push 'spec' if rspec?
|
156
|
+
tasks.push 'cucumber' if cucumber?
|
157
|
+
|
158
|
+
%(%w(#{tasks.join(' ')}))
|
159
|
+
end
|
160
|
+
|
161
|
+
def tasks=
|
162
|
+
# TODO infer the roodi, spec, cucumber settings
|
163
|
+
end
|
164
|
+
|
165
|
+
def tasks_description
|
166
|
+
tasks = []
|
167
|
+
tasks.push 'rapid:check'
|
168
|
+
tasks.push 'roodi' if roodi?
|
169
|
+
tasks.push 'test' if unit?
|
170
|
+
tasks.push 'spec' if rspec?
|
171
|
+
tasks.push 'cucumber' if cucumber?
|
172
|
+
|
173
|
+
if tasks.length > 2
|
174
|
+
last = tasks.pop
|
175
|
+
tasks.push "and #{last}"
|
176
|
+
end
|
177
|
+
|
178
|
+
"Test the application using #{tasks.join(', ')}"
|
179
|
+
end
|
180
|
+
|
181
|
+
def tasks_description= descr
|
182
|
+
# TODO
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
setting.class_eval 'deploy' do
|
188
|
+
|
189
|
+
def rvm?
|
190
|
+
production.rvm?
|
191
|
+
end
|
192
|
+
|
193
|
+
def rvm= bool
|
194
|
+
production.rvm = bool
|
195
|
+
end
|
196
|
+
|
197
|
+
def symlink?
|
198
|
+
root.database.active_record? || root.upload.private?
|
199
|
+
end
|
200
|
+
|
201
|
+
def symlink= bool
|
202
|
+
root.database.active_record = bool
|
203
|
+
root.upload.private = bool
|
204
|
+
end
|
205
|
+
|
206
|
+
def stages
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
def stages= s
|
211
|
+
# TODO infer stages
|
212
|
+
end
|
213
|
+
|
214
|
+
end
|
215
|
+
|
216
|
+
setting.class_eval 'deploy.production' do
|
217
|
+
|
218
|
+
def scheduler?
|
219
|
+
bin? && root.scheduler?
|
220
|
+
end
|
221
|
+
|
222
|
+
def scheduler= s
|
223
|
+
# TODO
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
|
228
|
+
setting.class_eval 'email.smtp' do
|
229
|
+
|
230
|
+
def address
|
231
|
+
case provider
|
232
|
+
when 'google'
|
233
|
+
"smtp.gmail.com"
|
234
|
+
when 'sendgrid'
|
235
|
+
"smtp.sendgrid.net"
|
236
|
+
else
|
237
|
+
self[:address]
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def address= address
|
242
|
+
self.provider = case address
|
243
|
+
when 'smtp.gmail.com'
|
244
|
+
'google'
|
245
|
+
when 'smtp.sendgrid.net'
|
246
|
+
'sendgrid'
|
247
|
+
else
|
248
|
+
nil
|
249
|
+
end
|
250
|
+
|
251
|
+
self[:address] = address
|
252
|
+
end
|
253
|
+
|
254
|
+
end
|
255
|
+
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|
259
|
+
end
|
@@ -0,0 +1,213 @@
|
|
1
|
+
module Rapid
|
2
|
+
module App
|
3
|
+
|
4
|
+
class Skeleton < Rapid::Skeleton::Base
|
5
|
+
|
6
|
+
validate :validate_gemfile_exists
|
7
|
+
validate :validate_routes_file_exists
|
8
|
+
|
9
|
+
def initialize options = {}
|
10
|
+
super App::Settings.new, options.reverse_merge(:file => __FILE__)
|
11
|
+
end
|
12
|
+
|
13
|
+
def bones
|
14
|
+
section :rails
|
15
|
+
section :assets
|
16
|
+
section :email
|
17
|
+
section :database
|
18
|
+
section :development
|
19
|
+
section :test
|
20
|
+
section :production
|
21
|
+
section :exceptions
|
22
|
+
section :deploy
|
23
|
+
section :scheduler
|
24
|
+
section :async
|
25
|
+
section :other
|
26
|
+
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
def rails
|
31
|
+
gem 'rails', '3.2.1'
|
32
|
+
|
33
|
+
template 'app/controllers/application_controller.rb'
|
34
|
+
template 'app/helpers/application_helper.rb'
|
35
|
+
template 'config/application.rb'
|
36
|
+
template 'config/boot.rb'
|
37
|
+
template 'config/environment.rb'
|
38
|
+
template 'config/routes.rb'
|
39
|
+
template 'config.ru'
|
40
|
+
|
41
|
+
template 'config/initializers/backtrace_silencers.rb'
|
42
|
+
template 'config/initializers/mime_types.rb'
|
43
|
+
template 'config/initializers/secret_token.rb'
|
44
|
+
template 'config/initializers/session_store.rb'
|
45
|
+
template 'config/initializers/wrap_parameters.rb'
|
46
|
+
|
47
|
+
script 'script/rails'
|
48
|
+
|
49
|
+
directory 'doc'
|
50
|
+
directory 'lib/tasks'
|
51
|
+
directory 'log'
|
52
|
+
directory 'tmp'
|
53
|
+
end
|
54
|
+
|
55
|
+
def assets
|
56
|
+
gem 'sass-rails', :group => :assets, :if => 'assets'
|
57
|
+
|
58
|
+
if settings.assets?
|
59
|
+
gem 'coffee-rails', :group => :assets
|
60
|
+
gem 'uglifier', :group => :assets
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def email
|
65
|
+
template 'config/initializers/email.rb', :if => 'email'
|
66
|
+
|
67
|
+
template 'app/mailers/test_mailer.rb', :if => 'email.test'
|
68
|
+
if settings.email.test?
|
69
|
+
template 'lib/tasks/test_mailer.rake'
|
70
|
+
view 'test_mailer/test_email.text.erb'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def database
|
75
|
+
directory 'db/migrate', :if => 'database.active_record'
|
76
|
+
|
77
|
+
gem 'mongoid', :if => 'database.mongoid'
|
78
|
+
if settings.database.mongoid?
|
79
|
+
gem 'bson_ext'
|
80
|
+
gem 'SystemTimer'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def development
|
85
|
+
template 'config/environments/development.rb', :if => 'development'
|
86
|
+
end
|
87
|
+
|
88
|
+
def test
|
89
|
+
template 'config/environments/test.rb', :if => 'test'
|
90
|
+
if settings.test?
|
91
|
+
gem 'rapid-core', :groups => [:development, :test]
|
92
|
+
gem 'rapid-app', :groups => [:development, :test]
|
93
|
+
|
94
|
+
section :test_unit
|
95
|
+
section :rspec
|
96
|
+
section :cucumber
|
97
|
+
section :roodi
|
98
|
+
|
99
|
+
template 'lib/tasks/test.rake'
|
100
|
+
gem 'fakeweb', :group => :test, :if => 'settings.net.http'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_unit
|
105
|
+
template 'test/test_helper.rb', :if => 'test.unit'
|
106
|
+
end
|
107
|
+
|
108
|
+
def rspec
|
109
|
+
gem "rspec-rails", :group => :test, :if => 'test.rspec'
|
110
|
+
|
111
|
+
if settings.test.rspec?
|
112
|
+
gem 'database_cleaner', :group => :test if settings.database?
|
113
|
+
gem 'factory_girl_rails', :group => :test if settings.database?
|
114
|
+
|
115
|
+
template 'rspec', :to => ".rspec"
|
116
|
+
template 'spec/factories.rb' if settings.database?
|
117
|
+
template 'spec/spec_helper.rb'
|
118
|
+
directory 'spec/support'
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def cucumber
|
123
|
+
gem 'cucumber-rails', :group => :test, :if => 'test.cucumber'
|
124
|
+
|
125
|
+
if settings.test.cucumber?
|
126
|
+
gem 'capybara', :group => :test
|
127
|
+
gem 'launchy', :group => :test
|
128
|
+
|
129
|
+
template 'config/cucumber.yml'
|
130
|
+
template 'features/step_definitions/email_steps.rb' if settings.email?
|
131
|
+
template 'features/step_definitions/web_steps/browsing_steps.rb'
|
132
|
+
template 'features/step_definitions/web_steps/debug_steps.rb'
|
133
|
+
template 'features/step_definitions/web_steps/form_steps.rb'
|
134
|
+
template 'features/step_definitions/web_steps/step_scoper.rb'
|
135
|
+
|
136
|
+
template 'features/support/email.rb' if settings.email?
|
137
|
+
template 'features/support/env.rb'
|
138
|
+
template 'features/support/paths.rb'
|
139
|
+
template 'features/support/selectors.rb'
|
140
|
+
template 'features/support/with_scope.rb'
|
141
|
+
|
142
|
+
template 'lib/tasks/cucumber.rake'
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def roodi
|
147
|
+
template 'config/roodi.yml', :if => 'test.roodi'
|
148
|
+
|
149
|
+
if settings.test.roodi?
|
150
|
+
gem 'roodi', :group => :test
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def coverage
|
155
|
+
gem 'rcov', :group => :test, :if => 'test.coverage'
|
156
|
+
end
|
157
|
+
|
158
|
+
def production
|
159
|
+
template 'config/environments/production.rb', :if => 'production'
|
160
|
+
end
|
161
|
+
|
162
|
+
def exceptions
|
163
|
+
gem 'airbrake', :if => 'exceptions.airbrake'
|
164
|
+
|
165
|
+
if settings.exceptions.airbrake?
|
166
|
+
template 'config/initializers/airbrake.rb'
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
def deploy
|
171
|
+
gem 'capistrano', :group => :development, :if => 'deploy'
|
172
|
+
|
173
|
+
if settings.deploy?
|
174
|
+
gem 'capistrano-ext', :group => :development
|
175
|
+
|
176
|
+
template 'config/deploy.rb'
|
177
|
+
template 'config/deploy/production.rb' if settings.deploy.production?
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def scheduler
|
182
|
+
gem 'whenever', :if => 'scheduler'
|
183
|
+
if settings.scheduler?
|
184
|
+
template 'config/schedule.rb'
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
def async
|
189
|
+
gem 'delayed_job', :if => 'async.delayed_job'
|
190
|
+
|
191
|
+
if settings.async.delayed_job?
|
192
|
+
script 'script/delayed_job'
|
193
|
+
|
194
|
+
if settings.database.active_record?
|
195
|
+
migration 'create_jobs'
|
196
|
+
gem 'delayed_job_active_record'
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
# TODO resque
|
201
|
+
end
|
202
|
+
|
203
|
+
def other
|
204
|
+
gem 'kaminari', :if => 'paginate'
|
205
|
+
gem 'net_http_exception_fix', :if => 'net.http'
|
206
|
+
gem 'crummy', :if => 'breadcrumbs'
|
207
|
+
gem 'carrierwave', :if => 'upload'
|
208
|
+
end
|
209
|
+
|
210
|
+
end
|
211
|
+
|
212
|
+
end
|
213
|
+
end
|
data/lib/rapid/app.rb
ADDED
data/lib/rapid-app.rb
ADDED
data/rapid-app.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "rapid/app/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "rapid-app"
|
7
|
+
s.version = Rapid::App::VERSION
|
8
|
+
s.authors = ["Dan Cunning"]
|
9
|
+
s.email = ["dancunning@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Rapidly maintain and modify your Rails application}
|
12
|
+
s.description = %q{Rapidly maintain and modify your Rails application}
|
13
|
+
|
14
|
+
s.rubyforge_project = "rapid-app"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
24
|
+
s.add_dependency 'rapid-core'
|
25
|
+
s.add_dependency 'tzinfo'
|
26
|
+
|
27
|
+
# TODO inherit these from rapid
|
28
|
+
s.add_dependency("activesupport", ">= 3.0")
|
29
|
+
s.add_dependency("activemodel", ">= 3.0")
|
30
|
+
s.add_dependency("i18n")
|
31
|
+
s.add_dependency("erubis")
|
32
|
+
s.add_development_dependency "railties"
|
33
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Rapid::App::Skeleton do
|
4
|
+
|
5
|
+
def new_rails_app version
|
6
|
+
FileUtils.rm_rf @skeleton.project_path
|
7
|
+
`cd tmp ; rails _#{version}_ new hello_world --skip-bundle`
|
8
|
+
end
|
9
|
+
|
10
|
+
def project_file path
|
11
|
+
full_path = File.join @skeleton.project_path, path
|
12
|
+
file full_path
|
13
|
+
end
|
14
|
+
|
15
|
+
def template_file path
|
16
|
+
full_path = File.join @skeleton.templates_path, path
|
17
|
+
file full_path
|
18
|
+
end
|
19
|
+
|
20
|
+
def file path
|
21
|
+
File.open(path) {|f| f.read }
|
22
|
+
end
|
23
|
+
|
24
|
+
before do
|
25
|
+
@skeleton = Rapid::App::Skeleton.new(:project_path => 'tmp/hello_world')
|
26
|
+
end
|
27
|
+
|
28
|
+
after do
|
29
|
+
# FileUtils.rm_rf @skeleton.project_path
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should require a name to push" do
|
33
|
+
lambda { @skeleton.push! }.should raise_error(Rapid::InvalidSkeletonError)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should work for rails 3.2.1" do
|
37
|
+
new_rails_app "3.2.1"
|
38
|
+
|
39
|
+
@skeleton.settings.name = "HelloWorld"
|
40
|
+
@skeleton.settings.test.rspec = true
|
41
|
+
@skeleton.push!
|
42
|
+
|
43
|
+
project_file('config.ru').should == %(# This file is used by Rack-based servers to start the application.\n\nrequire ::File.expand_path('../config/environment', __FILE__)\nrun HelloWorld::Application\n)
|
44
|
+
project_file('config/cucumber.yml').should include(%(wip: --tags @wip:20 --wip features))
|
45
|
+
project_file("Gemfile").should include("gem 'rspec-rails', :group => :test")
|
46
|
+
project_file("Gemfile").should include("gem 'rapid-app', :groups => [:development, :test]")
|
47
|
+
project_file(".rspec").should == "--color\n--format documentation\n"
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Rapid::App do
|
4
|
+
|
5
|
+
it "should provide a check helper" do
|
6
|
+
@skeleton = mock('skeleton')
|
7
|
+
Rapid::App::Skeleton.should_receive(:new).and_return(@skeleton)
|
8
|
+
@skeleton.should_receive(:pull)
|
9
|
+
Rapid::App.check
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module MoreStringMatchers
|
2
|
+
|
3
|
+
class EndWith
|
4
|
+
|
5
|
+
def initialize(expected)
|
6
|
+
@expected = expected
|
7
|
+
end
|
8
|
+
|
9
|
+
def matches?(target)
|
10
|
+
len = @expected.length
|
11
|
+
actual = target[target.length - len..-1]
|
12
|
+
actual.should == @expected
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def end_with(expected)
|
18
|
+
EndWith.new(expected)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Rapid::Spec::Template.skeleton_class = Rapid::App::Skeleton
|