bluebase 0.0.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.envrc +1 -0
- data/README.md +67 -12
- data/Rakefile +7 -1
- data/bin/bluebase +13 -0
- data/bin/bundler +16 -0
- data/bin/rake +16 -0
- data/bin/rspec +16 -0
- data/bluebase.gemspec +1 -0
- data/lib/bluebase.rb +3 -6
- data/lib/bluebase/actions.rb +25 -0
- data/lib/bluebase/app_builder.rb +356 -0
- data/lib/bluebase/generators/app_generator.rb +129 -0
- data/lib/bluebase/version.rb +1 -1
- data/spec/fakes/bin/heroku +5 -0
- data/spec/fakes/bin/hub +5 -0
- data/spec/features/github_spec.rb +10 -0
- data/spec/features/heroku_spec.rb +24 -0
- data/spec/features/new_project_spec.rb +68 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/support/bluebase.rb +49 -0
- data/spec/support/fake_github.rb +21 -0
- data/spec/support/fake_heroku.rb +32 -0
- data/templates/.envrc +1 -0
- data/templates/.hound.yml +4 -0
- data/templates/.rspec +2 -0
- data/templates/.rubocop.yml +20 -0
- data/templates/.travis.yml.erb +12 -0
- data/templates/Gemfile.erb +74 -0
- data/templates/Guardfile +43 -0
- data/templates/README.md.erb +30 -0
- data/templates/app/_fb_meta_tags.html.slim +6 -0
- data/templates/app/_flash.html.slim +2 -0
- data/templates/app/_ga_boiler.html.slim +8 -0
- data/templates/app/application.css.scss +12 -0
- data/templates/app/application.html.slim +23 -0
- data/templates/bin/setup +28 -0
- data/templates/bluebase_gitignore +18 -0
- data/templates/config/application.yml.sample.erb +26 -0
- data/templates/config/bluebase_secrets.yml +14 -0
- data/templates/config/database.yml.sample.erb +15 -0
- data/templates/config/database.yml.travis.erb +4 -0
- data/templates/config/devise.rb +298 -0
- data/templates/config/en.yml.erb +19 -0
- data/templates/config/figaro.rb +2 -0
- data/templates/config/i18n-tasks.yml +93 -0
- data/templates/config/smtp.rb +9 -0
- data/templates/config/staging.rb.erb +9 -0
- data/templates/spec/action_mailer.rb +5 -0
- data/templates/spec/database_cleaner_and_factory_girl_lint.rb +26 -0
- data/templates/spec/factory_girl.rb +3 -0
- data/templates/spec/i18n.rb +3 -0
- data/templates/spec/rails_helper.rb +30 -0
- data/templates/spec/spec_helper.rb +17 -0
- metadata +79 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cce8b9840b608aaebdf0183fa3eac8d9fb9af18b
|
4
|
+
data.tar.gz: ad92bc123c41e2f23434b81624a9956ec75ef277
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b53700958a0010816ff6730a20e5dabfd0cd3a98f65691d35ceb970ab06fd5e45fef03e37b58390c98dc5d0b83399a49f954a16c201768024d6af7adff5a7887
|
7
|
+
data.tar.gz: d24f48fd12c0bab0142c9365825939a158c009222d83f6cf3674669c5dcc9ed57642d088d742d14745ffcc2998c2fe78905f46cfc11ab35d9c21dfb8929563d3
|
data/.envrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
PATH_add bin
|
data/README.md
CHANGED
@@ -2,23 +2,78 @@
|
|
2
2
|
|
3
3
|
The base app for Blueprint's Rails apps.
|
4
4
|
|
5
|
-
##
|
6
|
-
|
7
|
-
|
5
|
+
## Features
|
6
|
+
|
7
|
+
Core gems:
|
8
|
+
- [Thin](https://github.com/macournoyer/thin/) for the server
|
9
|
+
- [Postgres](https://rubygems.org/gems/pg) to use postgres as the database
|
10
|
+
- [Figaro](https://github.com/laserlemon/figaro) for environment variables
|
11
|
+
|
12
|
+
Component gems:
|
13
|
+
- [Devise](https://github.com/plataformatec/devise) for user auth
|
14
|
+
- [Simple Form](https://github.com/plataformatec/simple_form) for easier forms
|
15
|
+
- [Gon](https://github.com/gazay/gon) to push data to javascript
|
16
|
+
- [Kaminari](https://github.com/amatsuda/kaminari) for pagination
|
17
|
+
- [Recipient Interceptor](https://github.com/croaky/recipient_interceptor) to stop email sending from staging
|
18
|
+
|
19
|
+
Frontend gems:
|
20
|
+
- [Slim](https://github.com/slim-template/slim-rails) to use the [Slim](http://slim-lang.com/) templating language
|
21
|
+
- [Autoprefixer](https://github.com/ai/autoprefixer-rails) to autogenerate vendor prefixes
|
22
|
+
- [Flutie](https://github.com/thoughtbot/flutie) for the ```body_class``` view helper
|
23
|
+
- [Title](https://github.com/calebthompson/title) for page titles in I18n
|
24
|
+
|
25
|
+
Development gems:
|
26
|
+
- [Annotate](https://github.com/ctran/annotate_models) to annotate models
|
27
|
+
- [FFaker](https://github.com/EmmanuelOga/ffaker) to generate random data
|
28
|
+
- [Better Errors](https://github.com/charliesome/better_errors) + [Binding of Caller](https://github.com/banister/binding_of_caller) for useful error pages
|
29
|
+
- [Quiet Assets](https://github.com/evrone/quiet_assets) to quiet asset rending output in the server
|
30
|
+
- [Spring](https://github.com/rails/spring) for fast commands
|
31
|
+
- [Rubocop](https://github.com/bbatsov/rubocop) for Rails linting
|
32
|
+
- [I18n Tasks](https://github.com/glebm/i18n-tasks) to lint translation files
|
33
|
+
- [Awesome Print](https://github.com/michaeldv/awesome_print) for better console object printing
|
34
|
+
- [Guard](https://github.com/guard/guard) to run tasks on file changes
|
35
|
+
- [Pry](https://github.com/pry/pry) and [Pry Byebug](https://github.com/deivid-rodriguez/pry-byebug) to explore objects and debug
|
36
|
+
|
37
|
+
Test gems:
|
38
|
+
- [RSpec](https://github.com/rspec/rspec-rails) for specs
|
39
|
+
- [Capybara](https://github.com/jnicklas/capybara) for integration tests
|
40
|
+
- [FactoryGirl](https://github.com/thoughtbot/factory_girl) for test data
|
41
|
+
- [Shoulda Matchers](https://github.com/thoughtbot/shoulda) for common RSpec matchers
|
42
|
+
- Launchy to use ```save_and_open_page``` in Capybara
|
43
|
+
- [Database Cleaner](https://github.com/DatabaseCleaner/database_cleaner) to clear the database for specs
|
44
|
+
- [CodeClimate Test Reporter](https://github.com/codeclimate/ruby-test-reporter) to track test coverage
|
45
|
+
|
46
|
+
Production gems/features (most of these require setup):
|
47
|
+
- New Relic for monitoring performance
|
48
|
+
- Rollbar for error logging
|
49
|
+
- Rails 12Factor for Heroku
|
50
|
+
|
51
|
+
Other features:
|
52
|
+
- Staging environment config
|
53
|
+
- Email config using SMTP
|
54
|
+
- The ```./bin/setup``` convention for new developer setup
|
55
|
+
- Rails' flashes set up and in application layout
|
56
|
+
- Configuration for Rubocop/[Hound](https://houndci.com/)
|
57
|
+
- A Guardfile set up with [Livereload](https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei?hl=en), RSpec, and Rubocop
|
58
|
+
- A few nice time formats set up for localization
|
59
|
+
- ```Rack::Deflater``` to compress responses with Gzip
|
60
|
+
- A low database connection pool limit
|
61
|
+
- ```t()``` and ```l()``` in specs without prefixing with I18n
|
62
|
+
- An automatically-created ```SECRET_KEY_BASE``` environment variable in all environments.
|
63
|
+
- Configuration for Travis continuous integration.
|
64
|
+
- Config for Google Analytics
|
8
65
|
|
9
|
-
|
10
|
-
|
11
|
-
And then execute:
|
66
|
+
## Installation
|
12
67
|
|
13
|
-
|
68
|
+
Run
|
14
69
|
|
15
|
-
|
70
|
+
gem install bluebase
|
16
71
|
|
17
|
-
|
72
|
+
Then you can run
|
18
73
|
|
19
|
-
|
74
|
+
bluebase app_name
|
20
75
|
|
21
|
-
|
76
|
+
To create an app called ```app_name```. Optionally append ```-G repo_name``` and ```-H``` to create a Github repo and staging + production Heroku apps, respectively.
|
22
77
|
|
23
78
|
## Contributing
|
24
79
|
|
@@ -30,7 +85,7 @@ advance for your help!
|
|
30
85
|
**[Cal Blueprint](http://www.calblueprint.org/)** is a student-run UC Berkeley organization devoted to matching the skills of its members to our desire to see social good enacted in our community. Each semester, teams of 4-5 students work closely with a non-profit to bring technological solutions to the problems they face every day.
|
31
86
|
|
32
87
|
## Credits
|
33
|
-
|
88
|
+
Bluebase is a fork of thoughtbot's [suspenders](https://github.com/thoughtbot/suspenders)
|
34
89
|
|
35
90
|
## License
|
36
91
|
|
data/Rakefile
CHANGED
data/bin/bluebase
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
source_path = (Pathname.new(__FILE__).dirname + '../lib').expand_path
|
5
|
+
$LOAD_PATH << source_path
|
6
|
+
|
7
|
+
require 'bluebase'
|
8
|
+
|
9
|
+
templates_root = File.expand_path(File.join("..", "templates"), File.dirname(__FILE__))
|
10
|
+
Bluebase::AppGenerator.source_root templates_root
|
11
|
+
Bluebase::AppGenerator.source_paths << Rails::Generators::AppGenerator.source_root << templates_root
|
12
|
+
|
13
|
+
Bluebase::AppGenerator.start
|
data/bin/bundler
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'bundler' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('bluebase', 'bundler')
|
data/bin/rake
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'rake' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('bluebase', 'rake')
|
data/bin/rspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'rspec' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('bluebase', 'rspec')
|
data/bluebase.gemspec
CHANGED
@@ -26,5 +26,6 @@ Bluebase is Blueprint's base Rails app. We use it internally to get a jump start
|
|
26
26
|
spec.add_runtime_dependency "bundler", "~> 1.6"
|
27
27
|
|
28
28
|
spec.add_development_dependency "rspec", "~> 3.1", ">= 3.1.0"
|
29
|
+
spec.add_development_dependency "pry", "~> 0.10"
|
29
30
|
spec.add_development_dependency "capybara", "~> 2.4", ">= 2.4.4"
|
30
31
|
end
|
data/lib/bluebase.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Bluebase
|
2
|
+
module Actions
|
3
|
+
def replace_in_file(relative_path, find, replace)
|
4
|
+
path = File.join(destination_root, relative_path)
|
5
|
+
contents = IO.read(path)
|
6
|
+
unless contents.gsub!(find, replace)
|
7
|
+
raise "#{find.inspect} not found in #{relative_path}"
|
8
|
+
end
|
9
|
+
File.open(path, "w") { |file| file.write(contents) }
|
10
|
+
end
|
11
|
+
|
12
|
+
def action_mailer_host(rails_env, host)
|
13
|
+
host_config = "config.action_mailer.default_url_options = { host: '#{host}' }"
|
14
|
+
configure_environment(rails_env, host_config)
|
15
|
+
end
|
16
|
+
|
17
|
+
def configure_environment(rails_env, config)
|
18
|
+
inject_into_file(
|
19
|
+
"config/environments/#{rails_env}.rb",
|
20
|
+
"\n\n #{config}",
|
21
|
+
before: "\nend"
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,356 @@
|
|
1
|
+
module Bluebase
|
2
|
+
class AppBuilder < Rails::AppBuilder
|
3
|
+
include Bluebase::Actions
|
4
|
+
|
5
|
+
#########################################################
|
6
|
+
# Root directory files
|
7
|
+
#########################################################
|
8
|
+
def readme
|
9
|
+
template "README.md.erb", "README.md"
|
10
|
+
end
|
11
|
+
|
12
|
+
def replace_gemfile
|
13
|
+
remove_file "Gemfile"
|
14
|
+
template "Gemfile.erb", "Gemfile"
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_envrc
|
18
|
+
copy_file ".envrc", ".envrc"
|
19
|
+
end
|
20
|
+
|
21
|
+
def replace_gitignore
|
22
|
+
remove_file ".gitignore"
|
23
|
+
copy_file "bluebase_gitignore", ".gitignore"
|
24
|
+
end
|
25
|
+
|
26
|
+
def add_rubocop_and_hound_config
|
27
|
+
copy_file ".hound.yml", ".hound.yml"
|
28
|
+
copy_file ".rubocop.yml", ".rubocop.yml"
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_rvm_config
|
32
|
+
create_file ".ruby-gemset", "#{app_path}\n"
|
33
|
+
create_file ".ruby-version", "#{Bluebase::RUBY_VERSION}\n"
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_travis_config
|
37
|
+
template ".travis.yml.erb", ".travis.yml"
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_guardfile
|
41
|
+
copy_file "Guardfile", "Guardfile"
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_dot_rspec
|
45
|
+
copy_file ".rspec", ".rspec"
|
46
|
+
end
|
47
|
+
|
48
|
+
#########################################################
|
49
|
+
# app/ directory files
|
50
|
+
#########################################################
|
51
|
+
def add_vendor_dirs
|
52
|
+
%w(app/assets/javascripts/vendor app/assets/stylesheets/vendor).each do |dir|
|
53
|
+
run "mkdir #{dir}"
|
54
|
+
run "touch #{dir}/.keep"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def replace_application_css_with_scss
|
59
|
+
base_dir = "app/assets/stylesheets"
|
60
|
+
remove_file "#{base_dir}/application.css"
|
61
|
+
copy_file "app/application.css.scss", "#{base_dir}/application.css.scss"
|
62
|
+
end
|
63
|
+
|
64
|
+
def add_application_folder_and_files_to_views
|
65
|
+
base_dir = "app/views/application"
|
66
|
+
empty_directory base_dir
|
67
|
+
copy_file "app/_flash.html.slim", "#{base_dir}/_flash.html.slim"
|
68
|
+
copy_file "app/_ga_boiler.html.slim", "#{base_dir}/_ga_boiler.html.slim"
|
69
|
+
copy_file "app/_fb_meta_tags.html.slim", "#{base_dir}/_fb_meta_tags.html.slim"
|
70
|
+
end
|
71
|
+
|
72
|
+
def replace_application_erb_with_slim
|
73
|
+
base_dir = "app/views/layouts"
|
74
|
+
remove_file "#{base_dir}/application.html.erb"
|
75
|
+
copy_file "app/application.html.slim", "#{base_dir}/application.html.slim"
|
76
|
+
end
|
77
|
+
|
78
|
+
#########################################################
|
79
|
+
# bin/ directory files
|
80
|
+
#########################################################
|
81
|
+
def add_setup_to_bin
|
82
|
+
copy_file "bin/setup", "bin/setup"
|
83
|
+
run "chmod a+x bin/setup"
|
84
|
+
end
|
85
|
+
|
86
|
+
#########################################################
|
87
|
+
# config/ directory files
|
88
|
+
#########################################################
|
89
|
+
def configure_application_environment
|
90
|
+
config = <<-RUBY
|
91
|
+
|
92
|
+
config.generators do |generate|
|
93
|
+
generate.helper false
|
94
|
+
generate.javascript_engine false
|
95
|
+
generate.request_specs false
|
96
|
+
generate.routing_specs false
|
97
|
+
generate.stylesheets false
|
98
|
+
generate.test_framework :rspec
|
99
|
+
generate.view_specs false
|
100
|
+
end
|
101
|
+
|
102
|
+
RUBY
|
103
|
+
inject_into_class "config/application.rb", "Application", config
|
104
|
+
|
105
|
+
config = <<-RUBY
|
106
|
+
config.active_record.default_timezone = :utc
|
107
|
+
RUBY
|
108
|
+
inject_into_class "config/application.rb", "Application", config
|
109
|
+
|
110
|
+
config = <<-RUBY
|
111
|
+
config.i18n.enforce_available_locales = true
|
112
|
+
RUBY
|
113
|
+
inject_into_class "config/application.rb", "Application", config
|
114
|
+
|
115
|
+
config = <<-RUBY
|
116
|
+
config.action_controller.action_on_unpermitted_parameters = :raise
|
117
|
+
RUBY
|
118
|
+
|
119
|
+
inject_into_class "config/application.rb", "Application", config
|
120
|
+
end
|
121
|
+
|
122
|
+
def configure_development_environment
|
123
|
+
replace_in_file "config/environments/development.rb",
|
124
|
+
"raise_delivery_errors = false", "raise_delivery_errors = true"
|
125
|
+
inject_into_file "config/environments/development.rb",
|
126
|
+
" # Don't send emails in development\n config.action_mailer.perform_deliveries = false",
|
127
|
+
after: "raise_delivery_errors = true\n"
|
128
|
+
raise_on_missing_translations_in "development"
|
129
|
+
action_mailer_host "development", "localhost:3000"
|
130
|
+
end
|
131
|
+
|
132
|
+
def configure_test_environment
|
133
|
+
raise_on_missing_translations_in "test"
|
134
|
+
end
|
135
|
+
|
136
|
+
def configure_production_environment
|
137
|
+
prepend_file "config/environments/production.rb",
|
138
|
+
%{require Rails.root.join("config/smtp")\n}
|
139
|
+
|
140
|
+
config = <<-RUBY
|
141
|
+
|
142
|
+
config.action_mailer.delivery_method = :smtp
|
143
|
+
config.action_mailer.smtp_settings = SMTP_SETTINGS
|
144
|
+
RUBY
|
145
|
+
inject_into_file "config/environments/production.rb", config,
|
146
|
+
after: "config.action_mailer.raise_delivery_errors = false"
|
147
|
+
|
148
|
+
config = <<-RUBY
|
149
|
+
|
150
|
+
# Enable deflate / gzip compression of controller-generated responses
|
151
|
+
config.middleware.use Rack::Deflater
|
152
|
+
RUBY
|
153
|
+
inject_into_file "config/environments/production.rb", config,
|
154
|
+
after: "config.serve_static_assets = false\n"
|
155
|
+
|
156
|
+
action_mailer_host "production", "please-change-me.com"
|
157
|
+
end
|
158
|
+
|
159
|
+
def add_staging_environment
|
160
|
+
template "config/staging.rb.erb", "config/environments/staging.rb"
|
161
|
+
end
|
162
|
+
|
163
|
+
def add_devise_config
|
164
|
+
copy_file "config/devise.rb", "config/initializers/devise.rb"
|
165
|
+
end
|
166
|
+
|
167
|
+
def add_figaro_config
|
168
|
+
copy_file "config/figaro.rb", "config/initializers/figaro.rb"
|
169
|
+
end
|
170
|
+
|
171
|
+
def replace_en_yml
|
172
|
+
file = "config/locales/en.yml"
|
173
|
+
remove_file file
|
174
|
+
template "config/en.yml.erb", file
|
175
|
+
end
|
176
|
+
|
177
|
+
def add_application_yml
|
178
|
+
template "config/application.yml.sample.erb", "config/application.yml.sample"
|
179
|
+
|
180
|
+
template "config/application.yml.sample.erb", "config/application.yml"
|
181
|
+
replace_in_file "config/application.yml",
|
182
|
+
"# Copy this file into application.yml and change env variables as necessary.",
|
183
|
+
"# Change env variables as necessary."
|
184
|
+
|
185
|
+
template "config/application.yml.sample.erb", "config/application.yml.travis"
|
186
|
+
replace_in_file "config/application.yml.travis",
|
187
|
+
"# Copy this file into application.yml and change env variables as necessary.",
|
188
|
+
"# Change env variables as necessary for Travis."
|
189
|
+
end
|
190
|
+
|
191
|
+
def add_database_yml
|
192
|
+
template "config/database.yml.sample.erb", "config/database.yml.sample"
|
193
|
+
|
194
|
+
remove_file "config/database.yml"
|
195
|
+
template "config/database.yml.sample.erb", "config/database.yml"
|
196
|
+
replace_in_file "config/database.yml",
|
197
|
+
"# and then copy the file into database.yml", ""
|
198
|
+
end
|
199
|
+
|
200
|
+
def add_travis_database_yml
|
201
|
+
template "config/database.yml.travis.erb", "config/database.yml.travis"
|
202
|
+
end
|
203
|
+
|
204
|
+
def add_i18n_tasks_yml
|
205
|
+
file = "config/i18n-tasks.yml"
|
206
|
+
copy_file file, file
|
207
|
+
end
|
208
|
+
|
209
|
+
def replace_secrets_yml
|
210
|
+
file = "config/secrets.yml"
|
211
|
+
remove_file file
|
212
|
+
copy_file "config/bluebase_secrets.yml", file
|
213
|
+
end
|
214
|
+
|
215
|
+
def add_smtp_settings
|
216
|
+
file = "config/smtp.rb"
|
217
|
+
copy_file file, file
|
218
|
+
end
|
219
|
+
|
220
|
+
def remove_routes_comment_lines
|
221
|
+
replace_in_file "config/routes.rb",
|
222
|
+
/Rails\.application\.routes\.draw do.*end/m,
|
223
|
+
"Rails.application.routes.draw do\nend"
|
224
|
+
end
|
225
|
+
|
226
|
+
#########################################################
|
227
|
+
# spec/ directory files
|
228
|
+
#########################################################
|
229
|
+
def add_spec_dirs
|
230
|
+
empty_directory "spec"
|
231
|
+
empty_directory_with_keep_file "spec/features"
|
232
|
+
empty_directory_with_keep_file "spec/factories"
|
233
|
+
end
|
234
|
+
|
235
|
+
def configure_rspec
|
236
|
+
%w(spec/rails_helper.rb spec/spec_helper.rb).each do |file|
|
237
|
+
copy_file file, file
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def configure_factorygirl
|
242
|
+
copy_file "spec/factory_girl.rb", "spec/support/factory_girl.rb"
|
243
|
+
end
|
244
|
+
|
245
|
+
def configure_actionmailer
|
246
|
+
copy_file "spec/action_mailer.rb", "spec/support/action_mailer.rb"
|
247
|
+
end
|
248
|
+
|
249
|
+
def configure_i18n
|
250
|
+
copy_file "spec/i18n.rb", "spec/support/i18n.rb"
|
251
|
+
end
|
252
|
+
|
253
|
+
def configure_database_cleaner
|
254
|
+
copy_file "spec/database_cleaner_and_factory_girl_lint.rb",
|
255
|
+
"spec/support/database_cleaner_and_factory_girl_lint.rb"
|
256
|
+
end
|
257
|
+
|
258
|
+
#########################################################
|
259
|
+
# git/heroku setup
|
260
|
+
#########################################################
|
261
|
+
def git_init
|
262
|
+
run 'git init'
|
263
|
+
end
|
264
|
+
|
265
|
+
def create_github_repo(repo_name)
|
266
|
+
path_addition = override_path_for_tests
|
267
|
+
run "#{path_addition} hub create #{repo_name}"
|
268
|
+
end
|
269
|
+
|
270
|
+
def create_heroku_apps
|
271
|
+
run_heroku "create #{heroku_app_name :production}", "production"
|
272
|
+
run_heroku "create #{heroku_app_name :staging}", "staging"
|
273
|
+
run_heroku "config:add RACK_ENV=staging RAILS_ENV=staging", "staging"
|
274
|
+
end
|
275
|
+
|
276
|
+
def set_heroku_remotes
|
277
|
+
remotes = <<-SHELL
|
278
|
+
|
279
|
+
# Set up the staging and production apps.
|
280
|
+
#{join_heroku_app :staging}
|
281
|
+
#{join_heroku_app :production}
|
282
|
+
SHELL
|
283
|
+
|
284
|
+
append_file "bin/setup", remotes
|
285
|
+
end
|
286
|
+
|
287
|
+
def set_heroku_env_variables
|
288
|
+
config = <<-SHELL
|
289
|
+
# Sets Heroku env variables
|
290
|
+
figaro heroku:set -a #{heroku_app_name :production} -e production
|
291
|
+
figaro heroku:set -a #{heroku_app_name :staging} -e production
|
292
|
+
SHELL
|
293
|
+
append_file "bin/setup", config
|
294
|
+
end
|
295
|
+
|
296
|
+
def add_heroku_addons
|
297
|
+
config = <<-SHELL
|
298
|
+
|
299
|
+
# Heroku addons for production
|
300
|
+
heroku addons:add mandrill --app #{heroku_app_name :production}
|
301
|
+
heroku addons:add newrelic:stark --app #{heroku_app_name :production}
|
302
|
+
heroku addons:add rollbar --app #{heroku_app_name :production}
|
303
|
+
SHELL
|
304
|
+
append_file "bin/setup", config
|
305
|
+
end
|
306
|
+
|
307
|
+
def set_memory_management_variable
|
308
|
+
%w(staging production).each do |environment|
|
309
|
+
run_heroku "config:add NEW_RELIC_AGGRESSIVE_KEEPALIVE=1", environment
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
#########################################################
|
314
|
+
# Helper methods
|
315
|
+
#########################################################
|
316
|
+
private
|
317
|
+
|
318
|
+
def raise_on_missing_translations_in(environment)
|
319
|
+
config = "config.action_view.raise_on_missing_translations = true"
|
320
|
+
|
321
|
+
uncomment_lines("config/environments/#{environment}.rb", config)
|
322
|
+
end
|
323
|
+
|
324
|
+
def run_heroku(command, environment)
|
325
|
+
path_addition = override_path_for_tests
|
326
|
+
run "#{path_addition} heroku #{command} --remote #{environment}"
|
327
|
+
end
|
328
|
+
|
329
|
+
def heroku_app_name(environment)
|
330
|
+
"#{app_name.gsub '_', '-'}-#{environment}"
|
331
|
+
end
|
332
|
+
|
333
|
+
def join_heroku_app(environment)
|
334
|
+
name = heroku_app_name environment
|
335
|
+
<<-SHELL
|
336
|
+
if heroku join --app #{name} &> /dev/null; then
|
337
|
+
git remote add #{environment} git@heroku.com:#{name}.git || true
|
338
|
+
printf 'You are a collaborator on the "#{name}" Heroku app\n'
|
339
|
+
else
|
340
|
+
printf 'Ask for access to the "#{name}" Heroku app\n'
|
341
|
+
fi
|
342
|
+
SHELL
|
343
|
+
end
|
344
|
+
|
345
|
+
def generate_secret
|
346
|
+
SecureRandom.hex(64)
|
347
|
+
end
|
348
|
+
|
349
|
+
def override_path_for_tests
|
350
|
+
if ENV['TESTING']
|
351
|
+
support_bin = File.expand_path(File.join('..', '..', 'spec', 'fakes', 'bin'))
|
352
|
+
"PATH=#{support_bin}:$PATH"
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|
356
|
+
end
|