Class: Trireme::AppBuilder
- Inherits:
-
Rails::AppBuilder
- Object
- Rails::AppBuilder
- Trireme::AppBuilder
- Includes:
- Actions
- Defined in:
- lib/trireme/app_builder.rb
Instance Attribute Summary collapse
-
#domain_base ⇒ Object
Returns the value of attribute domain_base.
-
#server_ip ⇒ Object
Returns the value of attribute server_ip.
Instance Method Summary collapse
- #add_additional_gems ⇒ Object
- #add_bootstrap_and_overrides ⇒ Object
- #add_custom_gems ⇒ Object
- #add_to_gitignore ⇒ Object
-
#config_settings ⇒ Object
———-.
- #configure_generators ⇒ Object
- #configure_rspec ⇒ Object
- #copy_application_layout ⇒ Object
- #copy_bootstrap_scaffold_templates ⇒ Object
- #copy_utility_helper ⇒ Object
- #create_admin_actions_partial ⇒ Object
- #create_flashes_partial ⇒ Object
- #create_form_errors_partial ⇒ Object
- #create_shared_views_directory ⇒ Object
- #format_config(yml, num_tabs = 1) ⇒ Object
- #generate_home_controller ⇒ Object
- #get_server_options ⇒ Object
- #initialize_git ⇒ Object
-
#readme ⇒ Object
Overrides generation of rails readme file.
- #remove_routes_comment_lines ⇒ Object
- #remove_sqlite_gem ⇒ Object
- #replace_application_css ⇒ Object
- #set_sublime_text_as_editor ⇒ Object
- #setup_console ⇒ Object
- #setup_deploy ⇒ Object
- #setup_devise ⇒ Object
- #setup_exception_notification ⇒ Object
- #setup_guard ⇒ Object
- #setup_mailcatcher ⇒ Object
- #setup_quiet_assets ⇒ Object
- #setup_smtp ⇒ Object
- #setup_staging_environment ⇒ Object
Methods included from Actions
#configure_environment, #replace_in_file
Instance Attribute Details
#domain_base ⇒ Object
Returns the value of attribute domain_base.
3 4 5 |
# File 'lib/trireme/app_builder.rb', line 3 def domain_base @domain_base end |
#server_ip ⇒ Object
Returns the value of attribute server_ip.
3 4 5 |
# File 'lib/trireme/app_builder.rb', line 3 def server_ip @server_ip end |
Instance Method Details
#add_additional_gems ⇒ Object
7 8 9 10 11 12 |
# File 'lib/trireme/app_builder.rb', line 7 def add_additional_gems if config_settings[:gems].include?('carrierwave') || yes?("Add carrierwave for file uploading?") @generator.gem 'carrierwave' @generator.gem 'mini_magick' end end |
#add_bootstrap_and_overrides ⇒ Object
14 15 16 |
# File 'lib/trireme/app_builder.rb', line 14 def add_bootstrap_and_overrides copy_file "app/assets/stylesheets/_bootstrap_and_overrides.scss" end |
#add_custom_gems ⇒ Object
18 19 20 21 22 |
# File 'lib/trireme/app_builder.rb', line 18 def add_custom_gems gems_path = find_in_source_paths 'additional_gems' new_gems = File.open(gems_path).read append_file 'Gemfile', "\n#{new_gems}" end |
#add_to_gitignore ⇒ Object
24 25 26 27 28 |
# File 'lib/trireme/app_builder.rb', line 24 def add_to_gitignore gitignore_file = find_in_source_paths('gitignore_additions') gitignore = File.open(gitignore_file).read append_file '.gitignore', gitignore end |
#config_settings ⇒ Object
208 209 210 |
# File 'lib/trireme/app_builder.rb', line 208 def config_settings @config ||= Trireme::config end |
#configure_generators ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/trireme/app_builder.rb', line 30 def configure_generators generators_config = <<-RUBY.gsub(/^ {2}/, '') config.generators do |generate| generate.helper false generate.assets false generate.view_specs false generate.stylesheets false generate.javascripts false end\n RUBY inject_into_class 'config/application.rb', 'Application', generators_config end |
#configure_rspec ⇒ Object
43 44 45 46 |
# File 'lib/trireme/app_builder.rb', line 43 def configure_rspec generate 'rspec:install' run 'rm test/ -Rf' end |
#copy_application_layout ⇒ Object
52 53 54 |
# File 'lib/trireme/app_builder.rb', line 52 def copy_application_layout copy_file "app/views/layouts/application.html.erb", force: true end |
#copy_bootstrap_scaffold_templates ⇒ Object
56 57 58 |
# File 'lib/trireme/app_builder.rb', line 56 def copy_bootstrap_scaffold_templates directory 'lib/templates/erb/scaffold' end |
#copy_utility_helper ⇒ Object
48 49 50 |
# File 'lib/trireme/app_builder.rb', line 48 def copy_utility_helper copy_file "app/helpers/utility_helper.rb", force: true end |
#create_admin_actions_partial ⇒ Object
64 65 66 |
# File 'lib/trireme/app_builder.rb', line 64 def create_admin_actions_partial copy_file "app/views/shared/_admin_actions.html.erb" end |
#create_flashes_partial ⇒ Object
60 61 62 |
# File 'lib/trireme/app_builder.rb', line 60 def create_flashes_partial copy_file "app/views/shared/_flashes.html.erb" end |
#create_form_errors_partial ⇒ Object
68 69 70 |
# File 'lib/trireme/app_builder.rb', line 68 def create_form_errors_partial copy_file "app/views/shared/_form_errors.html.erb" end |
#create_shared_views_directory ⇒ Object
72 73 74 |
# File 'lib/trireme/app_builder.rb', line 72 def create_shared_views_directory empty_directory 'app/views/shared' end |
#format_config(yml, num_tabs = 1) ⇒ Object
212 213 214 215 |
# File 'lib/trireme/app_builder.rb', line 212 def format_config(yml, num_tabs = 1) tabs = "\t" * (num_tabs + 1) yml.to_s.gsub(/\A{/, "{\n#{tabs}").gsub(/, :/, ",\n#{tabs}:").gsub(/}\Z/, "\n#{"\t" * num_tabs}}").gsub("=>", " => ") end |
#generate_home_controller ⇒ Object
76 77 78 79 |
# File 'lib/trireme/app_builder.rb', line 76 def generate_home_controller generate :controller, "home index" route "root to: 'home\#index'" end |
#get_server_options ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/trireme/app_builder.rb', line 81 def @domain_base ||= ask("Domain:") if !@domain_base.blank? && config_settings.has_key?(:chef) && yes?("Get IP from Chef (#{config_settings[:chef][:url]})?") require 'open-uri' begin @server_ip = open("#{config_settings[:chef][:url]}#{@domain_base}").base_uri.to_s.match(/http:\/\/([\d\.]+)/)[1] puts "Setting server ip to #{@server_ip}" rescue puts "Failed to get ip" end end @domain_base = "example.com" if @domain_base.blank? @server_ip ||= ask("Server IP (if you have one):") end |
#initialize_git ⇒ Object
96 97 98 99 100 |
# File 'lib/trireme/app_builder.rb', line 96 def initialize_git git :init git add: "." git commit: "-m 'Inital commit'" end |
#readme ⇒ Object
Overrides generation of rails readme file
103 104 105 |
# File 'lib/trireme/app_builder.rb', line 103 def readme template "README.md.erb", "README.md" end |
#remove_routes_comment_lines ⇒ Object
107 108 109 |
# File 'lib/trireme/app_builder.rb', line 107 def remove_routes_comment_lines replace_in_file 'config/routes.rb', /Application\.routes\.draw do.*end/m, "Application.routes.draw do\nend" end |
#remove_sqlite_gem ⇒ Object
111 112 113 |
# File 'lib/trireme/app_builder.rb', line 111 def remove_sqlite_gem gsub_file 'Gemfile', /^\s*gem .sqlite3.+$/, '' end |
#replace_application_css ⇒ Object
115 116 117 118 |
# File 'lib/trireme/app_builder.rb', line 115 def replace_application_css remove_file 'app/assets/stylesheets/application.css' copy_file 'app/assets/stylesheets/application.css.scss' end |
#set_sublime_text_as_editor ⇒ Object
120 121 122 |
# File 'lib/trireme/app_builder.rb', line 120 def set_sublime_text_as_editor copy_file "config/initializers/better_errors.rb" end |
#setup_console ⇒ Object
153 154 155 |
# File 'lib/trireme/app_builder.rb', line 153 def setup_console copy_file "config/initializers/jazz_hands.rb" end |
#setup_deploy ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/trireme/app_builder.rb', line 129 def setup_deploy if @domain_base && @server_ip opts = { domain_base: @domain_base, server_ip: @server_ip, force: true } else opts[:domain_base] = ask("Domain:") opts[:server_ip] = ask("Server IP:") opts[:force] = true end puts @config.to_yaml deploy_opts = opts.merge({config_settings: config_settings}) template "config/deploy.rb.erb", "config/deploy.rb", deploy_opts directory "config/deploy" %w[staging.rb production.rb].each { |f| template "config/deploy/#{f}.erb", "config/deploy/#{f}", deploy_opts } directory "lib/mina" Dir["#{File.('../../trireme/templates/lib/mina/', __FILE__)}/*.erb"].each do |file| file = file.split('/').last template "lib/mina/#{file}", "lib/mina/#{file.gsub('.erb', '')}", deploy_opts puts "lib/mina/#{file}", "lib/mina/#{file.gsub('.erb', '')}" end run 'rm lib/mina/*.erb' end |
#setup_devise ⇒ Object
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/trireme/app_builder.rb', line 157 def setup_devise if config_settings[:devise][:include] || yes?("Add Devise?") devise_model = ask("Devise model (default: #{config_settings[:devise][:model]}):").underscore unless config_settings[:devise][:force_model] devise_model = config_settings[:devise][:model] if devise_model.blank? @generator.gem 'devise' run 'bundle install' generate 'devise:install' generate "devise #{devise_model}" generate "devise:views" bundle_command 'exec rake db:migrate' if config_settings[:devise][:seed] || yes?("Seed database with #{devise_model}@example.com?") append_file 'db/seeds.rb', "devise_user = #{devise_model.titleize}.create email: '#{devise_model}@example.com', password: 'password'" bundle_command 'exec rake db:seed' end end end |
#setup_exception_notification ⇒ Object
174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/trireme/app_builder.rb', line 174 def setup_exception_notification en_config = "config.middleware.insert_before Warden::Manager, ExceptionNotification::Rack,\n" if config_settings[:exception_notification][:email] config_settings[:exception_notification][:email][:email_prefix] = "[#{app_name.titleize} Exception]" en_config << "\t\t:email => #{format_config(config_settings[:exception_notification][:email], 2)}" end if config_settings[:exception_notification][:irc] config_settings[:exception_notification][:irc][:prefix] = "[#{app_name.titleize} Production]" en_config << ",\n\t\t" if en_config[/}\Z/] en_config << ":irc => #{format_config(config_settings[:exception_notification][:irc].merge(config_settings[:irc]), 2)}" end configure_environment "production", en_config end |
#setup_guard ⇒ Object
188 189 190 |
# File 'lib/trireme/app_builder.rb', line 188 def setup_guard copy_file "Guardfile" end |
#setup_mailcatcher ⇒ Object
192 193 194 195 |
# File 'lib/trireme/app_builder.rb', line 192 def setup_mailcatcher configure_environment "development", "config.action_mailer.delivery_method = :smtp\n config.action_mailer.smtp_settings = { :address => \"localhost\", :port => 1025 }" end |
#setup_quiet_assets ⇒ Object
197 198 199 200 |
# File 'lib/trireme/app_builder.rb', line 197 def setup_quiet_assets configure_environment "development", "config.quiet_assets = true" end |
#setup_smtp ⇒ Object
124 125 126 127 |
# File 'lib/trireme/app_builder.rb', line 124 def setup_smtp configure_environment "production", "config.action_mailer_delivery_method = :smtp\n\tconfig.action_mailer.smtp_settings = #{format_config(config_settings[:action_mailer][:smtp_settings])}" end |
#setup_staging_environment ⇒ Object
202 203 204 |
# File 'lib/trireme/app_builder.rb', line 202 def setup_staging_environment run 'cp config/environments/production.rb config/environments/staging.rb' end |