rails_apps_composer 1.5.5 → 2.0.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.
- 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
|