rails-replicator 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/.gitignore +85 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +87 -0
  4. data/LICENSE +21 -0
  5. data/README.md +41 -0
  6. data/bin/replicator +16 -0
  7. data/lib/replicator/actions.rb +40 -0
  8. data/lib/replicator/app_builder.rb +337 -0
  9. data/lib/replicator/generators/app_generator.rb +207 -0
  10. data/lib/replicator/version.rb +3 -0
  11. data/replicator.gemspec +29 -0
  12. data/templates/Gemfile_clean +68 -0
  13. data/templates/Procfile +2 -0
  14. data/templates/README.md.erb +5 -0
  15. data/templates/_flashes.html.slim.erb +13 -0
  16. data/templates/_javascript.html.slim.erb +7 -0
  17. data/templates/ability.rb +15 -0
  18. data/templates/admin_base_controller.rb +14 -0
  19. data/templates/admin_dashboard_controller.rb +4 -0
  20. data/templates/application.css.sass +12 -0
  21. data/templates/application.html.slim.erb +24 -0
  22. data/templates/application.js +8 -0
  23. data/templates/application_helper.rb +5 -0
  24. data/templates/background_jobs_rspec.rb +19 -0
  25. data/templates/bin_setup +26 -0
  26. data/templates/config_locales_en.yml +11 -0
  27. data/templates/database.yml.erb +12 -0
  28. data/templates/database_cleaner_rspec.rb +21 -0
  29. data/templates/devise/confirmations/new.html.slim +12 -0
  30. data/templates/devise/mailer/confirmation_instructions.html.erb +5 -0
  31. data/templates/devise/mailer/reset_password_instructions.html.erb +8 -0
  32. data/templates/devise/mailer/unlock_instructions.html.erb +7 -0
  33. data/templates/devise/passwords/edit.html.slim +19 -0
  34. data/templates/devise/passwords/new.html.slim +14 -0
  35. data/templates/devise/registrations/edit.html.slim +36 -0
  36. data/templates/devise/registrations/new.html.slim +22 -0
  37. data/templates/devise/sessions/new.html.slim +20 -0
  38. data/templates/devise/shared/_links.html.slim +24 -0
  39. data/templates/devise/unlocks/new.html.slim +13 -0
  40. data/templates/devise_login.html.slim +20 -0
  41. data/templates/devise_shared_links.html.slim +24 -0
  42. data/templates/disable_xml_params.rb +3 -0
  43. data/templates/errors.rb +28 -0
  44. data/templates/factories_spec.rb +13 -0
  45. data/templates/factories_spec_rake_task.rb +9 -0
  46. data/templates/factory_girl_syntax_rspec.rb +3 -0
  47. data/templates/gitignore +85 -0
  48. data/templates/rack_timeout.rb +1 -0
  49. data/templates/routes.rb.erb +15 -0
  50. data/templates/sample.env +2 -0
  51. data/templates/smtp.rb +10 -0
  52. data/templates/spec_helper.rb +25 -0
  53. data/templates/stylesheets/layout/.keep +0 -0
  54. data/templates/stylesheets/typography/.keep +0 -0
  55. data/templates/stylesheets/typography/_forms.css.sass +2 -0
  56. data/templates/stylesheets/widgets/.keep +0 -0
  57. data/templates/unicorn.rb +26 -0
  58. metadata +140 -0
