railsbricks-reloaded 3.2.1

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 +79 -0
  6. data/bin/rbricks +5 -0
  7. data/lib/railsbricks.rb +115 -0
  8. data/lib/railsbricks/app_generator.rb +339 -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 +3 -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 +533 -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 +199 -0
data/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # RailsBricks
2
+
3
+ _Create **Rails** apps. **Faster**._
4
+
5
+ ---
6
+ - Title: RailsBricks
7
+ - Version: 3.2.1
8
+ ---
9
+
10
+ ## Features
11
+
12
+ * replaces the `rails new` command with `rbricks -n`
13
+ * includes useful gems and sets them up for you
14
+ * offers different UI choices for your web app
15
+ * creates and configures a Devise authentication scheme
16
+ * adds the necessary resources for a blog, contact form, and more
17
+ * builds an admin zone
18
+ * configures your mailers
19
+ * inits local and remote git repositories
20
+ * ...and much more to boost your productivity!
21
+
22
+ ## Prerequisites
23
+
24
+ In order to use RailsBricks, you need the following:
25
+
26
+ * A nix-based OS. That can be any flavour of Linux or OS X
27
+ * Ruby (version 2.0+)
28
+ * Some knowledge of Rails (!)
29
+
30
+ ## What about Windows?
31
+
32
+ **RailsBricks doesn't run out of the box on Windows**. Read the [Windows Installation Guide](http://railsbricks.net/windows) to know what to do. 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.
33
+
34
+ ## Ruby support
35
+
36
+ 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.1.4 & 2.2.0. 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:
37
+
38
+ `ruby '2.1.5'`
39
+
40
+ ## Install
41
+
42
+ Like any other gem, you simply issue `gem install railsbricks`
43
+
44
+ **Notice:** If you still have RailsBricks 1.x installed, remove it manually *before* installing RailsBricks 3.x
45
+
46
+ ## Usage
47
+
48
+ To create a new app, just type `rbricks --new` and follow the wizard.
49
+
50
+ You can read the documentation, see a video and go through the *Get Started* tutorial at [railsbricks.net](http://www.railsbricks.net)
51
+
52
+ ## Contribute
53
+
54
+ You like RailsBricks and want to contribute to its development? Cool! You can do it in 2 ways:
55
+
56
+ * Fork the code and implement an awesome feature
57
+ * Found a bug or a quirk? Fix it!
58
+
59
+ **Important**: before working on a new feature, [contact me](http://railsbricks.net/contact) or [open an issue](https://github.com/nicoschuele/railsbricks/issues) on Github explaining what you'd like to implement. I'm trying to keep the maintenance of RailsBricks as easy and fast as possible so before accepting a feature or a PR, we need to make sure it will be maintained properly and within an appropriate timeframe.
60
+
61
+ ## Questions, Feedback
62
+
63
+ If you have any question or feedback, [drop me a line](http://railsbricks.net/contact) or tweet at @railsbricks
64
+
65
+ ## Acknowledgements
66
+
67
+ * [Nikkau](https://github.com/Nikkau), for showing me how to segregate gems without using RVM
68
+ * [Joelle Gobbo](http://ch.linkedin.com/pub/joelle-gobbo/32/4b5/a9b), for the elegant snippet used to generate a valid Rails app name
69
+ * [Jim Meyer](https://github.com/purp), for forking RailsBricks and creating an alternative version I also use
70
+ * [David Hsu](https://github.com/dvdhsu), for adding a new Brick: Devise authentication using only an email address
71
+ * the authors of the many gems used by RailsBricks
72
+ * the [Geneva.rb](http://www.meetup.com/genevarb/) Meetup Group for the beer!
73
+ * David Camarena for producing a [fork](https://github.com/athalas/railsbricks) with support for MySQL
74
+ * [Felix Wolfsteller](https://github.com/fwolfst) for doing a bit of cleanup
75
+ * everyone who emailed me, gave feedback, opened an issue on Github, submitted a pull request, tweeted, etc. I truly love the Rails community.
76
+
77
+ ## License
78
+
79
+ Released under GNU GPL-3. Copyright (c) 2014-2015 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,115 @@
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 "www.railsbricks.net", :info
71
+ StringHelpers.wputs "source: https://github.com/nicoschuele/railsbricks", :help
72
+ StringHelpers.wputs "by Nico Schuele (www.nicoschuele.com) <nico@railsbricks.net>", :help
73
+ puts
74
+ end
75
+
76
+ def self.display_config
77
+ puts
78
+ StringHelpers.wputs "----> Retrieving your app's RailsBricks config values ...", :info
79
+ options = ConfigHelpers.load_config
80
+ puts
81
+ if options.count > 1
82
+ options.each do |k,v|
83
+ StringHelpers.wputs "#{k}: #{v}"
84
+ end
85
+ else
86
+ 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
87
+ end
88
+ puts
89
+ StringHelpers.wputs "----> App config values retrieved.", :info
90
+ rescue
91
+ 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
92
+ end
93
+
94
+ def self.display_help
95
+ puts
96
+ StringHelpers.wputs "RailsBricks usage:", :info
97
+ StringHelpers.wputs "------------------", :info
98
+ puts
99
+ puts "rbricks --new (or -n) :"
100
+ puts " --> create a new RailsBricks app."
101
+ puts
102
+ puts "rbricks --recreate-db (or -r) :"
103
+ puts " --> drop, create, migrate & seed the DB"
104
+ puts
105
+ puts "rbricks --config"
106
+ puts " --> display your app config"
107
+ puts
108
+ puts "rbricks --version (or -v) :"
109
+ puts " --> display the RailsBricks version"
110
+ puts
111
+ StringHelpers.wputs "More help, tutorials and documentation at http://www.railsbricks.net/get-started", :info
112
+ puts
113
+ end
114
+
115
+ end
@@ -0,0 +1,339 @@
1
+ require "fileutils"
2
+ require_relative "ui_helpers"
3
+ require_relative "version"
4
+ require_relative "string_helpers"
5
+ require_relative "file_helpers"
6
+ require_relative "gemfile_builder"
7
+ require_relative "style_builder"
8
+ require_relative "auth_builder"
9
+ require_relative "post_builder"
10
+ require_relative "config_helpers"
11
+
12
+ class AppGenerator
13
+
14
+ attr_accessor :options
15
+
16
+ def initialize(options)
17
+ @options = options
18
+ @app_dir = Dir.pwd + "/#{@options[:app_name]}"
19
+ @rbricks_dir = File.dirname(__FILE__)
20
+ end
21
+
22
+ def generate_app
23
+ # Drop creation if necessary
24
+ if !@options[:generate]
25
+ wputs "App creation aborted...", :error
26
+ new_line
27
+ abort
28
+ end
29
+
30
+ # updating necessary global gems
31
+ update_essential_gems
32
+
33
+ # install Rails
34
+ install_rails
35
+
36
+ # copy foundation app to directory
37
+ create_foundation
38
+
39
+ # ui
40
+ StyleBuilder.build_style(@app_dir, @options)
41
+
42
+ # database config
43
+ config_db
44
+
45
+ # environment variables
46
+ config_env_var
47
+
48
+ # authentication
49
+ if @options[:devise]
50
+ AuthBuilder.build_auth(@app_dir, @options)
51
+ end
52
+
53
+ # contact form
54
+ add_contact_form
55
+
56
+ # google analytics
57
+ set_google_analytics
58
+
59
+ # post resource
60
+ if @options[:devise] && @options[:post_resources]
61
+ PostBuilder.build_post(@app_dir, @options)
62
+ elsif @options[:devise] && !@options[:post_resources]
63
+ PostBuilder.clean(@app_dir)
64
+ end
65
+
66
+ # prod settings
67
+ if @options[:production]
68
+ set_production
69
+ end
70
+
71
+ # Set app name
72
+ set_app_name
73
+
74
+ # build Gemfile
75
+ GemfileBuilder.build_gemfile(@app_dir, @options)
76
+
77
+ # install gems
78
+ bundle_install
79
+
80
+ # create database
81
+ create_database
82
+
83
+ # save config
84
+ ConfigHelpers.create_config(@app_dir, @options)
85
+
86
+ # annotate models and routes
87
+ annotate
88
+
89
+ # git
90
+ set_git
91
+
92
+ # Summary
93
+ new_line(2)
94
+ wputs "----> #{@options[:rails_app_name]} created successfully!", :help
95
+ if @options[:devise]
96
+ new_line
97
+ wputs "Admin username: #{@options[:devise_config][:scheme] == 'email' ? 'admin@example.com' : 'admin' }", :info
98
+ wputs "Admin password: 1234", :info
99
+ end
100
+ new_line
101
+ wputs "Run 'rails server' within #{@options[:app_name]} to start it.", :help
102
+ new_line
103
+
104
+ end
105
+
106
+ # Private/shortcut/alias methods
107
+
108
+ private
109
+
110
+ def update_essential_gems
111
+ new_line
112
+ wputs "----> Updating Rake & Bundler ... ", :info
113
+ system "#{@options[:gem_command]} install rake --no-rdoc --no-ri"
114
+ system "#{@options[:gem_command]} update rake"
115
+ system "#{@options[:gem_command]} install bundler --no-rdoc --no-ri"
116
+ system "#{@options[:gem_command]} update bundler"
117
+ new_line
118
+ wputs "----> Rake & Bundler updated to their latest versions.", :info
119
+ rescue
120
+ Errors.display_error("Required gems (rake & bundler) couldn't be updated properly. Stopping app creation.", true)
121
+ abort
122
+ end
123
+
124
+
125
+ def install_rails
126
+ new_line(2)
127
+ wputs "----> Installing Rails #{@options[:rails_version]} ...", :info
128
+ system "#{@options[:gem_command]} install rails -v #{@options[:rails_version]} --no-rdoc --no-ri"
129
+ new_line
130
+ wputs "----> Rails #{@options[:rails_version]} installed.", :info
131
+ rescue
132
+ Errors.display_error("Something went wrong and Rails #{@options[:rails_version]} couldn't be installed. Stopping app creation.", true)
133
+ abort
134
+ end
135
+
136
+ def create_foundation
137
+ FileUtils::mkdir_p @app_dir
138
+ FileUtils.cp_r(@rbricks_dir + "/foundation/.", @app_dir)
139
+
140
+ end
141
+
142
+ def config_db
143
+ new_line(2)
144
+ wputs "----> Configuring database ...", :info
145
+
146
+ if @options[:development_db] == "postgresql"
147
+ FileUtils.cp_r(@rbricks_dir + "/assets/database/postgresql.yml", @app_dir + "/config/database.yml")
148
+ FileHelpers.replace_string(/BRICK_DB_SERVER/, @options[:db_config][:server], @app_dir + "/config/database.yml")
149
+ FileHelpers.replace_string(/BRICK_DB_PORT/, @options[:db_config][:port].to_s, @app_dir + "/config/database.yml")
150
+ FileHelpers.replace_string(/BRICK_DB_NAME/, @options[:db_config][:name], @app_dir + "/config/database.yml")
151
+ FileHelpers.replace_string(/BRICK_DB_USERNAME/, @options[:db_config][:username], @app_dir + "/config/database.yml")
152
+ if @options[:db_config][:password].to_s == ''
153
+ FileHelpers.replace_string(/BRICK_DB_PASSWORD/, '', @app_dir + "/config/database.yml")
154
+ else
155
+ FileHelpers.replace_string(/BRICK_DB_PASSWORD/, "password: #{@options[:db_config][:password]}", @app_dir + "/config/database.yml")
156
+ end
157
+ else
158
+ FileUtils.cp_r(@rbricks_dir + "/assets/database/sqlite3.yml", @app_dir + "/config/database.yml")
159
+ end
160
+
161
+ new_line
162
+ wputs "----> Database configuration set.", :info
163
+ end
164
+
165
+
166
+ def config_env_var
167
+ new_line(2)
168
+ wputs "----> Setting environment variables ...", :info
169
+ FileUtils.cp_r(@rbricks_dir + "/assets/config/application.yml", @app_dir + "/config")
170
+ FileHelpers.replace_string(/BRICK_VERSION/, @options[:railsbricks_version], @app_dir + "/config/application.yml")
171
+
172
+ if @options[:email_settings]
173
+ FileHelpers.replace_string(/BRICK_SENDER/, @options[:email_config][:sender], @app_dir + "/config/application.yml")
174
+ FileHelpers.replace_string(/BRICK_SMTP_SERVER/, @options[:email_config][:smtp], @app_dir + "/config/application.yml")
175
+ FileHelpers.replace_string(/BRICK_MAILER_DOMAIN/, @options[:email_config][:domain], @app_dir + "/config/application.yml")
176
+ FileHelpers.replace_string(/BRICK_SMTP_PORT/, @options[:email_config][:port], @app_dir + "/config/application.yml")
177
+ FileHelpers.replace_string(/BRICK_SMTP_USERNAME/, @options[:email_config][:username], @app_dir + "/config/application.yml")
178
+ FileHelpers.replace_string(/BRICK_SMTP_PASSWORD/, @options[:email_config][:password], @app_dir + "/config/application.yml")
179
+ end
180
+
181
+ if @options[:production]
182
+ FileHelpers.replace_string(/BRICK_DOMAIN/, @options[:production_settings][:url], @app_dir + "/config/application.yml")
183
+ end
184
+
185
+ new_line
186
+ wputs "----> Environment variables set.", :info
187
+ end
188
+
189
+ def add_contact_form
190
+ if @options[:contact_form]
191
+ new_line(2)
192
+ wputs "----> Creating contact form ...", :info
193
+
194
+ # Views
195
+ FileUtils.mkdir_p(@app_dir + "/app/views/contact_mailer")
196
+ FileUtils.cp_r(@rbricks_dir + "/assets/views/pages/contact.html.erb", @app_dir + "/app/views/pages")
197
+ FileUtils.cp_r(@rbricks_dir + "/assets/views/contact_mailer/contact_message.html.erb", @app_dir + "/app/views/contact_mailer")
198
+
199
+ # Mailer
200
+ FileUtils.cp_r(@rbricks_dir + "/assets/mailers/contact_mailer.rb", @app_dir + "/app/mailers")
201
+
202
+ # Navbar link
203
+ FileHelpers.replace_string(/BRICK_CONTACT/, "<li><%= link_to \"Contact\", contact_path %></li>", @app_dir + "/app/views/layouts/_navigation_links.html.erb")
204
+
205
+ # Controller
206
+ FileHelpers.replace_string(/BRICK_CONTACT_CONTROLLER/, FileHelpers.get_file(:brick_contact_controller), @app_dir + "/app/controllers/pages_controller.rb")
207
+
208
+ # Routes
209
+ FileHelpers.replace_string(/BRICK_CONTACT_ROUTES/, FileHelpers.get_file(:brick_contact_routes), @app_dir + "/config/routes.rb")
210
+
211
+ new_line
212
+ wputs "----> Contact form created.", :info
213
+ else
214
+ # Navbar link
215
+ FileHelpers.replace_string(/BRICK_CONTACT/, '', @app_dir + "/app/views/layouts/_navigation_links.html.erb")
216
+ # Controller
217
+ FileHelpers.replace_string(/BRICK_CONTACT_CONTROLLER/, '', @app_dir + "/app/controllers/pages_controller.rb")
218
+ # Routes
219
+ FileHelpers.replace_string(/BRICK_CONTACT_ROUTES/, '', @app_dir + "/config/routes.rb")
220
+ end
221
+ end
222
+
223
+
224
+ def set_google_analytics
225
+ if @options[:google_analytics]
226
+ new_line(2)
227
+ wputs "----> Setting up Google Analytics ...", :info
228
+
229
+ FileUtils.cp_r(@rbricks_dir + "/assets/javascripts/analytics.js.coffee", @app_dir + "/app/assets/javascripts")
230
+ FileHelpers.replace_string(/BRICK_ANALYTICS/, FileHelpers.get_file(:brick_analytics), @app_dir + "/app/views/layouts/_footer.html.erb")
231
+ FileHelpers.replace_string(/BRICK_ANALYTICS_ID/, @options[:google_tracking_id], @app_dir + "/app/views/layouts/_footer.html.erb")
232
+ FileHelpers.replace_string(/BRICK_ANALYTICS_SCRIPT/, "\n//= require analytics", @app_dir + "/app/assets/javascripts/application.js")
233
+
234
+ new_line
235
+ wputs "----> Google Analytics set.", :info
236
+ else
237
+ FileHelpers.replace_string(/BRICK_ANALYTICS/, '', @app_dir + "/app/views/layouts/_footer.html.erb")
238
+ FileHelpers.replace_string(/BRICK_ANALYTICS_SCRIPT/, '', @app_dir + "/app/assets/javascripts/application.js")
239
+ end
240
+ end
241
+
242
+ def set_production
243
+ new_line(2)
244
+ wputs "----> Production settings ...", :info
245
+
246
+ if @options[:production_settings][:unicorn]
247
+ FileUtils.cp_r(@rbricks_dir + "/assets/procfile/Procfile", @app_dir)
248
+ FileUtils.cp_r(@rbricks_dir + "/assets/config/unicorn.rb", @app_dir + "/config")
249
+ wputs "--> Unicorn config created."
250
+ end
251
+
252
+ new_line
253
+ wputs "----> Production settings updated.", :info
254
+ end
255
+
256
+ def set_app_name
257
+ new_line(2)
258
+ wputs "----> Setting app name ...", :info
259
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/routes.rb")
260
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/Rakefile")
261
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/app/helpers/application_helper.rb")
262
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/app/views/layouts/application.html.erb")
263
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/application.rb")
264
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/environment.rb")
265
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/environments/development.rb")
266
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/environments/test.rb")
267
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/environments/production.rb")
268
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/initializers/secret_token.rb")
269
+ FileHelpers.replace_string(/BRICK_APP_NAME/, @options[:rails_app_name], @app_dir + "/config/initializers/session_store.rb")
270
+ FileHelpers.replace_string(/BRICK_SESSION/, @options[:rails_app_name].downcase, @app_dir + "/config/initializers/session_store.rb")
271
+ new_line
272
+ wputs "----> App name set.", :info
273
+ end
274
+
275
+ def bundle_install
276
+ new_line(2)
277
+ wputs "----> Installing gems into 'vendor/bundle/' ...", :info
278
+ Dir.chdir "#{@app_dir}" do
279
+ system "bundle install --without production --path vendor/bundle"
280
+ end
281
+ new_line
282
+ wputs "----> Gems installed in 'vendor/bundle/'.", :info
283
+ end
284
+
285
+ def annotate
286
+ new_line(2)
287
+ wputs "----> Annotating models and routes ...", :info
288
+ Dir.chdir "#{@app_dir}" do
289
+ system "bundle exec annotate"
290
+ system "bundle exec annotate --routes"
291
+ end
292
+ new_line
293
+ wputs "----> Models and routes annotated.", :info
294
+ end
295
+
296
+ def create_database
297
+ new_line(2)
298
+ wputs "----> Creating database ...", :info
299
+ Dir.chdir "#{@app_dir}" do
300
+ system "#{@options[:rake_command]} db:create:all"
301
+ system "#{@options[:rake_command]} db:migrate"
302
+ system "#{@options[:rake_command]} db:seed"
303
+ end
304
+ new_line
305
+ wputs "----> Database created.", :info
306
+ end
307
+
308
+ def set_git
309
+ # Always copy .gitignore
310
+ FileUtils.cp_r(@rbricks_dir + "/assets/git/gitignore", @app_dir + "/.gitignore")
311
+
312
+ if @options[:local_git]
313
+ new_line(2)
314
+ wputs "----> Setting up Git ...", :info
315
+ Dir.chdir "#{@app_dir}" do
316
+ system "git init"
317
+ system "git add -A ."
318
+ system "git commit -m 'initial commit (RailsBricks #{@options[:railsbricks_version]})'"
319
+
320
+ if @options[:remote_git]
321
+ system "git remote add origin #{@options[:git_url]}"
322
+ system "git push origin master"
323
+ end
324
+ end
325
+
326
+ new_line
327
+ wputs "----> Git set up.", :info
328
+ end
329
+ end
330
+
331
+ def wputs(text, highlight = :none)
332
+ StringHelpers.wputs(text, highlight)
333
+ end
334
+
335
+ def new_line(lines=1)
336
+ StringHelpers.new_line(lines)
337
+ end
338
+
339
+ end