Class: Trireme::AppBuilder

Inherits:
Rails::AppBuilder
  • Object
show all
Includes:
Actions
Defined in:
lib/trireme/app_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Actions

#configure_environment, #replace_in_file

Instance Attribute Details

#domain_baseObject

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_ipObject

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_gemsObject



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_overridesObject



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_gemsObject



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_gitignoreObject



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_settingsObject




208
209
210
# File 'lib/trireme/app_builder.rb', line 208

def config_settings
  @config ||= Trireme::config
end

#configure_generatorsObject



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_rspecObject



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_layoutObject



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_templatesObject



56
57
58
# File 'lib/trireme/app_builder.rb', line 56

def copy_bootstrap_scaffold_templates
  directory 'lib/templates/erb/scaffold'
end

#copy_utility_helperObject



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_partialObject



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_partialObject



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_partialObject



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_directoryObject



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_controllerObject



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_optionsObject



81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/trireme/app_builder.rb', line 81

def get_server_options
  @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_gitObject



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

#readmeObject

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_linesObject



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_gemObject



111
112
113
# File 'lib/trireme/app_builder.rb', line 111

def remove_sqlite_gem
  gsub_file 'Gemfile', /^\s*gem .sqlite3.+$/, ''
end

#replace_application_cssObject



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_editorObject



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_consoleObject



153
154
155
# File 'lib/trireme/app_builder.rb', line 153

def setup_console
  copy_file "config/initializers/jazz_hands.rb"
end

#setup_deployObject



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.expand_path('../../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_deviseObject



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_notificationObject



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_guardObject



188
189
190
# File 'lib/trireme/app_builder.rb', line 188

def setup_guard
  copy_file "Guardfile"
end

#setup_mailcatcherObject



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_assetsObject



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_smtpObject



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_environmentObject



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