railsbricks 3.7.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.
Files changed (155) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/Gemfile +7 -0
  4. data/LICENSE.txt +674 -0
  5. data/README.md +81 -0
  6. data/bin/rbricks +5 -0
  7. data/lib/railsbricks.rb +112 -0
  8. data/lib/railsbricks/app_generator.rb +338 -0
  9. data/lib/railsbricks/assets/config/admin_post_routes.rbr +3 -0
  10. data/lib/railsbricks/assets/config/application.yml +9 -0
  11. data/lib/railsbricks/assets/config/contact_routes.rbr +2 -0
  12. data/lib/railsbricks/assets/config/initializers/devise_email/devise.rb +267 -0
  13. data/lib/railsbricks/assets/config/initializers/devise_username/devise.rb +267 -0
  14. data/lib/railsbricks/assets/config/post_routes.rbr +2 -0
  15. data/lib/railsbricks/assets/config/routes.rb +15 -0
  16. data/lib/railsbricks/assets/config/unicorn.rb +22 -0
  17. data/lib/railsbricks/assets/controllers/admin/base_controller.rb +10 -0
  18. data/lib/railsbricks/assets/controllers/admin/devise_email/users_controller.rb +66 -0
  19. data/lib/railsbricks/assets/controllers/admin/devise_username/users_controller.rb +69 -0
  20. data/lib/railsbricks/assets/controllers/admin/posts_controller.rb +73 -0
  21. data/lib/railsbricks/assets/controllers/brick_contact.rbr +23 -0
  22. data/lib/railsbricks/assets/controllers/devise_email/application_controller.rb +54 -0
  23. data/lib/railsbricks/assets/controllers/devise_username/application_controller.rb +56 -0
  24. data/lib/railsbricks/assets/controllers/pages_controller.rb +13 -0
  25. data/lib/railsbricks/assets/controllers/posts_controller.rbr +10 -0
  26. data/lib/railsbricks/assets/database/postgresql.yml +12 -0
  27. data/lib/railsbricks/assets/database/sqlite3.yml +8 -0
  28. data/lib/railsbricks/assets/gemfile/Gemfile +41 -0
  29. data/lib/railsbricks/assets/git/gitignore +30 -0
  30. data/lib/railsbricks/assets/javascripts/analytics.js.coffee +5 -0
  31. data/lib/railsbricks/assets/lib/markdown_writer.rb +19 -0
  32. data/lib/railsbricks/assets/mailers/contact_mailer.rb +13 -0
  33. data/lib/railsbricks/assets/migrations/20141010133702_create_posts.rb +17 -0
  34. data/lib/railsbricks/assets/migrations/devise_email/20141010133701_devise_create_users.rb +48 -0
  35. data/lib/railsbricks/assets/migrations/devise_username/20141010133701_devise_create_users.rb +54 -0
  36. data/lib/railsbricks/assets/models/devise_email/user.rb +41 -0
  37. data/lib/railsbricks/assets/models/devise_username/user.rb +57 -0
  38. data/lib/railsbricks/assets/models/post.rb +30 -0
  39. data/lib/railsbricks/assets/procfile/Procfile +1 -0
  40. data/lib/railsbricks/assets/seeds/devise_email/seeds_no_test_users.rb +11 -0
  41. data/lib/railsbricks/assets/seeds/devise_email/seeds_test_users.rb +24 -0
  42. data/lib/railsbricks/assets/seeds/devise_username/seeds_no_test_users.rb +12 -0
  43. data/lib/railsbricks/assets/seeds/devise_username/seeds_test_users.rb +26 -0
  44. data/lib/railsbricks/assets/stylesheets/application.scss +6 -0
  45. data/lib/railsbricks/assets/stylesheets/railsbricks_custom.scss +562 -0
  46. data/lib/railsbricks/assets/views/admin/base/admin_posts_link.rbr +1 -0
  47. data/lib/railsbricks/assets/views/admin/base/devise_email/index.html.erb +41 -0
  48. data/lib/railsbricks/assets/views/admin/base/devise_username/index.html.erb +41 -0
  49. data/lib/railsbricks/assets/views/admin/posts/_form.html.erb +54 -0
  50. data/lib/railsbricks/assets/views/admin/posts/dashboard.html.erb +9 -0
  51. data/lib/railsbricks/assets/views/admin/posts/drafts.html.erb +23 -0
  52. data/lib/railsbricks/assets/views/admin/posts/edit.html.erb +10 -0
  53. data/lib/railsbricks/assets/views/admin/posts/index.html.erb +23 -0
  54. data/lib/railsbricks/assets/views/admin/posts/new.html.erb +6 -0
  55. data/lib/railsbricks/assets/views/admin/users/devise_email/edit.html.erb +65 -0
  56. data/lib/railsbricks/assets/views/admin/users/devise_email/index.html.erb +54 -0
  57. data/lib/railsbricks/assets/views/admin/users/devise_username/edit.html.erb +74 -0
  58. data/lib/railsbricks/assets/views/admin/users/devise_username/index.html.erb +56 -0
  59. data/lib/railsbricks/assets/views/contact_mailer/contact_message.html.erb +5 -0
  60. data/lib/railsbricks/assets/views/devise/allow_signup_links.rbr +11 -0
  61. data/lib/railsbricks/assets/views/devise/devise_email/confirmations/new.html.erb +31 -0
  62. data/lib/railsbricks/assets/views/devise/devise_email/mailer/confirmation_instructions.html.erb +12 -0
  63. data/lib/railsbricks/assets/views/devise/devise_email/mailer/reset_password_instructions.html.erb +15 -0
  64. data/lib/railsbricks/assets/views/devise/devise_email/passwords/edit.html.erb +43 -0
  65. data/lib/railsbricks/assets/views/devise/devise_email/passwords/new.html.erb +31 -0
  66. data/lib/railsbricks/assets/views/devise/devise_email/registrations/edit.html.erb +63 -0
  67. data/lib/railsbricks/assets/views/devise/devise_email/registrations/new.html.erb +49 -0
  68. data/lib/railsbricks/assets/views/devise/devise_email/sessions/new.html.erb +49 -0
  69. data/lib/railsbricks/assets/views/devise/devise_email/shared/_links.erb +19 -0
  70. data/lib/railsbricks/assets/views/devise/devise_username/confirmations/new.html.erb +31 -0
  71. data/lib/railsbricks/assets/views/devise/devise_username/mailer/confirmation_instructions.html.erb +12 -0
  72. data/lib/railsbricks/assets/views/devise/devise_username/mailer/reset_password_instructions.html.erb +15 -0
  73. data/lib/railsbricks/assets/views/devise/devise_username/passwords/edit.html.erb +43 -0
  74. data/lib/railsbricks/assets/views/devise/devise_username/passwords/new.html.erb +31 -0
  75. data/lib/railsbricks/assets/views/devise/devise_username/registrations/edit.html.erb +63 -0
  76. data/lib/railsbricks/assets/views/devise/devise_username/registrations/new.html.erb +58 -0
  77. data/lib/railsbricks/assets/views/devise/devise_username/sessions/new.html.erb +49 -0
  78. data/lib/railsbricks/assets/views/devise/devise_username/shared/_links.erb +19 -0
  79. data/lib/railsbricks/assets/views/layouts/_navigation_links.html.erb +15 -0
  80. data/lib/railsbricks/assets/views/layouts/brick_analytics.rbr +11 -0
  81. data/lib/railsbricks/assets/views/pages/contact.html.erb +46 -0
  82. data/lib/railsbricks/assets/views/pages/inside.html.erb +4 -0
  83. data/lib/railsbricks/assets/views/pages/posts.html.erb +18 -0
  84. data/lib/railsbricks/assets/views/pages/show_post.html.erb +6 -0
  85. data/lib/railsbricks/auth_builder.rb +147 -0
  86. data/lib/railsbricks/config_helpers.rb +27 -0
  87. data/lib/railsbricks/config_values.rb +14 -0
  88. data/lib/railsbricks/errors.rb +18 -0
  89. data/lib/railsbricks/file_helpers.rb +54 -0
  90. data/lib/railsbricks/foundation/README.md +24 -0
  91. data/lib/railsbricks/foundation/Rakefile +6 -0
  92. data/lib/railsbricks/foundation/app/assets/images/.keep +0 -0
  93. data/lib/railsbricks/foundation/app/assets/images/apple-touch-icon-precomposed.png +0 -0
  94. data/lib/railsbricks/foundation/app/assets/images/apple-touch-icon.png +0 -0
  95. data/lib/railsbricks/foundation/app/assets/images/favicon.ico +0 -0
  96. data/lib/railsbricks/foundation/app/assets/javascripts/application.js +17 -0
  97. data/lib/railsbricks/foundation/app/assets/javascripts/common.js +7 -0
  98. data/lib/railsbricks/foundation/app/controllers/application_controller.rb +5 -0
  99. data/lib/railsbricks/foundation/app/controllers/concerns/.keep +0 -0
  100. data/lib/railsbricks/foundation/app/controllers/pages_controller.rb +7 -0
  101. data/lib/railsbricks/foundation/app/helpers/application_helper.rb +7 -0
  102. data/lib/railsbricks/foundation/app/helpers/email_helper.rb +5 -0
  103. data/lib/railsbricks/foundation/app/mailers/.keep +0 -0
  104. data/lib/railsbricks/foundation/app/models/.keep +0 -0
  105. data/lib/railsbricks/foundation/app/models/concerns/.keep +0 -0
  106. data/lib/railsbricks/foundation/app/views/layouts/_footer.html.erb +18 -0
  107. data/lib/railsbricks/foundation/app/views/layouts/_messages.html.erb +9 -0
  108. data/lib/railsbricks/foundation/app/views/layouts/_navigation.html.erb +18 -0
  109. data/lib/railsbricks/foundation/app/views/layouts/_navigation_links.html.erb +3 -0
  110. data/lib/railsbricks/foundation/app/views/layouts/application.html.erb +38 -0
  111. data/lib/railsbricks/foundation/app/views/pages/home.html.erb +2 -0
  112. data/lib/railsbricks/foundation/bin/bundle +3 -0
  113. data/lib/railsbricks/foundation/bin/rails +4 -0
  114. data/lib/railsbricks/foundation/bin/rake +4 -0
  115. data/lib/railsbricks/foundation/config.ru +4 -0
  116. data/lib/railsbricks/foundation/config/application.rb +34 -0
  117. data/lib/railsbricks/foundation/config/boot.rb +4 -0
  118. data/lib/railsbricks/foundation/config/environment.rb +5 -0
  119. data/lib/railsbricks/foundation/config/environments/development.rb +41 -0
  120. data/lib/railsbricks/foundation/config/environments/production.rb +95 -0
  121. data/lib/railsbricks/foundation/config/environments/test.rb +51 -0
  122. data/lib/railsbricks/foundation/config/initializers/backtrace_silencers.rb +7 -0
  123. data/lib/railsbricks/foundation/config/initializers/date_format.rb +27 -0
  124. data/lib/railsbricks/foundation/config/initializers/filter_parameter_logging.rb +4 -0
  125. data/lib/railsbricks/foundation/config/initializers/friendly_id.rb +88 -0
  126. data/lib/railsbricks/foundation/config/initializers/inflections.rb +16 -0
  127. data/lib/railsbricks/foundation/config/initializers/kaminari_config.rb +10 -0
  128. data/lib/railsbricks/foundation/config/initializers/mime_types.rb +5 -0
  129. data/lib/railsbricks/foundation/config/initializers/secret_token.rb +25 -0
  130. data/lib/railsbricks/foundation/config/initializers/session_store.rb +3 -0
  131. data/lib/railsbricks/foundation/config/initializers/wrap_parameters.rb +14 -0
  132. data/lib/railsbricks/foundation/config/locales/en.yml +23 -0
  133. data/lib/railsbricks/foundation/config/routes.rb +7 -0
  134. data/lib/railsbricks/foundation/db/migrate/20131103142222_create_friendly_id_slugs.rb +15 -0
  135. data/lib/railsbricks/foundation/db/schema.rb +29 -0
  136. data/lib/railsbricks/foundation/db/seeds.rb +0 -0
  137. data/lib/railsbricks/foundation/lib/assets/.keep +0 -0
  138. data/lib/railsbricks/foundation/lib/tasks/.keep +0 -0
  139. data/lib/railsbricks/foundation/public/404.html +58 -0
  140. data/lib/railsbricks/foundation/public/422.html +58 -0
  141. data/lib/railsbricks/foundation/public/500.html +57 -0
  142. data/lib/railsbricks/foundation/public/favicon.ico +0 -0
  143. data/lib/railsbricks/foundation/public/robots.txt +5 -0
  144. data/lib/railsbricks/foundation/vendor/assets/javascripts/.keep +0 -0
  145. data/lib/railsbricks/foundation/vendor/assets/stylesheets/.keep +0 -0
  146. data/lib/railsbricks/gemfile_builder.rb +118 -0
  147. data/lib/railsbricks/menu.rb +524 -0
  148. data/lib/railsbricks/post_builder.rb +103 -0
  149. data/lib/railsbricks/string_helpers.rb +39 -0
  150. data/lib/railsbricks/style_builder.rb +97 -0
  151. data/lib/railsbricks/ui_helpers.rb +11 -0
  152. data/lib/railsbricks/validator.rb +68 -0
  153. data/lib/railsbricks/version.rb +34 -0
  154. data/railsbricks.gemspec +16 -0
  155. metadata +198 -0
