rails_apps_composer 1.5.5 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +185 -254
- data/lib/rails_wizard/command.rb +54 -13
- data/lib/rails_wizard/config.rb +1 -1
- data/lib/rails_wizard/diagnostics.rb +22 -0
- data/lib/rails_wizard/template.rb +36 -2
- data/lib/rails_wizard.rb +1 -0
- data/recipes/auth.rb +84 -0
- data/recipes/controllers.rb +58 -0
- data/recipes/{seed_database.rb → database.rb} +35 -22
- data/recipes/{action_mailer.rb → email.rb} +29 -50
- data/recipes/example.rb +70 -0
- data/recipes/extras.rb +91 -30
- data/recipes/frontend.rb +59 -0
- data/recipes/gems.rb +128 -0
- data/recipes/models.rb +61 -0
- data/recipes/prelaunch.rb +45 -0
- data/recipes/readme.rb +83 -0
- data/recipes/routes.rb +36 -0
- data/recipes/setup.rb +148 -0
- data/recipes/testing.rb +187 -0
- data/recipes/views.rb +39 -0
- data/spec/rails_wizard/template_spec.rb +4 -2
- data/templates/helpers.erb +53 -2
- data/templates/layout.erb +81 -20
- data/version.rb +1 -1
- metadata +19 -49
- data/recipes/active_admin.rb +0 -36
- data/recipes/activerecord.rb +0 -37
- data/recipes/add_user.rb +0 -140
- data/recipes/airbrake.rb +0 -34
- data/recipes/backbone.rb +0 -23
- data/recipes/capybara.rb +0 -34
- data/recipes/cleanup.rb +0 -40
- data/recipes/cloudfiles.rb +0 -36
- data/recipes/compass.rb +0 -46
- data/recipes/compass_960.rb +0 -48
- data/recipes/cucumber.rb +0 -75
- data/recipes/datamapper.rb +0 -111
- data/recipes/devise.rb +0 -114
- data/recipes/git.rb +0 -40
- data/recipes/guard.rb +0 -89
- data/recipes/haml.rb +0 -23
- data/recipes/heroku.rb +0 -61
- data/recipes/home_page.rb +0 -58
- data/recipes/home_page_users.rb +0 -47
- data/recipes/html5.rb +0 -152
- data/recipes/inherited_resources.rb +0 -23
- data/recipes/less.rb +0 -12
- data/recipes/mongohq.rb +0 -59
- data/recipes/mongoid.rb +0 -38
- data/recipes/mongolab.rb +0 -59
- data/recipes/omniauth.rb +0 -194
- data/recipes/omniauth_email.rb +0 -82
- data/recipes/paperclip.rb +0 -79
- data/recipes/prelaunch_signup.rb +0 -586
- data/recipes/rails_admin.rb +0 -29
- data/recipes/redis.rb +0 -23
- data/recipes/responders.rb +0 -10
- data/recipes/resque.rb +0 -25
- data/recipes/rspec.rb +0 -131
- data/recipes/sass.rb +0 -25
- data/recipes/settingslogic.rb +0 -43
- data/recipes/simple_form.rb +0 -54
- data/recipes/slim.rb +0 -46
- data/recipes/static_page.rb +0 -43
- data/recipes/subdomains.rb +0 -121
- data/recipes/turnip.rb +0 -18
- data/recipes/unicorn.rb +0 -29
- data/recipes/users_page.rb +0 -165
data/lib/rails_wizard/command.rb
CHANGED
@@ -8,9 +8,11 @@ module RailsWizard
|
|
8
8
|
method_option :recipes, :type => :array, :aliases => "-r"
|
9
9
|
method_option :defaults, :type => :string, :aliases => "-d"
|
10
10
|
def new(name)
|
11
|
+
args = ask_for_args
|
11
12
|
recipes, defaults = load_defaults
|
12
13
|
recipes = ask_for_recipes(recipes)
|
13
|
-
|
14
|
+
gems = ask_for_gems
|
15
|
+
run_template(name, recipes, gems, args, defaults, nil)
|
14
16
|
end
|
15
17
|
|
16
18
|
desc "template TEMPLATE_FILE", "create a new Rails template"
|
@@ -19,7 +21,8 @@ module RailsWizard
|
|
19
21
|
def template(template_name)
|
20
22
|
recipes, defaults = load_defaults
|
21
23
|
recipes = ask_for_recipes(recipes)
|
22
|
-
|
24
|
+
gems = ask_for_gems
|
25
|
+
run_template(nil, recipes, gems, nil, defaults, template_name)
|
23
26
|
end
|
24
27
|
|
25
28
|
desc "list [CATEGORY]", "list available recipes (optionally by category)"
|
@@ -85,29 +88,67 @@ module RailsWizard
|
|
85
88
|
recipes
|
86
89
|
end
|
87
90
|
|
91
|
+
def ask_for_gems
|
92
|
+
gems = []
|
93
|
+
while getgem = ask("#{bold}What gem would you like to add? #{clear}#{yellow}(blank to finish)#{clear}")
|
94
|
+
if getgem == ''
|
95
|
+
break
|
96
|
+
else
|
97
|
+
gems << getgem.downcase
|
98
|
+
end
|
99
|
+
end
|
100
|
+
gems
|
101
|
+
end
|
102
|
+
|
103
|
+
def ask_for_args
|
104
|
+
args = []
|
105
|
+
question = "#{bold}Would you like to skip Test::Unit? (yes for RSpec) \033[33m(y/n)\033[0m#{clear}"
|
106
|
+
while getT = ask(question)
|
107
|
+
case getT.downcase
|
108
|
+
when "yes", "y"
|
109
|
+
args << "-T"
|
110
|
+
break
|
111
|
+
when "no", "n"
|
112
|
+
args << ""
|
113
|
+
break
|
114
|
+
end
|
115
|
+
end
|
116
|
+
question = "#{bold}Would you like to skip Active Record? (yes for NoSQL) \033[33m(y/n)\033[0m#{clear}"
|
117
|
+
while getO = ask(question)
|
118
|
+
case getO.downcase
|
119
|
+
when "yes", "y"
|
120
|
+
args << "-O"
|
121
|
+
break
|
122
|
+
when "no", "n"
|
123
|
+
args << ""
|
124
|
+
break
|
125
|
+
end
|
126
|
+
end
|
127
|
+
args
|
128
|
+
end
|
129
|
+
|
88
130
|
#pass in name if you want to create a rails app
|
89
131
|
#pass in file_name if you want to create a template
|
90
|
-
def run_template(name, recipes, defaults, file_name=nil)
|
91
|
-
puts
|
92
|
-
puts
|
93
|
-
puts "#{bold}Generating#{name ? " and Running" : ''} Template..."
|
94
|
-
puts
|
95
|
-
|
132
|
+
def run_template(name, recipes, gems, args, defaults, file_name=nil)
|
96
133
|
if file_name
|
97
134
|
file = File.new(file_name,'w')
|
98
135
|
else
|
99
136
|
file = Tempfile.new('template')
|
100
137
|
end
|
101
138
|
begin
|
102
|
-
template = RailsWizard::Template.new(recipes, defaults)
|
139
|
+
template = RailsWizard::Template.new(recipes, gems, args, defaults)
|
103
140
|
file.write template.compile
|
104
141
|
file.close
|
105
142
|
if name
|
106
|
-
|
143
|
+
args_list = (args | template.args).join(' ')
|
144
|
+
puts "Generating basic application, using:"
|
145
|
+
puts "\"rails new #{name} -m <temp_file> #{args_list}\""
|
146
|
+
system "rails new #{name} -m #{file.path} #{args_list}"
|
107
147
|
else
|
108
|
-
puts "
|
109
|
-
puts
|
110
|
-
puts "
|
148
|
+
puts "Generating and saving application template..."
|
149
|
+
puts "Done."
|
150
|
+
puts "Generate a new application with the command:"
|
151
|
+
puts "\"rails new <APP_NAME> -m #{file.path} #{template.args.join(' ')}\""
|
111
152
|
end
|
112
153
|
rescue RailsWizard::UnknownRecipeError
|
113
154
|
raise Thor::Error.new("> #{red}#{$!.message}.#{clear}")
|
data/lib/rails_wizard/config.rb
CHANGED
@@ -22,7 +22,7 @@ module RailsWizard
|
|
22
22
|
values.merge!(defaults) if defaults
|
23
23
|
result << "config = #{values.inspect}"
|
24
24
|
@questions.each_pair do |key, question|
|
25
|
-
result << "config['#{key}'] = #{question.compile} unless config.key?('#{key}')"
|
25
|
+
result << "config['#{key}'] = #{question.compile} unless config.key?('#{key}') || prefs.has_key?(:#{key})"
|
26
26
|
end
|
27
27
|
result.join("\n")
|
28
28
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module RailsWizard
|
2
|
+
module Diagnostics
|
3
|
+
# collections of recipes that are known to work together
|
4
|
+
@@recipes = []
|
5
|
+
@@recipes << ["example"]
|
6
|
+
@@recipes << ["setup"]
|
7
|
+
@@recipes << ["gems", "setup"]
|
8
|
+
@@recipes << ["gems", "readme", "setup"]
|
9
|
+
@@recipes << ["extras", "gems", "readme", "setup"]
|
10
|
+
|
11
|
+
# collections of preferences that are known to work together
|
12
|
+
@@prefs = []
|
13
|
+
@@prefs << {:database=>"sqlite", :templates=>"erb"}
|
14
|
+
def self.recipes
|
15
|
+
@@recipes
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.prefs
|
19
|
+
@@prefs
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,10 +1,21 @@
|
|
1
1
|
module RailsWizard
|
2
2
|
class Template
|
3
|
-
attr_reader :recipes, :defaults
|
3
|
+
attr_reader :recipes, :gems, :args, :defaults
|
4
4
|
|
5
|
-
def initialize(recipes, defaults={})
|
5
|
+
def initialize(recipes, gems=[], args=[], defaults={})
|
6
6
|
@recipes = recipes.map{|r| RailsWizard::Recipe.from_mongo(r)}
|
7
|
+
@args = args
|
7
8
|
@defaults = defaults
|
9
|
+
unless defaults['prefs'].nil?
|
10
|
+
@prefs = defaults['prefs']
|
11
|
+
else
|
12
|
+
@prefs = {}
|
13
|
+
end
|
14
|
+
unless defaults['gems'].nil?
|
15
|
+
@gems = gems | defaults['gems']
|
16
|
+
else
|
17
|
+
@gems = gems
|
18
|
+
end
|
8
19
|
end
|
9
20
|
|
10
21
|
def self.template_root
|
@@ -17,7 +28,30 @@ module RailsWizard
|
|
17
28
|
end
|
18
29
|
def render(template_name, binding = nil); self.class.render(template_name, binding) end
|
19
30
|
|
31
|
+
def resolve_preferences
|
32
|
+
@resolve_preferences ||= begin
|
33
|
+
@prefs.inspect
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def resolve_gems
|
38
|
+
@resolve_gems ||= begin
|
39
|
+
@gems.uniq.inspect
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def resolve_diagnostics_recipes
|
44
|
+
@resolve_diagnostics_recipes ||= begin
|
45
|
+
RailsWizard::Diagnostics.recipes.inspect
|
46
|
+
end
|
47
|
+
end
|
20
48
|
|
49
|
+
def resolve_diagnostics_prefs
|
50
|
+
@resolve_diagnostics_prefs ||= begin
|
51
|
+
RailsWizard::Diagnostics.prefs.inspect
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
21
55
|
# Sort the recipes list taking 'run_after' directives into account.
|
22
56
|
def resolve_recipes
|
23
57
|
@resolve_recipes ||= begin
|
data/lib/rails_wizard.rb
CHANGED
data/recipes/auth.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
# Application template recipe for the rails_apps_composer. Change the recipe here:
|
2
|
+
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/auth.rb
|
3
|
+
|
4
|
+
after_bundler do
|
5
|
+
say_wizard "recipe running after 'bundle install'"
|
6
|
+
### DEVISE ###
|
7
|
+
if prefer :authentication, 'devise'
|
8
|
+
# Prevent logging of password_confirmation
|
9
|
+
gsub_file 'config/application.rb', /:password/, ':password, :password_confirmation'
|
10
|
+
generate 'devise:install'
|
11
|
+
generate 'devise_invitable:install' if prefer :devise_modules, 'invitable'
|
12
|
+
generate 'devise user'
|
13
|
+
## DEVISE AND CUCUMBER
|
14
|
+
if prefer :integration, 'cucumber'
|
15
|
+
# Cucumber wants to test GET requests not DELETE requests for destroy_user_session_path
|
16
|
+
# (see https://github.com/RailsApps/rails3-devise-rspec-cucumber/issues/3)
|
17
|
+
gsub_file 'config/initializers/devise.rb', 'config.sign_out_via = :delete', 'config.sign_out_via = Rails.env.test? ? :get : :delete'
|
18
|
+
end
|
19
|
+
## DEVISE MODULES
|
20
|
+
if (prefer :devise_modules, 'confirmable') || (prefer :devise_modules, 'invitable')
|
21
|
+
gsub_file 'app/models/user.rb', /:registerable,/, ":registerable, :confirmable,"
|
22
|
+
gsub_file 'app/models/user.rb', /:remember_me/, ':remember_me, :confirmed_at'
|
23
|
+
if prefer :orm, 'mongoid'
|
24
|
+
gsub_file 'app/models/user.rb', /# field :confirmation_token/, "field :confirmation_token"
|
25
|
+
gsub_file 'app/models/user.rb', /# field :confirmed_at/, "field :confirmed_at"
|
26
|
+
gsub_file 'app/models/user.rb', /# field :confirmation_sent_at/, "field :confirmation_sent_at"
|
27
|
+
gsub_file 'app/models/user.rb', /# field :unconfirmed_email/, "field :unconfirmed_email"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
if prefer :devise_modules, 'invitable'
|
31
|
+
if prefer :orm, 'mongoid'
|
32
|
+
gsub_file 'app/models/user.rb', /\bend\s*\Z/ do
|
33
|
+
<<-RUBY
|
34
|
+
#invitable
|
35
|
+
field :invitation_token, :type => String
|
36
|
+
field :invitation_sent_at, :type => Time
|
37
|
+
field :invitation_accepted_at, :type => Time
|
38
|
+
field :invitation_limit, :type => Integer
|
39
|
+
field :invited_by_id, :type => String
|
40
|
+
field :invited_by_type, :type => String
|
41
|
+
end
|
42
|
+
RUBY
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
### OMNIAUTH ###
|
48
|
+
if prefer :authentication, 'omniauth'
|
49
|
+
# Don't use single-quote-style-heredoc: we want interpolation.
|
50
|
+
create_file 'config/initializers/omniauth.rb' do <<-RUBY
|
51
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
52
|
+
provider :#{prefs[:omniauth_provider]}, ENV['OMNIAUTH_PROVIDER_KEY'], ENV['OMNIAUTH_PROVIDER_SECRET']
|
53
|
+
end
|
54
|
+
RUBY
|
55
|
+
end
|
56
|
+
end
|
57
|
+
### CANCAN ###
|
58
|
+
if prefer :authorization, 'cancan'
|
59
|
+
generate 'cancan:ability'
|
60
|
+
if prefer :starter_app, 'admin_dashboard'
|
61
|
+
# Limit access to the users#index page
|
62
|
+
inject_into_file 'app/models/ability.rb', :after => "def initialize(user)\n" do <<-RUBY
|
63
|
+
user ||= User.new # guest user (not logged in)
|
64
|
+
if user.has_role? :admin
|
65
|
+
can :manage, :all
|
66
|
+
end
|
67
|
+
RUBY
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
### GIT ###
|
72
|
+
git :add => '.' if prefer :git, true
|
73
|
+
git :commit => "-aqm 'rails_apps_composer: authentication and authorization'" if prefer :git, true
|
74
|
+
end # after_bundler
|
75
|
+
|
76
|
+
__END__
|
77
|
+
|
78
|
+
name: auth
|
79
|
+
description: "Add authentication and authorization."
|
80
|
+
author: RailsApps
|
81
|
+
|
82
|
+
requires: [setup, gems]
|
83
|
+
run_after: [setup, gems]
|
84
|
+
category: auth
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# Application template recipe for the rails_apps_composer. Change the recipe here:
|
2
|
+
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/controllers.rb
|
3
|
+
|
4
|
+
after_bundler do
|
5
|
+
say_wizard "recipe running after 'bundle install'"
|
6
|
+
### APPLICATION_CONTROLLER ###
|
7
|
+
if prefer :authentication, 'omniauth'
|
8
|
+
copy_from_repo 'app/controllers/application_controller.rb', :repo => 'https://raw.github.com/RailsApps/rails3-mongoid-omniauth/master/'
|
9
|
+
end
|
10
|
+
if prefer :authorization, 'cancan'
|
11
|
+
inject_into_file 'app/controllers/application_controller.rb', :before => 'end' do <<-RUBY
|
12
|
+
rescue_from CanCan::AccessDenied do |exception|
|
13
|
+
redirect_to root_path, :alert => exception.message
|
14
|
+
end
|
15
|
+
RUBY
|
16
|
+
end
|
17
|
+
end
|
18
|
+
### HOME_CONTROLLER ###
|
19
|
+
if ['home_app','users_app','admin_app','subdomains_app'].include? prefs[:starter_app]
|
20
|
+
generate(:controller, "home index")
|
21
|
+
end
|
22
|
+
if ['users_app','admin_app','subdomains_app'].include? prefs[:starter_app]
|
23
|
+
gsub_file 'app/controllers/home_controller.rb', /def index/, "def index\n @users = User.all"
|
24
|
+
end
|
25
|
+
### USERS_CONTROLLER ###
|
26
|
+
if ['users_app','admin_app','subdomains_app'].include? prefs[:starter_app]
|
27
|
+
if prefer :authentication, 'devise'
|
28
|
+
copy_from_repo 'app/controllers/users_controller.rb', :repo => 'https://raw.github.com/RailsApps/rails3-devise-rspec-cucumber/master/'
|
29
|
+
elsif prefer :authentication, 'omniauth'
|
30
|
+
copy_from_repo 'app/controllers/users_controller.rb', :repo => 'https://raw.github.com/RailsApps/rails3-mongoid-omniauth/master/'
|
31
|
+
end
|
32
|
+
if prefer :authorization, 'cancan'
|
33
|
+
inject_into_file 'app/controllers/users_controller.rb', " authorize! :index, @user, :message => 'Not authorized as an administrator.'\n", :after => "def index\n"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
gsub_file 'app/controllers/users_controller.rb', /before_filter :authenticate_user!/, '' if prefer :starter_app, 'subdomains'
|
37
|
+
### SESSIONS_CONTROLLER ###
|
38
|
+
if prefer :authentication, 'omniauth'
|
39
|
+
filename = 'app/controllers/sessions_controller.rb'
|
40
|
+
copy_from_repo filename, :repo => 'https://raw.github.com/RailsApps/rails3-mongoid-omniauth/master/'
|
41
|
+
gsub_file filename, /twitter/, prefs[:omniauth_provider] unless prefer :omniauth_provider, 'twitter'
|
42
|
+
end
|
43
|
+
### PROFILES_CONTROLLER ###
|
44
|
+
copy_from_repo 'app/controllers/profiles_controller.rb', :repo => 'https://raw.github.com/RailsApps/rails3-subdomains/master/' if prefer :starter_app, 'subdomains'
|
45
|
+
### GIT ###
|
46
|
+
git :add => '.' if prefer :git, true
|
47
|
+
git :commit => "-aqm 'rails_apps_composer: controllers'" if prefer :git, true
|
48
|
+
end # after_bundler
|
49
|
+
|
50
|
+
__END__
|
51
|
+
|
52
|
+
name: controllers
|
53
|
+
description: "Add controllers needed for starter apps."
|
54
|
+
author: RailsApps
|
55
|
+
|
56
|
+
requires: [setup, gems, auth, models]
|
57
|
+
run_after: [setup, gems, auth, models]
|
58
|
+
category: mvc
|
@@ -1,10 +1,12 @@
|
|
1
|
-
# Application template recipe for the rails_apps_composer.
|
2
|
-
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/
|
1
|
+
# Application template recipe for the rails_apps_composer. Change the recipe here:
|
2
|
+
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/database.rb
|
3
3
|
|
4
|
-
|
5
|
-
say_wizard "
|
6
|
-
|
7
|
-
|
4
|
+
after_everything do
|
5
|
+
say_wizard "recipe running after everything"
|
6
|
+
### PREPARE SEED ###
|
7
|
+
if prefer :authentication, 'devise'
|
8
|
+
if (prefer :devise_modules, 'confirmable') || (prefer :devise_modules, 'invitable')
|
9
|
+
## DEVISE-CONFIRMABLE
|
8
10
|
append_file 'db/seeds.rb' do <<-FILE
|
9
11
|
puts 'SETTING UP DEFAULT USER LOGIN'
|
10
12
|
user = User.create! :name => 'First User', :email => 'user@example.com', :password => 'please', :password_confirmation => 'please', :confirmed_at => Time.now.utc
|
@@ -14,6 +16,7 @@ puts 'New user created: ' << user2.name
|
|
14
16
|
FILE
|
15
17
|
end
|
16
18
|
else
|
19
|
+
## DEVISE-DEFAULT
|
17
20
|
append_file 'db/seeds.rb' do <<-FILE
|
18
21
|
puts 'SETTING UP DEFAULT USER LOGIN'
|
19
22
|
user = User.create! :name => 'First User', :email => 'user@example.com', :password => 'please', :password_confirmation => 'please'
|
@@ -23,36 +26,46 @@ puts 'New user created: ' << user2.name
|
|
23
26
|
FILE
|
24
27
|
end
|
25
28
|
end
|
26
|
-
if
|
29
|
+
if prefer :starter_app, 'subdomains'
|
30
|
+
gsub_file 'db/seeds.rb', /First User/, 'user1'
|
31
|
+
gsub_file 'db/seeds.rb', /Second User/, 'user2'
|
32
|
+
end
|
33
|
+
if prefer :authorization, 'cancan'
|
27
34
|
append_file 'db/seeds.rb' do <<-FILE
|
28
35
|
user.add_role :admin
|
29
36
|
FILE
|
30
37
|
end
|
31
38
|
end
|
39
|
+
## DEVISE-INVITABLE
|
40
|
+
if prefer :devise_modules, 'invitable'
|
41
|
+
run 'bundle exec rake db:migrate'
|
42
|
+
generate 'devise_invitable user'
|
43
|
+
end
|
32
44
|
end
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
if recipes.include? 'devise-invitable'
|
37
|
-
run 'bundle exec rake db:migrate'
|
38
|
-
generate 'devise_invitable user'
|
39
|
-
end
|
40
|
-
unless recipes.include? 'mongoid'
|
45
|
+
### APPLY SEED ###
|
46
|
+
unless prefer :orm, 'mongoid'
|
47
|
+
## MONGOID
|
41
48
|
say_wizard "applying migrations and seeding the database"
|
42
49
|
run 'bundle exec rake db:migrate'
|
43
50
|
run 'bundle exec rake db:test:prepare'
|
44
51
|
else
|
45
|
-
|
46
|
-
|
52
|
+
## ACTIVE_RECORD
|
53
|
+
say_wizard "dropping database, creating indexes and seeding the database"
|
54
|
+
run 'bundle exec rake db:drop'
|
55
|
+
run 'bundle exec rake db:mongoid:create_indexes'
|
47
56
|
end
|
48
57
|
run 'bundle exec rake db:seed'
|
49
|
-
|
58
|
+
### GIT ###
|
59
|
+
git :add => '.' if prefer :git, true
|
60
|
+
git :commit => "-aqm 'rails_apps_composer: set up database'" if prefer :git, true
|
61
|
+
end # after_everything
|
50
62
|
|
51
63
|
__END__
|
52
64
|
|
53
|
-
name:
|
54
|
-
description: "
|
65
|
+
name: database
|
66
|
+
description: "Set up and initialize database."
|
55
67
|
author: RailsApps
|
56
68
|
|
57
|
-
|
58
|
-
|
69
|
+
requires: [setup, gems, models]
|
70
|
+
run_after: [setup, gems, models]
|
71
|
+
category: initialize
|
@@ -1,25 +1,12 @@
|
|
1
|
-
# Application template recipe for the rails_apps_composer.
|
2
|
-
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/
|
3
|
-
|
4
|
-
case config['mailer']
|
5
|
-
when 'smtp'
|
6
|
-
recipes << 'smtp'
|
7
|
-
when 'gmail'
|
8
|
-
recipes << 'gmail'
|
9
|
-
when 'sendgrid'
|
10
|
-
gem 'sendgrid'
|
11
|
-
recipes << 'sendgrid'
|
12
|
-
when 'mandrill'
|
13
|
-
gem 'hominid'
|
14
|
-
recipes << 'mandrill'
|
15
|
-
end
|
1
|
+
# Application template recipe for the rails_apps_composer. Change the recipe here:
|
2
|
+
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/email.rb
|
16
3
|
|
17
4
|
after_bundler do
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
5
|
+
say_wizard "recipe running after 'bundle install'"
|
6
|
+
unless prefer :email, 'none'
|
7
|
+
### DEVELOPMENT
|
8
|
+
gsub_file 'config/environments/development.rb', /# Don't care if the mailer can't send/, '# ActionMailer Config'
|
9
|
+
gsub_file 'config/environments/development.rb', /config.action_mailer.raise_delivery_errors = false/ do
|
23
10
|
<<-RUBY
|
24
11
|
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
|
25
12
|
config.action_mailer.delivery_method = :smtp
|
@@ -28,17 +15,17 @@ config.action_mailer.default_url_options = { :host => 'localhost:3000' }
|
|
28
15
|
config.action_mailer.raise_delivery_errors = true
|
29
16
|
config.action_mailer.default :charset => "utf-8"
|
30
17
|
RUBY
|
31
|
-
|
32
|
-
|
33
|
-
|
18
|
+
end
|
19
|
+
### TEST
|
20
|
+
inject_into_file 'config/environments/test.rb', :before => "\nend" do
|
34
21
|
<<-RUBY
|
35
22
|
\n
|
36
23
|
# ActionMailer Config
|
37
24
|
config.action_mailer.default_url_options = { :host => 'example.com' }
|
38
25
|
RUBY
|
39
|
-
|
40
|
-
|
41
|
-
|
26
|
+
end
|
27
|
+
### PRODUCTION
|
28
|
+
gsub_file 'config/environments/production.rb', /config.active_support.deprecation = :notify/ do
|
42
29
|
<<-RUBY
|
43
30
|
config.active_support.deprecation = :notify
|
44
31
|
|
@@ -50,10 +37,10 @@ config.active_support.deprecation = :notify
|
|
50
37
|
config.action_mailer.raise_delivery_errors = false
|
51
38
|
config.action_mailer.default :charset => "utf-8"
|
52
39
|
RUBY
|
40
|
+
end
|
53
41
|
end
|
54
|
-
|
55
|
-
|
56
|
-
if recipes.include? 'gmail'
|
42
|
+
### GMAIL ACCOUNT
|
43
|
+
if prefer :email, 'gmail'
|
57
44
|
gmail_configuration_text = <<-TEXT
|
58
45
|
\n
|
59
46
|
config.action_mailer.smtp_settings = {
|
@@ -66,13 +53,11 @@ RUBY
|
|
66
53
|
password: ENV["GMAIL_PASSWORD"]
|
67
54
|
}
|
68
55
|
TEXT
|
69
|
-
say_wizard gmail_configuration_text
|
70
56
|
inject_into_file 'config/environments/development.rb', gmail_configuration_text, :after => 'config.action_mailer.default :charset => "utf-8"'
|
71
57
|
inject_into_file 'config/environments/production.rb', gmail_configuration_text, :after => 'config.action_mailer.default :charset => "utf-8"'
|
72
58
|
end
|
73
|
-
|
74
|
-
|
75
|
-
if recipes.include? 'sendgrid'
|
59
|
+
### SENDGRID ACCOUNT
|
60
|
+
if prefer :email, 'sendgrid'
|
76
61
|
sendgrid_configuration_text = <<-TEXT
|
77
62
|
\n
|
78
63
|
config.action_mailer.smtp_settings = {
|
@@ -84,13 +69,11 @@ TEXT
|
|
84
69
|
password: ENV["SENDGRID_PASSWORD"]
|
85
70
|
}
|
86
71
|
TEXT
|
87
|
-
say_wizard gmail_configuration_text
|
88
72
|
inject_into_file 'config/environments/development.rb', sendgrid_configuration_text, :after => 'config.action_mailer.default :charset => "utf-8"'
|
89
73
|
inject_into_file 'config/environments/production.rb', sendgrid_configuration_text, :after => 'config.action_mailer.default :charset => "utf-8"'
|
90
74
|
end
|
91
|
-
|
92
|
-
|
93
|
-
if recipes.include? 'mandrill'
|
75
|
+
### MANDRILL ACCOUNT
|
76
|
+
if prefer :email, 'mandrill'
|
94
77
|
mandrill_configuration_text = <<-TEXT
|
95
78
|
\n
|
96
79
|
config.action_mailer.smtp_settings = {
|
@@ -100,24 +83,20 @@ TEXT
|
|
100
83
|
:password => ENV["MANDRILL_API_KEY"]
|
101
84
|
}
|
102
85
|
TEXT
|
103
|
-
say_wizard gmail_configuration_text
|
104
86
|
inject_into_file 'config/environments/development.rb', mandrill_configuration_text, :after => 'config.action_mailer.default :charset => "utf-8"'
|
105
87
|
inject_into_file 'config/environments/production.rb', mandrill_configuration_text, :after => 'config.action_mailer.default :charset => "utf-8"'
|
106
88
|
end
|
107
|
-
|
108
|
-
|
89
|
+
### GIT
|
90
|
+
git :add => '.' if prefer :git, true
|
91
|
+
git :commit => "-aqm 'rails_apps_composer: set email accounts'" if prefer :git, true
|
92
|
+
end # after_bundler
|
109
93
|
|
110
94
|
__END__
|
111
95
|
|
112
|
-
name:
|
113
|
-
description: "Configure
|
96
|
+
name: email
|
97
|
+
description: "Configure email accounts."
|
114
98
|
author: RailsApps
|
115
99
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
config:
|
120
|
-
- mailer:
|
121
|
-
type: multiple_choice
|
122
|
-
prompt: "How will you send email?"
|
123
|
-
choices: [["SMTP account", smtp], ["Gmail account", gmail], ["SendGrid account", sendgrid], ["Mandrill by MailChimp account", mandrill]]
|
100
|
+
requires: [setup]
|
101
|
+
run_after: [setup]
|
102
|
+
category: configuration
|
data/recipes/example.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# Application template recipe for the rails_apps_composer. Change the recipe here:
|
2
|
+
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/example.rb
|
3
|
+
|
4
|
+
before_config do
|
5
|
+
# Code here is run before any configuration prompts.
|
6
|
+
say_wizard "recipe running before configuration"
|
7
|
+
end
|
8
|
+
|
9
|
+
if config['space_test']
|
10
|
+
say_wizard "running a space test"
|
11
|
+
test_count = config['test_count']
|
12
|
+
say_wizard "will run the test #{test_count} times"
|
13
|
+
say_wizard "will run the test in #{config['orbit']} orbit"
|
14
|
+
unless config['mars_test']
|
15
|
+
say_wizard "Mars test not available"
|
16
|
+
end
|
17
|
+
# the @config@ hash is only available to the recipe
|
18
|
+
# the @prefs{}@ hash is available to all the recipes
|
19
|
+
case config['orbit']
|
20
|
+
when 'leo'
|
21
|
+
prefs[:test_orbit] = 'leo'
|
22
|
+
when 'spy'
|
23
|
+
prefs[:test_orbit] = 'spy'
|
24
|
+
when 'gps'
|
25
|
+
prefs[:test_orbit] = 'gps'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
after_bundler do
|
30
|
+
# Code here is run after Bundler installs all the gems for the project.
|
31
|
+
# Use this section to run generators and rake tasks.
|
32
|
+
# Download any files from a repository for models, controllers, views, and routes.
|
33
|
+
say_wizard "recipe running after 'bundle install'"
|
34
|
+
end
|
35
|
+
|
36
|
+
after_everything do
|
37
|
+
# This block is run after the 'after_bundler' block.
|
38
|
+
# Use this section to finalize the application.
|
39
|
+
# Run database migrations or make a final git commit.
|
40
|
+
say_wizard "recipe running after everything"
|
41
|
+
end
|
42
|
+
|
43
|
+
# A recipe has two parts: the Ruby code and YAML matter that comes after a blank line with the __END__ keyword.
|
44
|
+
|
45
|
+
__END__
|
46
|
+
|
47
|
+
name: example
|
48
|
+
description: "Example of a recipe"
|
49
|
+
author: githubname
|
50
|
+
|
51
|
+
category: example
|
52
|
+
|
53
|
+
config:
|
54
|
+
- space_test:
|
55
|
+
type: boolean
|
56
|
+
prompt: Do you want to test your application in space?
|
57
|
+
- mars_test:
|
58
|
+
type: boolean
|
59
|
+
prompt: Do you also want to test your application on Mars?
|
60
|
+
if: space_test
|
61
|
+
if_recipe: mars_lander
|
62
|
+
- test_count:
|
63
|
+
type: string
|
64
|
+
prompt: How many times would you like to repeat the test?
|
65
|
+
if: space_test
|
66
|
+
- orbit:
|
67
|
+
type: multiple_choice
|
68
|
+
prompt: "What orbit do you want?"
|
69
|
+
choices: [ [Low Earth orbit, leo], [Sun-synchronous, spy], [Geostationary, gps] ]
|
70
|
+
if: space_test
|