data/.gitignore ADDED
@@ -0,0 +1,85 @@
1
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ # Ignore bundler config.
8
+ /.bundle
9
+
10
+ # Ignore the default SQLite database.
11
+ /db/*.sqlite3
12
+ /db/*.sqlite3-journal
13
+
14
+ # Ignore all logfiles and tempfiles.
15
+ /log/*.log
16
+ /tmp
17
+ [12:00 PM]: ~/Dropbox/Code/apps/foobar : cat ../chimera/.gitignore
18
+ # bundler state
19
+ /.bundle
20
+ /vendor/bundle/
21
+ /vendor/ruby/
22
+
23
+ # minimal Rails specific artifacts
24
+ db/*.sqlite3
25
+ /log/*
26
+ /tmp/*
27
+
28
+ # various artifacts
29
+ **.war
30
+ *.rbc
31
+ *.sassc
32
+ .rspec
33
+ .redcar/
34
+ .sass-cache
35
+ /config/config.yml
36
+ /config/database.yml
37
+ /coverage.data
38
+ /coverage/
39
+ /db/*.javadb/
40
+ /db/*.sqlite3
41
+ /doc/api/
42
+ /doc/app/
43
+ /doc/features.html
44
+ /doc/specs.html
45
+ /public/cache
46
+ /public/stylesheets/compiled
47
+ /public/system/*
48
+ /spec/tmp/*
49
+ /cache
50
+ /capybara*
51
+ /capybara-*.html
52
+ /gems
53
+ /specifications
54
+ rerun.txt
55
+ pickle-email-*.html
56
+
57
+ # If you find yourself ignoring temporary files generated by your text editor
58
+ # or operating system, you probably want to add a global ignore instead:
59
+ # git config --global core.excludesfile ~/.gitignore_global
60
+ #
61
+ # Here are some files you may want to ignore globally:
62
+
63
+ # scm revert files
64
+ **.orig
65
+
66
+ # Mac finder artifacts
67
+ .DS_Store
68
+
69
+ # Netbeans project directory
70
+ /nbproject/
71
+
72
+ # RubyMine project files
73
+ .idea
74
+
75
+ # Textmate project files
76
+ /*.tmproj
77
+
78
+ # vim artifacts
79
+ **.swp
80
+
81
+ # Ignore application configuration
82
+ /config/application.yml
83
+
84
+ # Ignore Heroku environment file
85
+ .env
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,87 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ replicator (0.1.0)
5
+ bundler (~> 1.3)
6
+ rails (= 4.0.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actionmailer (4.0.0)
12
+ actionpack (= 4.0.0)
13
+ mail (~> 2.5.3)
14
+ actionpack (4.0.0)
15
+ activesupport (= 4.0.0)
16
+ builder (~> 3.1.0)
17
+ erubis (~> 2.7.0)
18
+ rack (~> 1.5.2)
19
+ rack-test (~> 0.6.2)
20
+ activemodel (4.0.0)
21
+ activesupport (= 4.0.0)
22
+ builder (~> 3.1.0)
23
+ activerecord (4.0.0)
24
+ activemodel (= 4.0.0)
25
+ activerecord-deprecated_finders (~> 1.0.2)
26
+ activesupport (= 4.0.0)
27
+ arel (~> 4.0.0)
28
+ activerecord-deprecated_finders (1.0.3)
29
+ activesupport (4.0.0)
30
+ i18n (~> 0.6, >= 0.6.4)
31
+ minitest (~> 4.2)
32
+ multi_json (~> 1.3)
33
+ thread_safe (~> 0.1)
34
+ tzinfo (~> 0.3.37)
35
+ arel (4.0.0)
36
+ atomic (1.1.14)
37
+ builder (3.1.4)
38
+ erubis (2.7.0)
39
+ hike (1.2.3)
40
+ i18n (0.6.5)
41
+ mail (2.5.4)
42
+ mime-types (~> 1.16)
43
+ treetop (~> 1.4.8)
44
+ mime-types (1.25)
45
+ minitest (4.7.5)
46
+ multi_json (1.8.0)
47
+ polyglot (0.3.3)
48
+ rack (1.5.2)
49
+ rack-test (0.6.2)
50
+ rack (>= 1.0)
51
+ rails (4.0.0)
52
+ actionmailer (= 4.0.0)
53
+ actionpack (= 4.0.0)
54
+ activerecord (= 4.0.0)
55
+ activesupport (= 4.0.0)
56
+ bundler (>= 1.3.0, < 2.0)
57
+ railties (= 4.0.0)
58
+ sprockets-rails (~> 2.0.0)
59
+ railties (4.0.0)
60
+ actionpack (= 4.0.0)
61
+ activesupport (= 4.0.0)
62
+ rake (>= 0.8.7)
63
+ thor (>= 0.18.1, < 2.0)
64
+ rake (10.1.0)
65
+ sprockets (2.10.0)
66
+ hike (~> 1.2)
67
+ multi_json (~> 1.0)
68
+ rack (~> 1.0)
69
+ tilt (~> 1.1, != 1.3.0)
70
+ sprockets-rails (2.0.0)
71
+ actionpack (>= 3.0)
72
+ activesupport (>= 3.0)
73
+ sprockets (~> 2.8)
74
+ thor (0.18.1)
75
+ thread_safe (0.1.3)
76
+ atomic
77
+ tilt (1.4.1)
78
+ treetop (1.4.15)
79
+ polyglot
80
+ polyglot (>= 0.3.1)
81
+ tzinfo (0.3.37)
82
+
83
+ PLATFORMS
84
+ ruby
85
+
86
+ DEPENDENCIES
87
+ replicator!
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2010-2012 Mike Burns and thoughtbot, inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # Replicator
2
+
3
+ Ruby on Rails application generator used by the [Teleporter](http://teleporter.io) team, based on [thoughtbot/suspenders](https://github.com/thoughtbot/suspenders)
4
+
5
+ ## Installation
6
+
7
+ Installation is simple, just install the `replicator` gem:
8
+
9
+ ```bash
10
+ gem install replicator
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```bash
16
+ replicator appname
17
+ ```
18
+
19
+ To get a list of options, type `replicator -h`
20
+
21
+ ## Dependencies
22
+
23
+ Depends on:
24
+
25
+ - Ruby 2.0.0 or greater
26
+
27
+ ## Issues
28
+
29
+ If you have issues using Replicator, please create an [issue on Github](https://github.com/teleporter/replicator/issues).
30
+
31
+ ## Credits
32
+
33
+ Based heavily on [Thoughtbot's](http://thoughtbot.com) [suspenders gem](https://github.com/thoughtbot/suspenders).
34
+
35
+ Modified to fit within [Teleporter](http://teleporter.io)'s workflow.
36
+
37
+ ![Teleporter](http://f.cl.ly/items/2c0j3A311n1T3b201e0V/teleporter-400px-padded.png)
38
+
39
+ ## License
40
+
41
+ Licensed under the MIT license (see the `LICENSE` file).
data/bin/replicator ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.join('..', 'lib', 'replicator', 'generators', 'app_generator'), File.dirname(__FILE__))
4
+ require File.expand_path(File.join('..', 'lib', 'replicator', 'actions'), File.dirname(__FILE__))
5
+ require File.expand_path(File.join('..', 'lib', 'replicator', 'app_builder'), File.dirname(__FILE__))
6
+
7
+ if ['create', '--create'].include? ARGV[0]
8
+ ARGV.shift
9
+ puts "[WARNING] the replicator create argument is deprecated. Just use `replicator #{ARGV.join}` instead"
10
+ end
11
+
12
+ templates_root = File.expand_path(File.join("..", "templates"), File.dirname(__FILE__))
13
+ Replicator::AppGenerator.source_root templates_root
14
+ Replicator::AppGenerator.source_paths << Rails::Generators::AppGenerator.source_root << templates_root
15
+
16
+ Replicator::AppGenerator.start
@@ -0,0 +1,40 @@
1
+ module Replicator
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,337 @@
1
+ module Replicator
2
+ class AppBuilder < Rails::AppBuilder
3
+ include Replicator::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
+ configure_environment 'development',
24
+ 'config.action_controller.action_on_unpermitted_parameters = :raise'
25
+ end
26
+
27
+ def provide_setup_script
28
+ copy_file 'bin_setup', 'bin/setup'
29
+ run 'chmod a+x bin/setup'
30
+ end
31
+
32
+ def configure_generators
33
+ config = <<-RUBY
34
+ config.generators do |generate|
35
+ generate.helper false
36
+ generate.javascript_engine false
37
+ generate.request_specs false
38
+ generate.routing_specs false
39
+ generate.stylesheets false
40
+ generate.test_framework :rspec
41
+ generate.view_specs false
42
+ end
43
+
44
+ RUBY
45
+
46
+ inject_into_class 'config/application.rb', 'Application', config
47
+ end
48
+
49
+ def enable_factory_girl_syntax
50
+ copy_file 'factory_girl_syntax_rspec.rb', 'spec/support/factory_girl.rb'
51
+ end
52
+
53
+ def test_factories_first
54
+ copy_file 'factories_spec.rb', 'spec/models/factories_spec.rb'
55
+ append_file 'Rakefile', factories_spec_rake_task
56
+ end
57
+
58
+ def configure_smtp
59
+ copy_file 'smtp.rb', 'config/initializers/smtp.rb'
60
+
61
+ prepend_file 'config/environments/production.rb',
62
+ "require Rails.root.join('config/initializers/smtp')\n"
63
+
64
+ config = <<-RUBY
65
+
66
+ config.action_mailer.delivery_method = :smtp
67
+ config.action_mailer.smtp_settings = SMTP_SETTINGS
68
+ RUBY
69
+
70
+ inject_into_file 'config/environments/production.rb', config,
71
+ :after => 'config.action_mailer.raise_delivery_errors = false'
72
+ end
73
+
74
+ def setup_staging_environment
75
+ run 'cp config/environments/production.rb config/environments/staging.rb'
76
+
77
+ prepend_file 'config/environments/staging.rb',
78
+ "Mail.register_interceptor RecipientInterceptor.new(ENV['EMAIL_RECIPIENTS'])\n"
79
+ end
80
+
81
+ def create_partials_directory
82
+ empty_directory 'app/views/application'
83
+ end
84
+
85
+ def create_shared_flashes
86
+ copy_file '_flashes.html.slim.erb', 'app/views/application/_flashes.html.slim'
87
+ end
88
+
89
+ def create_shared_javascripts
90
+ copy_file '_javascript.html.slim.erb', 'app/views/application/_javascript.html.slim'
91
+ end
92
+
93
+ def create_application_layout
94
+ remove_file 'app/views/layouts/application.html.erb'
95
+ template 'application.html.slim.erb',
96
+ 'app/views/layouts/application.html.slim',
97
+ force: true
98
+ end
99
+
100
+ # def remove_turbolinks
101
+ # replace_in_file 'app/assets/javascripts/application.js',
102
+ # /\/\/= require turbolinks\n/,
103
+ # ''
104
+ # end
105
+
106
+ def create_common_javascripts
107
+ directory 'javascripts', 'app/assets/javascripts'
108
+ template 'application.js',
109
+ 'app/assets/javascripts/application.js',
110
+ force: true
111
+ end
112
+
113
+ def use_postgres_config_template
114
+ template 'database.yml.erb', 'config/database.yml',
115
+ force: true
116
+ end
117
+
118
+ def create_database
119
+ bundle_command 'exec rake db:create'
120
+ end
121
+
122
+ def replace_gemfile
123
+ remove_file 'Gemfile'
124
+ copy_file 'Gemfile_clean', 'Gemfile'
125
+ end
126
+
127
+ def set_ruby_to_version_being_used
128
+ inject_into_file 'Gemfile', "\n\nruby '#{RUBY_VERSION}'",
129
+ after: /source 'https:\/\/rubygems.org'/
130
+ end
131
+
132
+ def setup_rvmrc
133
+ run "rvm use ruby-#{RUBY_VERSION}@#{app_name} --ruby-version --create"
134
+ end
135
+
136
+ def enable_database_cleaner
137
+ copy_file 'database_cleaner_rspec.rb', 'spec/support/database_cleaner.rb'
138
+ end
139
+
140
+ def configure_rspec
141
+ remove_file 'spec/spec_helper.rb'
142
+ copy_file 'spec_helper.rb', 'spec/spec_helper.rb'
143
+ end
144
+
145
+ def use_rspec_binstub
146
+ run 'bundle binstub rspec-core'
147
+ run 'rm bin/autospec'
148
+ end
149
+
150
+ def configure_background_jobs_for_rspec
151
+ copy_file 'background_jobs_rspec.rb', 'spec/support/background_jobs.rb'
152
+ run 'rails g delayed_job:active_record'
153
+ end
154
+
155
+ def configure_time_zone
156
+ config = <<-RUBY
157
+ config.active_record.default_timezone = :utc
158
+
159
+ RUBY
160
+ inject_into_class 'config/application.rb', 'Application', config
161
+ end
162
+
163
+ def configure_time_formats
164
+ remove_file 'config/locales/en.yml'
165
+ copy_file 'config_locales_en.yml', 'config/locales/en.yml'
166
+ end
167
+
168
+ def configure_rack_timeout
169
+ copy_file 'rack_timeout.rb', 'config/initializers/rack_timeout.rb'
170
+ end
171
+
172
+ def configure_action_mailer
173
+ action_mailer_host 'development', "#{app_name}.local"
174
+ action_mailer_host 'test', 'www.example.com'
175
+ action_mailer_host 'staging', "staging.#{app_name}.com"
176
+ action_mailer_host 'production', "#{app_name}.com"
177
+ end
178
+
179
+ def generate_rspec
180
+ generate 'rspec:install'
181
+ end
182
+
183
+ # def generate_clearance
184
+ # generate 'clearance:install'
185
+ # end
186
+
187
+ def configure_unicorn
188
+ copy_file 'unicorn.rb', 'config/unicorn.rb'
189
+ end
190
+
191
+ def setup_foreman
192
+ copy_file 'sample.env', '.ample.env'
193
+ copy_file 'Procfile', 'Procfile'
194
+ end
195
+
196
+ def setup_stylesheets
197
+ remove_file 'app/assets/stylesheets/application.css'
198
+ copy_file 'application.css.sass',
199
+ 'app/assets/stylesheets/application.css.sass'
200
+ directory 'stylesheets', 'app/assets/stylesheets'
201
+ end
202
+
203
+ def gitignore_files
204
+ remove_file '.gitignore'
205
+ copy_file 'gitignore', '.gitignore'
206
+ [
207
+ 'spec/lib',
208
+ 'spec/controllers',
209
+ 'spec/helpers',
210
+ 'spec/support/matchers',
211
+ 'spec/support/mixins',
212
+ # 'spec/support/shared_examples'
213
+ ].each do |dir|
214
+ run "mkdir #{dir}"
215
+ run "touch #{dir}/.keep"
216
+ end
217
+ end
218
+
219
+ def init_git
220
+ run 'git init'
221
+ end
222
+
223
+ def create_heroku_apps
224
+ path_addition = override_path_for_tests
225
+ run "#{path_addition} heroku create #{app_name}-production --remote=production"
226
+ run "#{path_addition} heroku create #{app_name}-staging --remote=staging"
227
+ run "#{path_addition} heroku config:add RACK_ENV=staging RAILS_ENV=staging --remote=staging"
228
+ end
229
+
230
+ def set_heroku_remotes
231
+ concat_file(
232
+ 'templates/bin_setup',
233
+ "# Set up staging and production git remotes\r
234
+ git remote add staging git@heroku.com: #{app_name}-staging.git\r
235
+ git remote add production git@heroku.com: #{app_name}-production.git"
236
+ )
237
+ end
238
+
239
+ def create_github_repo(repo_name)
240
+ path_addition = override_path_for_tests
241
+ run "#{path_addition} hub create #{repo_name}"
242
+ end
243
+
244
+ def copy_miscellaneous_files
245
+ copy_file 'errors.rb', 'config/initializers/errors.rb'
246
+ end
247
+
248
+ def customize_error_pages
249
+ meta_tags =<<-EOS
250
+ <meta charset='utf-8' />
251
+ <meta name='ROBOTS' content='NOODP' />
252
+ EOS
253
+ style_tags =<<-EOS
254
+ <link href='/assets/application.css' media='all' rel='stylesheet' type='text/css' />
255
+ EOS
256
+
257
+ %w(500 404 422).each do |page|
258
+ inject_into_file "public/#{page}.html", meta_tags, :after => "<head>\n"
259
+ replace_in_file "public/#{page}.html", /<style.+>.+<\/style>/mi, style_tags.strip
260
+ replace_in_file "public/#{page}.html", /<!--.+-->\n/, ''
261
+ end
262
+ end
263
+
264
+ def setup_application_helper
265
+ template 'application_helper.rb',
266
+ 'app/helpers/application_helper.rb',
267
+ force: true
268
+ end
269
+
270
+ def update_routes
271
+ template 'routes.rb.erb',
272
+ 'config/routes.rb',
273
+ force: true
274
+ end
275
+
276
+ def generate_pages_controller
277
+ generate 'controller pages index'
278
+ end
279
+
280
+ def setup_admin_section
281
+ run 'mkdir app/controllers/admin'
282
+ template 'admin_base_controller.rb',
283
+ 'app/controllers/admin/base_controller.rb'
284
+ template 'admin_dashboard_controller.rb',
285
+ 'app/controllers/admin/dashboard_controller.rb'
286
+ run 'mkdir app/views/admin'
287
+ run 'touvh app/views/admin/dashboard.html.slim'
288
+ end
289
+
290
+ def setup_ability_file
291
+ template 'ability.rb',
292
+ 'app/models/ability.rb'
293
+ end
294
+
295
+ def disable_xml_params
296
+ copy_file 'disable_xml_params.rb', 'config/initializers/disable_xml_params.rb'
297
+ end
298
+
299
+ def setup_guard
300
+ run 'bundle exec guard init'
301
+ end
302
+
303
+ def setup_devise_and_cancan
304
+ # setup devise/cancan/rolify
305
+ generate 'devise:install'
306
+ generate 'devise user'
307
+ directory 'devise', 'app/views/devise'
308
+
309
+ # TODO: convert devise views to slim/bootstrap
310
+ generate 'rolify:role'
311
+ end
312
+
313
+ def setup_default_rake_task
314
+ append_file 'Rakefile' do
315
+ "task(:default).clear\ntask :default => [:spec]\n"
316
+ end
317
+ end
318
+
319
+ def migrate_database
320
+ run 'rake db:migrate'
321
+ run 'rake db:test:prepare'
322
+ end
323
+
324
+ private
325
+
326
+ def override_path_for_tests
327
+ if ENV['TESTING']
328
+ support_bin = File.expand_path(File.join('..', '..', '..', 'features', 'support', 'bin'))
329
+ "PATH=#{support_bin}:$PATH"
330
+ end
331
+ end
332
+
333
+ def factories_spec_rake_task
334
+ IO.read find_in_source_paths('factories_spec_rake_task.rb')
335
+ end
336
+ end
337
+ end