tirantes 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +8 -0
  4. data/CONTRIBUTING.md +38 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +140 -0
  7. data/LICENSE +21 -0
  8. data/NEWS.md +125 -0
  9. data/README.md +160 -0
  10. data/Rakefile +8 -0
  11. data/bin/tirantes +16 -0
  12. data/features/github_repo.feature +8 -0
  13. data/features/heroku_true.feature +9 -0
  14. data/features/rake_clean.feature +15 -0
  15. data/features/step_definitions/tirantes_steps.rb +68 -0
  16. data/features/support/bin/heroku +5 -0
  17. data/features/support/bin/hub +5 -0
  18. data/features/support/env.rb +10 -0
  19. data/features/support/fake_github.rb +21 -0
  20. data/features/support/fake_heroku.rb +21 -0
  21. data/lib/tirantes/actions.rb +40 -0
  22. data/lib/tirantes/app_builder.rb +322 -0
  23. data/lib/tirantes/generators/app_generator.rb +203 -0
  24. data/lib/tirantes/version.rb +3 -0
  25. data/templates/Gemfile_clean +50 -0
  26. data/templates/Procfile +2 -0
  27. data/templates/README.md.erb +11 -0
  28. data/templates/_flashes.html.erb +5 -0
  29. data/templates/_javascript.html.erb +10 -0
  30. data/templates/application.css.scss +14 -0
  31. data/templates/background_jobs_minitest.rb +19 -0
  32. data/templates/bin_setup +18 -0
  33. data/templates/config_locales_en.yml +11 -0
  34. data/templates/database_cleaner_minitest.rb +15 -0
  35. data/templates/disable_xml_params.rb +3 -0
  36. data/templates/errors.rb +28 -0
  37. data/templates/exception_notification.rb +8 -0
  38. data/templates/javascripts/prefilled_input.js +59 -0
  39. data/templates/postgresql_database.yml.erb +12 -0
  40. data/templates/puma.rb +13 -0
  41. data/templates/rack_timeout.rb +1 -0
  42. data/templates/sample.env +14 -0
  43. data/templates/secret_token.rb.erb +5 -0
  44. data/templates/simple_form_purecss.rb +13 -0
  45. data/templates/smtp.rb +10 -0
  46. data/templates/test_helper.rb +39 -0
  47. data/templates/tirantes_gitignore +17 -0
  48. data/templates/tirantes_layout.html.erb.erb +15 -0
  49. data/tirantes.gemspec +33 -0
  50. metadata +163 -0
