bluebase 0.0.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|