/
app_generator.rb
194 lines (161 loc) · 4.98 KB
/
app_generator.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
require 'rails/generators'
require 'rails/generators/rails/app/app_generator'
module Suspenders
class AppGenerator < Rails::Generators::AppGenerator
class_option :database, :type => :string, :aliases => '-d', :default => 'postgresql',
:desc => "Preconfigure for selected database (options: #{DATABASES.join('/')})"
class_option :heroku, :type => :boolean, :aliases => '-H', :default => false,
:desc => 'Create staging and production Heroku apps'
class_option :github, :type => :string, :aliases => '-G', :default => nil,
:desc => 'Create Github repository and add remote origin pointed to repo'
class_option :skip_test_unit, :type => :boolean, :aliases => '-T', :default => true,
:desc => 'Skip Test::Unit files'
def finish_template
invoke :suspenders_customization
super
end
def suspenders_customization
invoke :remove_files_we_dont_need
invoke :customize_gemfile
invoke :setup_database
invoke :setup_development_environment
invoke :setup_test_environment
invoke :setup_production_environment
invoke :setup_staging_environment
invoke :create_suspenders_views
invoke :setup_coffeescript
invoke :configure_app
invoke :setup_stylesheets
invoke :copy_miscellaneous_files
invoke :customize_error_pages
invoke :remove_routes_comment_lines
invoke :setup_git
invoke :create_heroku_apps
invoke :create_github_repo
invoke :outro
end
def remove_files_we_dont_need
build :remove_public_index
build :remove_rails_logo_image
end
def customize_gemfile
build :replace_gemfile
build :set_ruby_to_version_being_used
bundle_command 'install --binstubs=bin/stubs'
end
def setup_database
say 'Setting up database'
if 'postgresql' == options[:database]
build :use_postgres_config_template
end
build :create_database
end
def setup_development_environment
say 'Setting up the development environment'
build :raise_on_delivery_errors
build :raise_on_unpermitted_parameters
build :provide_setup_script
build :configure_generators
end
def setup_test_environment
say 'Setting up the test environment'
build :enable_factory_girl_syntax
build :test_factories_first
build :generate_rspec
build :configure_rspec
build :configure_background_jobs_for_rspec
build :enable_database_cleaner
build :configure_capybara_webkit
end
def setup_production_environment
say 'Setting up the production environment'
build :configure_smtp
end
def setup_staging_environment
say 'Setting up the staging environment'
build :setup_staging_environment
end
def create_suspenders_views
say 'Creating suspenders views'
build :create_partials_directory
build :create_shared_flashes
build :create_shared_javascripts
build :create_application_layout
end
def setup_coffeescript
say 'Setting up CoffeeScript defaults'
build :remove_turbolinks
build :create_common_javascripts
end
def configure_app
say 'Configuring app'
build :configure_action_mailer
build :blacklist_active_record_attributes
build :configure_strong_parameters
build :configure_time_zone
build :configure_time_formats
build :configure_rack_timeout
build :disable_xml_params
build :setup_default_rake_task
build :configure_unicorn
build :setup_foreman
end
def setup_stylesheets
say 'Set up stylesheets'
build :setup_stylesheets
end
def setup_git
say 'Initializing git'
invoke :setup_gitignore
invoke :init_git
end
def create_heroku_apps
if options[:heroku]
say 'Creating Heroku apps'
build :create_heroku_apps
build :set_heroku_remotes
end
end
def create_github_repo
if options[:github]
say 'Creating Github repo'
build :create_github_repo, options[:github]
end
end
def setup_gitignore
build :gitignore_files
end
def init_git
build :init_git
end
def copy_libraries
say 'Copying libraries'
build :copy_libraries
end
def copy_miscellaneous_files
say 'Copying miscellaneous support files'
build :copy_miscellaneous_files
end
def customize_error_pages
say 'Customizing the 500/404/422 pages'
build :customize_error_pages
end
def remove_routes_comment_lines
build :remove_routes_comment_lines
end
def outro
say 'Congratulations! You just pulled our suspenders.'
say "Remember to run 'rails generate airbrake' with your API key."
end
def run_bundle
# Let's not: We'll bundle manually at the right spot
end
protected
def get_builder_class
Suspenders::AppBuilder
end
def using_active_record?
!options[:skip_active_record]
end
end
end