@@ -0,0 +1,21 @@
1
+ class FakeGithub
2
+ RECORDER = File.expand_path(File.join('..', '..', 'tmp', 'hub_commands'), File.dirname(__FILE__))
3
+
4
+ def initialize(args)
5
+ @args = args
6
+ end
7
+
8
+ def run!
9
+ File.open(RECORDER, 'a') do |file|
10
+ file.write @args.join(' ')
11
+ end
12
+ end
13
+
14
+ def self.clear!
15
+ FileUtils.rm_rf RECORDER
16
+ end
17
+
18
+ def self.has_created_repo?(repo_name)
19
+ File.open(RECORDER, 'r').read.include?("create #{repo_name}")
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ class FakeHeroku
2
+ RECORDER = File.expand_path(File.join('..', '..', 'tmp', 'heroku_commands'), File.dirname(__FILE__))
3
+
4
+ def initialize(args)
5
+ @args = args
6
+ end
7
+
8
+ def run!
9
+ File.open(RECORDER, 'a') do |file|
10
+ file.write @args.join(' ')
11
+ end
12
+ end
13
+
14
+ def self.clear!
15
+ FileUtils.rm_rf RECORDER
16
+ end
17
+
18
+ def self.has_created_app?(app_name)
19
+ File.open(RECORDER, 'r').read.include?("create #{app_name}")
20
+ end
21
+ end
@@ -0,0 +1,40 @@
1
+ module Tirantes
2
+ module Actions
3
+ def concat_file(source, destination)
4
+ contents = IO.read(find_in_source_paths(source))
5
+ append_file destination, contents
6
+ end
7
+
8
+ def replace_in_file(relative_path, find, replace)
9
+ path = File.join(destination_root, relative_path)
10
+ contents = IO.read(path)
11
+ unless contents.gsub!(find, replace)
12
+ raise "#{find.inspect} not found in #{relative_path}"
13
+ end
14
+ File.open(path, "w") { |file| file.write(contents) }
15
+ end
16
+
17
+ def action_mailer_host(rails_env, host)
18
+ host_config = "config.action_mailer.default_url_options = { host: '#{host}' }"
19
+ configure_environment(rails_env, host_config)
20
+ end
21
+
22
+ def configure_environment(rails_env, config)
23
+ inject_into_file(
24
+ "config/environments/#{rails_env}.rb",
25
+ "\n\n #{config}",
26
+ before: "\nend"
27
+ )
28
+ end
29
+
30
+ def download_file(uri_string, destination)
31
+ uri = URI.parse(uri_string)
32
+ http = Net::HTTP.new(uri.host, uri.port)
33
+ http.use_ssl = true if uri_string =~ /^https/
34
+ request = Net::HTTP::Get.new(uri.path)
35
+ contents = http.request(request).body
36
+ path = File.join(destination_root, destination)
37
+ File.open(path, "w") { |file| file.write(contents) }
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,322 @@
1
+ module Tirantes
2
+ class AppBuilder < Rails::AppBuilder
3
+ include Tirantes::Actions
4
+
5
+ def readme
6
+ template 'README.md.erb', 'README.md'
7
+ end
8
+
9
+ def remove_public_index
10
+ remove_file 'public/index.html'
11
+ end
12
+
13
+ def remove_rails_logo_image
14
+ remove_file 'app/assets/images/rails.png'
15
+ end
16
+
17
+ def raise_on_delivery_errors
18
+ replace_in_file 'config/environments/development.rb',
19
+ 'raise_delivery_errors = false', 'raise_delivery_errors = true'
20
+ end
21
+
22
+ def raise_on_unpermitted_parameters
23
+ action_on_unpermitted_parameters = <<-RUBY
24
+
25
+ # Raise an ActionController::UnpermittedParameters exception when
26
+ # a parameter is not explcitly permitted but is passed anyway.
27
+ config.action_controller.action_on_unpermitted_parameters = :raise
28
+ RUBY
29
+ inject_into_file(
30
+ "config/environments/development.rb",
31
+ action_on_unpermitted_parameters,
32
+ before: "\nend"
33
+ )
34
+ end
35
+
36
+ def provide_setup_script
37
+ foreman = <<-RUBY
38
+ # Set up Rails app. Run this script immediately after cloning the codebase.
39
+ # https://github.com/thoughtbot/guides/tree/master/protocol
40
+
41
+ # Set up configurable environment variables
42
+ if [ ! -f .env ]; then
43
+ cp .sample.env .env
44
+ fi
45
+
46
+ # Pick a port for Foreman
47
+ echo "port: 7000" > .foreman
48
+
49
+ # Set up DNS via Pow
50
+ if [ -d ~/.pow ]
51
+ then
52
+ echo 7000 > ~/.pow/`basename $PWD`
53
+ else
54
+ echo "Pow not set up but the team uses it for this project. Setup: http://goo.gl/RaDPO"
55
+ fi
56
+ RUBY
57
+
58
+ append_file 'bin/setup', foreman
59
+ run 'chmod a+x bin/setup'
60
+ end
61
+
62
+ def configure_generators
63
+ config = <<-RUBY
64
+ config.generators do |generate|
65
+ generate.helper false
66
+ generate.javascript_engine false
67
+ generate.request_specs false
68
+ generate.routing_specs false
69
+ generate.stylesheets false
70
+ generate.test_framework :mini_test, :spec => true, :fixture => true
71
+ generate.view_specs false
72
+ end
73
+
74
+ RUBY
75
+
76
+ inject_into_class 'config/application.rb', 'Application', config
77
+ end
78
+
79
+ def configure_exception_notifier
80
+ copy_file 'exception_notification.rb', 'config/initializers/exception_notification.rb'
81
+ end
82
+
83
+ def configure_smtp
84
+ copy_file 'smtp.rb', 'config/initializers/smtp.rb'
85
+
86
+ prepend_file 'config/environments/production.rb',
87
+ "require Rails.root.join('config/initializers/smtp')\n"
88
+
89
+ config = <<-RUBY
90
+
91
+ config.action_mailer.delivery_method = :smtp
92
+ config.action_mailer.smtp_settings = SMTP_SETTINGS
93
+ RUBY
94
+
95
+ inject_into_file 'config/environments/production.rb', config,
96
+ :after => 'config.action_mailer.raise_delivery_errors = false'
97
+ end
98
+
99
+ def setup_staging_environment
100
+ run 'cp config/environments/production.rb config/environments/staging.rb'
101
+
102
+ prepend_file 'config/environments/staging.rb',
103
+ "Mail.register_interceptor RecipientInterceptor.new(ENV['EMAIL_RECIPIENTS'])\n"
104
+ end
105
+
106
+ def setup_secret_token
107
+ template 'secret_token.rb.erb', 'config/initializers/secret_token.rb', :force => true
108
+ end
109
+
110
+ def create_partials_directory
111
+ empty_directory 'app/views/application'
112
+ end
113
+
114
+ def create_shared_flashes
115
+ copy_file '_flashes.html.erb', 'app/views/application/_flashes.html.erb'
116
+ end
117
+
118
+ def create_shared_javascripts
119
+ copy_file '_javascript.html.erb', 'app/views/application/_javascript.html.erb'
120
+ end
121
+
122
+ def create_application_layout
123
+ template 'tirantes_layout.html.erb.erb',
124
+ 'app/views/layouts/application.html.erb',
125
+ :force => true
126
+ end
127
+
128
+ def remove_turbolinks
129
+ replace_in_file 'app/assets/javascripts/application.js',
130
+ /\/\/= require turbolinks\n/,
131
+ ''
132
+ end
133
+
134
+ def create_common_javascripts
135
+ directory 'javascripts', 'app/assets/javascripts'
136
+ end
137
+
138
+ def use_postgres_config_template
139
+ template 'postgresql_database.yml.erb', 'config/database.yml',
140
+ :force => true
141
+ end
142
+
143
+ def create_database
144
+ bundle_command 'exec rake db:create'
145
+ end
146
+
147
+ def replace_gemfile
148
+ remove_file 'Gemfile'
149
+ copy_file 'Gemfile_clean', 'Gemfile'
150
+ end
151
+
152
+ def set_ruby_to_version_being_used
153
+ inject_into_file 'Gemfile', "\n\nruby '#{RUBY_VERSION}'",
154
+ after: /source 'https:\/\/rubygems.org'/
155
+ end
156
+
157
+ def enable_database_cleaner
158
+ copy_file 'database_cleaner_minitest.rb', 'test/support/database_cleaner.rb'
159
+ end
160
+
161
+ def configure_minitest
162
+ remove_file 'test/test_helper.rb'
163
+ copy_file 'test_helper.rb', 'test/test_helper.rb'
164
+ end
165
+
166
+ def configure_background_jobs_for_minitest
167
+ copy_file 'background_jobs_minitest.rb', 'test/support/background_jobs.rb'
168
+ run 'rails g delayed_job:active_record'
169
+ end
170
+
171
+ def configure_time_zone
172
+ config = <<-RUBY
173
+ config.active_record.default_timezone = :utc
174
+
175
+ RUBY
176
+ inject_into_class 'config/application.rb', 'Application', config
177
+ end
178
+
179
+ def configure_pretty_formatter
180
+ config = <<-RUBY
181
+ config.log_formatter = PrettyFormatter.formatter
182
+
183
+ RUBY
184
+ inject_into_class 'config/application.rb', 'Application', config
185
+ end
186
+
187
+ def configure_simple_form
188
+ run 'rails g simple_form:install'
189
+ copy_file 'simple_form_purecss.rb', 'config/simple_form_purecss.rb'
190
+ end
191
+
192
+ def configure_time_formats
193
+ remove_file 'config/locales/en.yml'
194
+ copy_file 'config_locales_en.yml', 'config/locales/en.yml'
195
+ end
196
+
197
+ def configure_rack_timeout
198
+ copy_file 'rack_timeout.rb', 'config/initializers/rack_timeout.rb'
199
+ end
200
+
201
+ def configure_action_mailer
202
+ action_mailer_host 'development', "#{app_name}.local"
203
+ action_mailer_host 'test', 'www.example.com'
204
+ action_mailer_host 'staging', "staging.#{app_name}.com"
205
+ action_mailer_host 'production', "#{app_name}.com"
206
+ end
207
+
208
+ def generate_minitest
209
+ generate 'rails g mini_test:install'
210
+ end
211
+
212
+ def configure_puma
213
+ copy_file 'puma.rb', 'config/puma.rb'
214
+ end
215
+
216
+ def setup_foreman
217
+ copy_file 'sample.env', '.sample.env'
218
+ copy_file 'Procfile', 'Procfile'
219
+ end
220
+
221
+ def setup_stylesheets
222
+ remove_file 'app/assets/stylesheets/application.css'
223
+ copy_file 'application.css.scss',
224
+ 'app/assets/stylesheets/application.css.scss'
225
+ [
226
+ 'app/assets/stylesheets/base',
227
+ 'app/assets/stylesheets/layout',
228
+ 'app/assets/stylesheets/modules'
229
+ ].each do |dir|
230
+ run "mkdir #{dir}"
231
+ run "touch #{dir}/.keep"
232
+ end
233
+ end
234
+
235
+ def gitignore_files
236
+ remove_file '.gitignore'
237
+ copy_file 'tirantes_gitignore', '.gitignore'
238
+ [
239
+ 'app/views/pages',
240
+ 'test/lib',
241
+ 'test/controllers',
242
+ 'test/models',
243
+ 'test/integration',
244
+ 'test/helpers',
245
+ 'test/support/matchers',
246
+ 'test/support/mixins',
247
+ 'test/support/shared_examples'
248
+ ].each do |dir|
249
+ run "mkdir #{dir}"
250
+ run "touch #{dir}/.keep"
251
+ end
252
+ end
253
+
254
+ def init_git
255
+ run 'git init'
256
+ end
257
+
258
+ def create_heroku_apps
259
+ path_addition = override_path_for_tests
260
+ run "#{path_addition} heroku create #{app_name}-production --remote=production"
261
+ run "#{path_addition} heroku create #{app_name}-staging --remote=staging"
262
+ run "#{path_addition} heroku config:add RACK_ENV=staging RAILS_ENV=staging --remote=staging"
263
+ end
264
+
265
+ def set_heroku_remotes
266
+ remotes = <<-RUBY
267
+
268
+ # Set up staging and production git remotes
269
+ git remote add staging git@heroku.com:#{app_name}-staging.git
270
+ git remote add production git@heroku.com:#{app_name}-production.git
271
+ RUBY
272
+
273
+ append_file 'bin/setup', remotes
274
+ end
275
+
276
+ def create_github_repo(repo_name)
277
+ path_addition = override_path_for_tests
278
+ run "#{path_addition} hub create #{repo_name}"
279
+ end
280
+
281
+ def copy_miscellaneous_files
282
+ copy_file 'errors.rb', 'config/initializers/errors.rb'
283
+ end
284
+
285
+ def customize_error_pages
286
+ meta_tags =<<-EOS
287
+ <meta charset='utf-8' />
288
+ <meta name='ROBOTS' content='NOODP' />
289
+ EOS
290
+
291
+ %w(500 404 422).each do |page|
292
+ inject_into_file "public/#{page}.html", meta_tags, :after => "<head>\n"
293
+ replace_in_file "public/#{page}.html", /<!--.+-->\n/, ''
294
+ end
295
+ end
296
+
297
+ def remove_routes_comment_lines
298
+ replace_in_file 'config/routes.rb',
299
+ /Rails\.application\.routes\.draw do.*end/m,
300
+ "Rails\.application.routes.draw do\nend"
301
+ end
302
+
303
+ def disable_xml_params
304
+ copy_file 'disable_xml_params.rb', 'config/initializers/disable_xml_params.rb'
305
+ end
306
+
307
+ def setup_default_rake_task
308
+ append_file 'Rakefile' do
309
+ "task(:default).clear\ntask :default => ['test:all']\n"
310
+ end
311
+ end
312
+
313
+ private
314
+
315
+ def override_path_for_tests
316
+ if ENV['TESTING']
317
+ support_bin = File.expand_path(File.join('..', '..', '..', 'features', 'support', 'bin'))
318
+ "PATH=#{support_bin}:$PATH"
319
+ end
320
+ end
321
+ end
322
+ end
@@ -0,0 +1,203 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/rails/app/app_generator'
3
+
4
+ module Tirantes
5
+ class AppGenerator < Rails::Generators::AppGenerator
6
+ class_option :database, :type => :string, :aliases => '-d', :default => 'postgresql',
7
+ :desc => "Preconfigure for selected database (options: #{DATABASES.join('/')})"
8
+
9
+ class_option :heroku, :type => :boolean, :aliases => '-H', :default => false,
10
+ :desc => 'Create staging and production Heroku apps'
11
+
12
+ class_option :github, :type => :string, :aliases => '-G', :default => nil,
13
+ :desc => 'Create Github repository and add remote origin pointed to repo'
14
+
15
+ class_option :skip_test_unit, :type => :boolean, :aliases => '-T', :default => true,
16
+ :desc => 'Skip Test::Unit files'
17
+
18
+ def finish_template
19
+ invoke :tirantes_customization
20
+ super
21
+ end
22
+
23
+ def tirantes_customization
24
+ invoke :remove_files_we_dont_need
25
+ invoke :customize_gemfile
26
+ invoke :setup_database
27
+ invoke :setup_development_environment
28
+ invoke :setup_test_environment
29
+ invoke :setup_production_environment
30
+ invoke :setup_staging_environment
31
+ invoke :create_tirantes_views
32
+ invoke :setup_coffeescript
33
+ invoke :configure_app
34
+ invoke :setup_stylesheets
35
+ invoke :copy_miscellaneous_files
36
+ invoke :customize_error_pages
37
+ invoke :remove_routes_comment_lines
38
+ invoke :setup_git
39
+ invoke :create_heroku_apps
40
+ invoke :create_github_repo
41
+ invoke :outro
42
+ end
43
+
44
+ def remove_files_we_dont_need
45
+ build :remove_public_index
46
+ build :remove_rails_logo_image
47
+ end
48
+
49
+ def customize_gemfile
50
+ build :replace_gemfile
51
+ build :set_ruby_to_version_being_used
52
+ bundle_command 'install'
53
+ end
54
+
55
+ def setup_database
56
+ say 'Setting up database'
57
+
58
+ if 'postgresql' == options[:database]
59
+ build :use_postgres_config_template
60
+ end
61
+
62
+ build :create_database
63
+
64
+ say 'If you want to use pg text search, remember to'
65
+ say 'to generate and migrate pg_search_documents table'
66
+ say 'rails g pg_search:migration:multisearch'
67
+ say 'rake db:migrate'
68
+ end
69
+
70
+ def setup_development_environment
71
+ say 'Setting up the development environment'
72
+ build :raise_on_delivery_errors
73
+ build :raise_on_unpermitted_parameters
74
+ build :provide_setup_script
75
+ build :configure_generators
76
+ end
77
+
78
+ def setup_test_environment
79
+ say 'Setting up the test environment'
80
+ build :generate_minitest
81
+ build :configure_minitest
82
+ build :configure_background_jobs_for_minitest
83
+ build :enable_database_cleaner
84
+ build :configure_capybara_webkit
85
+ end
86
+
87
+ def setup_production_environment
88
+ say 'Setting up the production environment'
89
+ build :configure_smtp
90
+ build :configure_exception_notifier
91
+ end
92
+
93
+ def setup_staging_environment
94
+ say 'Setting up the staging environment'
95
+ build :setup_staging_environment
96
+ end
97
+
98
+ def create_tirantes_views
99
+ say 'Creating tirantes views'
100
+ build :create_partials_directory
101
+ build :create_shared_flashes
102
+ build :create_shared_javascripts
103
+ build :create_application_layout
104
+ end
105
+
106
+ def setup_coffeescript
107
+ say 'Setting up CoffeeScript defaults'
108
+ build :remove_turbolinks
109
+ build :create_common_javascripts
110
+ end
111
+
112
+ def configure_app
113
+ say 'Configuring app'
114
+ build :configure_action_mailer
115
+ build :blacklist_active_record_attributes
116
+ build :configure_strong_parameters
117
+ build :configure_time_zone
118
+ build :configure_time_formats
119
+ build :configure_pretty_formatter
120
+ build :configure_simple_form
121
+ build :configure_rack_timeout
122
+ build :disable_xml_params
123
+ build :setup_secret_token
124
+ build :setup_default_rake_task
125
+ build :configure_puma
126
+ build :setup_foreman
127
+ end
128
+
129
+ def setup_stylesheets
130
+ say 'Set up stylesheets'
131
+ build :setup_stylesheets
132
+ end
133
+
134
+ def setup_git
135
+ if !options[:skip_git]
136
+ say 'Initializing git'
137
+ invoke :setup_gitignore
138
+ invoke :init_git
139
+ end
140
+ end
141
+
142
+ def create_heroku_apps
143
+ if options[:heroku]
144
+ say 'Creating Heroku apps'
145
+ build :create_heroku_apps
146
+ build :set_heroku_remotes
147
+ end
148
+ end
149
+
150
+ def create_github_repo
151
+ if !options[:skip_git] && options[:github]
152
+ say 'Creating Github repo'
153
+ build :create_github_repo, options[:github]
154
+ end
155
+ end
156
+
157
+ def setup_gitignore
158
+ build :gitignore_files
159
+ end
160
+
161
+ def init_git
162
+ build :init_git
163
+ end
164
+
165
+ def copy_libraries
166
+ say 'Copying libraries'
167
+ build :copy_libraries
168
+ end
169
+
170
+ def copy_miscellaneous_files
171
+ say 'Copying miscellaneous support files'
172
+ build :copy_miscellaneous_files
173
+ end
174
+
175
+ def customize_error_pages
176
+ say 'Customizing the 500/404/422 pages'
177
+ build :customize_error_pages
178
+ end
179
+
180
+ def remove_routes_comment_lines
181
+ build :remove_routes_comment_lines
182
+ end
183
+
184
+ def outro
185
+ say 'Congratulations! You just pulled our tirantes.'
186
+ say 'Please execute bin/setup to complete this application setup'
187
+ end
188
+
189
+ def run_bundle
190
+ # Let's not: We'll bundle manually at the right spot
191
+ end
192
+
193
+ protected
194
+
195
+ def get_builder_class
196
+ Tirantes::AppBuilder
197
+ end
198
+
199
+ def using_active_record?
200
+ !options[:skip_active_record]
201
+ end
202
+ end
203
+ end
@@ -0,0 +1,3 @@
1
+ module Tirantes
2
+ VERSION = '1.0.7'
3
+ end
@@ -0,0 +1,50 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'coffee-rails'
4
+ gem 'delayed_job_active_record', '>= 4.0.0'
5
+ gem 'email_validator'
6
+ gem 'exception_notification'
7
+ gem 'high_voltage'
8
+ gem 'jquery-rails'
9
+ gem 'pg'
10
+ gem 'pg_search'
11
+ gem 'pretty_formatter'
12
+ gem 'puma'
13
+ gem 'purecss-rails'
14
+ gem 'rack-timeout'
15
+ gem 'rails', '>= 4.2.0'
16
+ gem 'recipient_interceptor'
17
+ gem 'restful_controller', require: 'restful'
18
+ gem 'sass-rails'
19
+ gem 'simple_form'
20
+ gem 'slim'
21
+ gem 'uglifier'
22
+
23
+ group :development do
24
+ gem 'byebug'
25
+ gem 'web-console', '~> 2.0'
26
+ gem 'better_errors'
27
+ gem 'binding_of_caller'
28
+ gem 'foreman'
29
+ end
30
+
31
+ group :development, :test do
32
+ gem 'spring'
33
+ gem 'minitest-rails', '~> 2.0.0'
34
+ end
35
+
36
+ group :test do
37
+ gem 'database_cleaner'
38
+ gem 'launchy'
39
+ #gem 'minitest-colorize'
40
+ #gem 'minitest-focus'
41
+ gem 'minitest-rails-capybara'
42
+ gem 'poltergeist'
43
+ gem 'simplecov'
44
+ gem 'webmock'
45
+ end
46
+
47
+ group :staging, :production do
48
+ gem 'newrelic_rpm', '>= 3.6.7'
49
+ gem 'rails_12factor'
50
+ end
@@ -0,0 +1,2 @@
1
+ web: bundle exec puma -p $PORT -C ./config/puma.rb
2
+ worker: bundle exec rake jobs:work
@@ -0,0 +1,11 @@
1
+ # <%= app_name %>
2
+
3
+
4
+ ### Guides and style
5
+
6
+ Use the following guides for getting things done, programming well, and
7
+ programming in style.
8
+
9
+ * [Protocol](http://github.com/thoughtbot/guides/blob/master/protocol)
10
+ * [Best Practices](http://github.com/thoughtbot/guides/blob/master/best-practices)
11
+ * [Style](http://github.com/thoughtbot/guides/blob/master/style)
@@ -0,0 +1,5 @@
1
+ <div id="flash">
2
+ <% flash.each do |key, value| -%>
3
+ <div id="flash_<%= key %>"><%= value %></div>
4
+ <% end -%>
5
+ </div>
@@ -0,0 +1,10 @@
1
+ <%= javascript_include_tag :application %>
2
+
3
+ <%= yield :javascript %>
4
+
5
+ <% if Rails.env.test? %>
6
+ <%= javascript_tag do %>
7
+ $.fx.off = true;
8
+ $.ajaxSetup({ async: false });
9
+ <% end %>
10
+ <% end %>