data/README.md ADDED
@@ -0,0 +1,81 @@
1
+ # RailsBricks
2
+
3
+ _Create **Rails** apps. **Faster**._
4
+
5
+ ---
6
+ - Title: RailsBricks
7
+ - Version: 3.7.0
8
+ - Author: Nico Schuele (www.nicoschuele.com)
9
+ - Github: https://github.com/nicoschuele/railsbricks
10
+ - Twitter: @nicoschuele
11
+
12
+ ---
13
+
14
+ <iframe src="https://player.vimeo.com/video/110340717" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
15
+ <p><a href="https://vimeo.com/110340717">RailsBricks 3</a> from <a href="https://vimeo.com/nicoschuele">nicoschuele</a> on <a href="https://vimeo.com">Vimeo</a>.</p>
16
+
17
+ ## Not Maintained Anymore!
18
+
19
+ **Please note that RailsBricks is currently not maintained. I leave it here for legacy purpose. If you want to take over, [contact me](https://twitter.com/nicoschuele).**
20
+
21
+
22
+ ## Features
23
+
24
+ * replaces the `rails new` command with `rbricks -n`
25
+ * includes useful gems and sets them up for you
26
+ * offers different UI choices for your web app
27
+ * creates and configures a Devise authentication scheme
28
+ * adds the necessary resources for a blog, contact form, and more
29
+ * builds an admin zone
30
+ * configures your mailers
31
+ * inits local and remote git repositories
32
+ * ...and much more to boost your productivity!
33
+
34
+ ## Prerequisites
35
+
36
+ In order to use RailsBricks, you need the following:
37
+
38
+ * A nix-based OS. That can be any flavour of Linux or OS X
39
+ * Ruby (version 2.0+)
40
+ * Some knowledge of Rails (!)
41
+
42
+ ## What about Windows?
43
+
44
+ **RailsBricks doesn't run out of the box on Windows**. You will first need to install the [DevKit](http://rubyinstaller.org/downloads/) as well as the [tzinfo-data](https://github.com/tzinfo/tzinfo-data) gem.
45
+
46
+ ## Ruby support
47
+
48
+ RailsBricks generates Rails apps with support for the current major Ruby release (currently, 2.0.0) + the current point release and the previous one, for example 2.2.2 & 2.2.3. If you need to use another version of Ruby, you will have to manually edit the Gemfile after the app gets created and update the following line with your chosen version number:
49
+
50
+ `ruby '2.1.5'`
51
+
52
+ ## Install
53
+
54
+ Like any other gem, you simply issue `gem install railsbricks`
55
+
56
+ **Notice:** If you still have RailsBricks 1.x installed, remove it manually *before* installing RailsBricks 3.x
57
+
58
+ ## Usage
59
+
60
+ To create a new app, just type `rbricks --new` and follow the wizard.
61
+
62
+ ## Contribute
63
+
64
+ RailsBricks is currently not maintained and not accepting pull requests anymore. If you want to take over, [contact me](https://twitter.com/nicoschuele).
65
+
66
+
67
+ ## Acknowledgements
68
+
69
+ * [Nikkau](https://github.com/Nikkau), for showing me how to segregate gems without using RVM
70
+ * [Joelle Gobbo](http://ch.linkedin.com/pub/joelle-gobbo/32/4b5/a9b), for the elegant snippet used to generate a valid Rails app name
71
+ * [Jim Meyer](https://github.com/purp), for forking RailsBricks and creating an alternative version I also use
72
+ * [David Hsu](https://github.com/dvdhsu), for adding a new Brick: Devise authentication using only an email address
73
+ * the authors of the many gems used by RailsBricks
74
+ * the [Geneva.rb](http://www.meetup.com/genevarb/) Meetup Group for the beer!
75
+ * David Camarena for producing a [fork](https://github.com/athalas/railsbricks) with support for MySQL
76
+ * [Felix Wolfsteller](https://github.com/fwolfst) for doing a bit of cleanup
77
+ * everyone who emailed me, gave feedback, opened an issue on Github, submitted a pull request, tweeted, etc. I truly love the Rails community.
78
+
79
+ ## License
80
+
81
+ Released under GNU GPL-3. Copyright (c) 2014-2017 Nico Schuele. See LICENSE.txt for further details.
data/bin/rbricks ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative "../lib/railsbricks"
4
+
5
+ Railsbricks::main ARGV
@@ -0,0 +1,112 @@
1
+ require_relative "railsbricks/version"
2
+ require_relative "railsbricks/string_helpers"
3
+ require_relative "railsbricks/errors"
4
+ require_relative "railsbricks/menu"
5
+ require_relative "railsbricks/app_generator"
6
+ require_relative "railsbricks/config_helpers"
7
+
8
+ class Railsbricks
9
+
10
+ def self.main(args)
11
+ # new app
12
+ if args[0] == '-n' || args[0] == '--new'
13
+ new_app
14
+ elsif args[0] == '-r' || args[0] == '--recreate-db'
15
+ recreate_db
16
+ elsif args[0] == '-a' || args[0] == '--annotate'
17
+ annotate
18
+ elsif args[0] == '--robocop'
19
+ prime_directives
20
+ elsif args[0] == '-v' || args[0] == '--version'
21
+ display_version
22
+ elsif args[0] == '--config'
23
+ display_config
24
+ else
25
+ display_help
26
+ end
27
+ end
28
+
29
+ def self.new_app
30
+ menu = Menu.new
31
+ @options = menu.new_app_menu
32
+ generator = AppGenerator.new(@options)
33
+ generator.generate_app
34
+ end
35
+
36
+ def self.recreate_db
37
+ options = ConfigHelpers.load_config
38
+ puts
39
+ StringHelpers.wputs "----> Recreating the database ...", :info
40
+ system "#{options["rake_command"]} db:drop"
41
+ system "#{options["rake_command"]} db:create:all"
42
+ system "#{options["rake_command"]} db:migrate"
43
+ system "#{options["rake_command"]} db:seed"
44
+ puts
45
+ StringHelpers.wputs "----> Database recreated.", :info
46
+ puts
47
+ end
48
+
49
+ def self.annotate
50
+ puts
51
+ StringHelpers.wputs "----> Annotating models and routes ...", :info
52
+ puts
53
+ system "bundle exec annotate"
54
+ system "bundle exec annotate --routes"
55
+ puts
56
+ StringHelpers.wputs "----> Models and routes annotated.", :info
57
+ puts
58
+ end
59
+
60
+ def self.prime_directives
61
+ Errors.display_error "1. Serve the public trust"
62
+ Errors.display_error "2. Protect the innocent"
63
+ Errors.display_error "3. Uphold the law"
64
+ Errors.display_error "4. Classified"
65
+ end
66
+
67
+ def self.display_version
68
+ puts
69
+ StringHelpers.wputs "RailsBricks #{Version.current} (#{Version.current_date})", :info
70
+ StringHelpers.wputs "source: https://github.com/nicoschuele/railsbricks", :help
71
+ StringHelpers.wputs "by Nico Schuele (www.nicoschuele.com)", :help
72
+ puts
73
+ end
74
+
75
+ def self.display_config
76
+ puts
77
+ StringHelpers.wputs "----> Retrieving your app's RailsBricks config values ...", :info
78
+ options = ConfigHelpers.load_config
79
+ puts
80
+ if options.count > 1
81
+ options.each do |k,v|
82
+ StringHelpers.wputs "#{k}: #{v}"
83
+ end
84
+ else
85
+ Errors.display_error "Config values couldn't be found. In most cases, this is because '#{ConfigHelpers::CONFIG_PATH}/config' is not within your app.", true
86
+ end
87
+ puts
88
+ StringHelpers.wputs "----> App config values retrieved.", :info
89
+ rescue
90
+ Errors.display_error "Config values couldn't be found. In most cases, this is because '#{ConfigHelpers::CONFIG_PATH}/config' is not within your app.", true
91
+ end
92
+
93
+ def self.display_help
94
+ puts
95
+ StringHelpers.wputs "RailsBricks usage:", :info
96
+ StringHelpers.wputs "------------------", :info
97
+ puts
98
+ puts "rbricks --new (or -n) :"
99
+ puts " --> create a new RailsBricks app."
100
+ puts
101
+ puts "rbricks --recreate-db (or -r) :"
102
+ puts " --> drop, create, migrate & seed the DB"
103
+ puts
104
+ puts "rbricks --config"
105
+ puts " --> display your app config"
106
+ puts
107
+ puts "rbricks --version (or -v) :"
108
+ puts " --> display the RailsBricks version"
109
+ puts
110
+ end
111
+
112
+ end
@@ -0,0 +1,338 @@
1
+ require "fileutils"
2
+ require "net/http"
3
+ require "uri"
4
+ require_relative "ui_helpers"
5
+ require_relative "version"
6
+ require_relative "string_helpers"
7
+ require_relative "file_helpers"
8
+ require_relative "gemfile_builder"
9
+ require_relative "style_builder"
10
+ require_relative "auth_builder"
11
+ require_relative "post_builder"
12
+ require_relative "config_helpers"
13
+
14
+ class AppGenerator
15
+
16
+ attr_accessor :options
17
+
18
+ def initialize(options)
19
+ @options = options
20
+ @app_dir = Dir.pwd + "/#{@options[:app_name]}"
21
+ @rbricks_dir = File.dirname(__FILE__)
22
+ end
23
+
24
+ def generate_app
25
+ # Drop creation if necessary
26
+ if !@options[:generate]
27
+ wputs "App creation aborted...", :error
28
+ new_line
29
+ abort
30
+ end
31
+
32
+ # updating necessary global gems
33
+ update_essential_gems
34
+
35
+ # install Rails
36
+ install_rails
37
+
38
+ # copy foundation app to directory
39
+ create_foundation
40
+
41
+ # ui
42
+ StyleBuilder.build_style(@app_dir, @options)
43
+
44
+ # database config
45
+ config_db
46
+
47
+ # environment variables
48
+ config_env_var
49
+
50
+ # authentication
51
+ if @options[:devise]
52
+ AuthBuilder.build_auth(@app_dir, @options)
53
+ end
54
+
55
+ # contact form
56
+ add_contact_form
57
+
58
+ # google analytics
59
+ set_google_analytics
60
+
61
+ # post resource
62
+ if @options[:devise] && @options[:post_resources]
63
+ PostBuilder.build_post(@app_dir, @options)
64
+ elsif @options[:devise] && !@options[:post_resources]
65
+ PostBuilder.clean(@app_dir)
66
+ end
67
+
68
+ # prod settings
69
+ if @options[:production]
70
+ set_production
71
+ end
72
+
73
+ # Set app name
74
+ set_app_name
75
+
76
+ # build Gemfile
77
+ GemfileBuilder.build_gemfile(@app_dir, @options)
78
+
79
+ # install gems
80
+ bundle_install
81
+
82
+ # create database
83
+ create_database
84
+
85
+ # save config
86
+ ConfigHelpers.create_config(@app_dir, @options)
87
+
88
+ # annotate models and routes
89
+ annotate
90
+
91
+ # git
92
+ set_git
93
+
94
+ # Summary
95
+ new_line(2)
96
+ wputs "----> #{@options[:rails_app_name]} created successfully!", :help
97
+ if @options[:devise]
98
+ new_line
99
+ wputs "Admin username: #{@options[:devise_config][:scheme] == 'email' ? 'admin@example.com' : 'admin' }", :info
100
+ wputs "Admin password: 1234", :info
101
+ end
102
+ new_line
103
+ wputs "Run 'rails server' within #{@options[:app_name]} to start it.", :help
104
+ new_line
105
+
106
+ end
107
+
108
+ # Private/shortcut/alias methods
109
+
110
+ private
111
+
112
+ def update_essential_gems
113
+ new_line
114
+ wputs "----> Bundler ... ", :info
115
+ system "#{@options[:gem_command]} install bundler --no-rdoc --no-ri"
116
+ system "#{@options[:gem_command]} update bundler"
117
+ new_line
118
+ wputs "----> Bundler updated to their latest versions.", :info
119
+ rescue
120
+ Errors.display_error("Required gem (bundler) couldn't be updated properly. Stopping app creation.", true)
121
+ abort
122
+ end
123
+
124
+ def install_rails
125
+ new_line(2)
126
+ wputs "----> Installing Rails #{@options[:rails_version]} ...", :info
127
+ system "#{@options[:gem_command]} install rails -v #{@options[:rails_version]} --no-rdoc --no-ri"
128
+ new_line
129
+ wputs "----> Rails #{@options[:rails_version]} installed.", :info
130
+ rescue
131
+ Errors.display_error("Something went wrong and Rails #{@options[:rails_version]} couldn't be installed. Stopping app creation.", true)
132
+ abort
133
+ end
134
+
135
+ def create_foundation
136
+ FileUtils::mkdir_p @app_dir
137
+ FileUtils.cp_r(@rbricks_dir + "/foundation/.", @app_dir)
138
+
139
+ end
140
+
141
+ def config_db
142
+ new_line(2)
143
+ wputs "----> Configuring database ...", :info
144
+
145
+ if @options[:development_db] == "postgresql"
146
+ FileUtils.cp_r(@rbricks_dir + "/assets/database/postgresql.yml", @app_dir + "/config/database.yml")
147
+ FileHelpers.replace_string(/BRICK_DB_SERVER/, @options[:db_config][:server], @app_dir + "/config/database.yml")
148
+ FileHelpers.replace_string(/BRICK_DB_PORT/, @options[:db_config][:port].to_s, @app_dir + "/config/database.yml")
149
+ FileHelpers.replace_string(/BRICK_DB_NAME/, @options[:db_config][:name], @app_dir + "/config/database.yml")
150
+ FileHelpers.replace_string(/BRICK_DB_USERNAME/, @options[:db_config][:username], @app_dir + "/config/database.yml")
151
+ if @options[:db_config][:password].to_s == ''
152
+ FileHelpers.replace_string(/BRICK_DB_PASSWORD/, '', @app_dir + "/config/database.yml")
153
+ else
154
+ FileHelpers.replace_string(/BRICK_DB_PASSWORD/, "password: #{@options[:db_config][:password]}", @app_dir + "/config/database.yml")
155
+ end
156
+ else
157
+ FileUtils.cp_r(@rbricks_dir + "/assets/database/sqlite3.yml", @app_dir + "/config/database.yml")
158
+ end
159
+
160
+ new_line
161
+ wputs "----> Database configuration set.", :info
162
+ end
163
+
164
+
165
+ def config_env_var
166
+ new_line(2)
167
+ wputs "----> Setting environment variables ...", :info
168
+ FileUtils.cp_r(@rbricks_dir + "/assets/config/application.yml", @app_dir + "/config")
169
+ FileHelpers.replace_string(/BRICK_VERSION/, @options[:railsbricks_version], @app_dir + "/config/application.yml")
170
+
171
+ if @options[:email_settings]
172
+ FileHelpers.replace_string(/BRICK_SENDER/, @options[:email_config][:sender], @app_dir + "/config/application.yml")
173
+ FileHelpers.replace_string(/BRICK_SMTP_SERVER/, @options[:email_config][:smtp], @app_dir + "/config/application.yml")
174
+ FileHelpers.replace_string(/BRICK_MAILER_DOMAIN/, @options[:email_config][:domain], @app_dir + "/config/application.yml")
175
+ FileHelpers.replace_string(/BRICK_SMTP_PORT/, @options[:email_config][:port], @app_dir + "/config/application.yml")
176
+ FileHelpers.replace_string(/BRICK_SMTP_USERNAME/, @options[:email_config][:username], @app_dir + "/config/application.yml")
177
+ FileHelpers.replace_string(/BRICK_SMTP_PASSWORD/, @options[:email_config][:password], @app_dir + "/config/application.yml")
178
+ end
179
+
180
+ if @options[:production]
181
+ FileHelpers.replace_string(/BRICK_DOMAIN/, @options[:production_settings][:url], @app_dir + "/config/application.yml")
182
+ end
183
+
184
+ new_line
185
+ wputs "----> Environment variables set.", :info
186
+ end
187
+
188
+ def add_contact_form
189
+ if @options[:contact_form]
190
+ new_line(2)
191
+ wputs "----> Creating contact form ...", :info
192
+
193
+ # Views
194
+ FileUtils.mkdir_p(@app_dir + "/app/views/contact_mailer")
195
+ FileUtils.cp_r(@rbricks_dir + "/assets/views/pages/contact.html.erb", @app_dir + "/app/views/pages")
196
+ FileUtils.cp_r(@rbricks_dir + "/assets/views/contact_mailer/contact_message.html.erb", @app_dir + "/app/views/contact_mailer")
197
+
198
+ # Mailer
199
+ FileUtils.cp_r(@rbricks_dir + "/assets/mailers/contact_mailer.rb", @app_dir + "/app/mailers")
200
+
201
+ # Navbar link
202
+ FileHelpers.replace_string(/BRICK_CONTACT/, "<li><%= link_to \"Contact\", contact_path %></li>", @app_dir + "/app/views/layouts/_navigation_links.html.erb")
203
+
204
+ # Controller
205
+ FileHelpers.replace_string(/BRICK_CONTACT_CONTROLLER/, FileHelpers.get_file(:brick_contact_controller), @app_dir + "/app/controllers/pages_controller.rb")
206
+
207
+ # Routes
208
+ FileHelpers.replace_string(/BRICK_CONTACT_ROUTES/, FileHelpers.get_file(:brick_contact_routes), @app_dir + "/config/routes.rb")
209
+
210
+ new_line
211
+ wputs "----> Contact form created.", :info
212
+ else
213
+ # Navbar link
214
+ FileHelpers.replace_string(/BRICK_CONTACT/, '', @app_dir + "/app/views/layouts/_navigation_links.html.erb")
215
+ # Controller
216
+ FileHelpers.replace_string(/BRICK_CONTACT_CONTROLLER/, '', @app_dir + "/app/controllers/pages_controller.rb")
217
+ # Routes
218
+ FileHelpers.replace_string(/BRICK_CONTACT_ROUTES/, '', @app_dir + "/config/routes.rb")
219
+ end
220
+ end
221
+
222
+
223
+ def set_google_analytics
224
+ if @options[:google_analytics]
225
+ new_line(2)
226
+ wputs "----> Setting up Google Analytics ...", :info
227
+
228
+ FileUtils.cp_r(@rbricks_dir + "/assets/javascripts/analytics.js.coffee", @app_dir + "/app/assets/javascripts")
229
+ FileHelpers.replace_string(/BRICK_ANALYTICS/, FileHelpers.get_file(:brick_analytics), @app_dir + "/app/views/layouts/_footer.html.erb")
230
+ FileHelpers.replace_string(/BRICK_ANALYTICS_ID/, @options[:google_tracking_id], @app_dir + "/app/views/layouts/_footer.html.erb")
231
+ FileHelpers.replace_string(/BRICK_ANALYTICS_SCRIPT/, "\n//= require analytics", @app_dir + "/app/assets/javascripts/application.js")
232
+
233
+ new_line
234
+ wputs "----> Google Analytics set.", :info
235
+ else
236
+ FileHelpers.replace_string(/BRICK_ANALYTICS/, '', @app_dir + "/app/views/layouts/_footer.html.erb")
237
+ FileHelpers.replace_string(/BRICK_ANALYTICS_SCRIPT/, '', @app_dir + "/app/assets/javascripts/application.js")
238
+ end
239
+ end
240
+
241
+ def set_production
242
+ new_line(2)
243
+ wputs "----> Production settings ...", :info
244
+
245
+ if @options[:production_settings][:unicorn]
246
+ FileUtils.cp_r(@rbricks_dir + "/assets/procfile/Procfile", @app_dir)
247
+ FileUtils.cp_r(@rbricks_dir + "/assets/config/unicorn.rb", @app_dir + "/config")
248
+ wputs "--> Unicorn config created."
249
+ end
250
+
251
+ new_line
252
+ wputs "----> Production settings updated.", :info
253
+ end
254
+
255
+ def set_app_name
256
+ new_line(2)
257
+ wputs "----> Setting app name ...", :info
258
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/routes.rb")
259
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/Rakefile")
260
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/app/helpers/application_helper.rb")
261
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/app/views/layouts/application.html.erb")
262
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/application.rb")
263
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/environment.rb")
264
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/environments/development.rb")
265
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/environments/test.rb")
266
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/environments/production.rb")
267
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/initializers/secret_token.rb")
268
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/initializers/session_store.rb")
269
+ FileHelpers.replace_string(/BRICK_SESSION/, @options[:rails_app_name].downcase, @app_dir + "/config/initializers/session_store.rb")
270
+ new_line
271
+ wputs "----> App name set.", :info
272
+ end
273
+
274
+ def bundle_install
275
+ new_line(2)
276
+ wputs "----> Installing gems into 'vendor/bundle/' ...", :info
277
+ Dir.chdir "#{@app_dir}" do
278
+ system "bundle install --without production --path vendor/bundle"
279
+ end
280
+ new_line
281
+ wputs "----> Gems installed in 'vendor/bundle/'.", :info
282
+ end
283
+
284
+ def annotate
285
+ new_line(2)
286
+ wputs "----> Annotating models and routes ...", :info
287
+ Dir.chdir "#{@app_dir}" do
288
+ system "bundle exec annotate"
289
+ system "bundle exec annotate --routes"
290
+ end
291
+ new_line
292
+ wputs "----> Models and routes annotated.", :info
293
+ end
294
+
295
+ def create_database
296
+ new_line(2)
297
+ wputs "----> Creating database ...", :info
298
+ Dir.chdir "#{@app_dir}" do
299
+ system "#{@options[:rake_command]} db:create:all"
300
+ system "#{@options[:rake_command]} db:migrate"
301
+ system "#{@options[:rake_command]} db:seed"
302
+ end
303
+ new_line
304
+ wputs "----> Database created.", :info
305
+ end
306
+
307
+ def set_git
308
+ # Always copy .gitignore
309
+ FileUtils.cp_r(@rbricks_dir + "/assets/git/gitignore", @app_dir + "/.gitignore")
310
+
311
+ if @options[:local_git]
312
+ new_line(2)
313
+ wputs "----> Setting up Git ...", :info
314
+ Dir.chdir "#{@app_dir}" do
315
+ system "git init"
316
+ system "git add -A ."
317
+ system "git commit -m 'initial commit (RailsBricks #{@options[:railsbricks_version]})'"
318
+
319
+ if @options[:remote_git]
320
+ system "git remote add origin #{@options[:git_url]}"
321
+ system "git push origin master"
322
+ end
323
+ end
324
+
325
+ new_line
326
+ wputs "----> Git set up.", :info
327
+ end
328
+ end
329
+
330
+ def wputs(text, highlight = :none)
331
+ StringHelpers.wputs(text, highlight)
332
+ end
333
+
334
+ def new_line(lines=1)
335
+ StringHelpers.new_line(lines)
336
+ end
337
+
338
+ end