thyone_creator 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/thyone +7 -0
- data/lib/rails_wizard/command.rb +116 -0
- data/lib/rails_wizard/config.rb +88 -0
- data/lib/rails_wizard/recipe.rb +106 -0
- data/lib/rails_wizard/recipes.rb +38 -0
- data/lib/rails_wizard/template.rb +73 -0
- data/lib/rails_wizard.rb +10 -0
- data/recipes/action_mailer.rb +123 -0
- data/recipes/active_admin.rb +44 -0
- data/recipes/activerecord.rb +37 -0
- data/recipes/add_user.rb +129 -0
- data/recipes/airbrake.rb +34 -0
- data/recipes/backbone.rb +23 -0
- data/recipes/capybara.rb +34 -0
- data/recipes/cleanup.rb +40 -0
- data/recipes/cloudfiles.rb +36 -0
- data/recipes/compass.rb +46 -0
- data/recipes/compass_960.rb +48 -0
- data/recipes/cucumber.rb +75 -0
- data/recipes/datamapper.rb +111 -0
- data/recipes/devise.rb +114 -0
- data/recipes/extras.rb +80 -0
- data/recipes/git.rb +40 -0
- data/recipes/guard.rb +99 -0
- data/recipes/haml.rb +23 -0
- data/recipes/heroku.rb +62 -0
- data/recipes/home_page.rb +58 -0
- data/recipes/home_page_users.rb +47 -0
- data/recipes/html5.rb +153 -0
- data/recipes/inherited_resources.rb +23 -0
- data/recipes/less.rb +12 -0
- data/recipes/mongohq.rb +59 -0
- data/recipes/mongoid.rb +39 -0
- data/recipes/mongolab.rb +59 -0
- data/recipes/omniauth.rb +192 -0
- data/recipes/omniauth_email.rb +82 -0
- data/recipes/paperclip.rb +79 -0
- data/recipes/rails_admin.rb +21 -0
- data/recipes/redis.rb +23 -0
- data/recipes/responders.rb +10 -0
- data/recipes/resque.rb +25 -0
- data/recipes/rspec.rb +133 -0
- data/recipes/sass.rb +25 -0
- data/recipes/seed_database.rb +76 -0
- data/recipes/settingslogic.rb +43 -0
- data/recipes/simple_form.rb +54 -0
- data/recipes/slim.rb +46 -0
- data/recipes/static_page.rb +43 -0
- data/recipes/subdomains.rb +121 -0
- data/recipes/users_page.rb +165 -0
- data/spec/rails_wizard/config_spec.rb +108 -0
- data/spec/rails_wizard/recipe_spec.rb +81 -0
- data/spec/rails_wizard/recipes/sanity_spec.rb +30 -0
- data/spec/rails_wizard/recipes_spec.rb +24 -0
- data/spec/rails_wizard/template_spec.rb +78 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/rails_directory.rb +17 -0
- data/spec/support/template_runner.rb +28 -0
- data/templates/helpers.erb +45 -0
- data/templates/layout.erb +83 -0
- data/templates/recipe.erb +10 -0
- data/version.rb +3 -0
- metadata +251 -0
data/recipes/add_user.rb
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
# Application template recipe for the rails_apps_composer. Check for a newer version here:
|
2
|
+
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/add_user.rb
|
3
|
+
|
4
|
+
after_bundler do
|
5
|
+
|
6
|
+
say_wizard "AddUser recipe running 'after bundler'"
|
7
|
+
|
8
|
+
if recipes.include? 'omniauth'
|
9
|
+
generate(:model, "user provider:string uid:string name:string email:string")
|
10
|
+
gsub_file 'app/models/user.rb', /end/ do
|
11
|
+
<<-RUBY
|
12
|
+
attr_accessible :provider, :uid, :name, :email
|
13
|
+
end
|
14
|
+
RUBY
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
if recipes.include? 'devise'
|
19
|
+
|
20
|
+
# Generate models and routes for a User
|
21
|
+
generate 'devise user'
|
22
|
+
|
23
|
+
if recipes.include? 'authorization'
|
24
|
+
# create'app/models/ability.rb'
|
25
|
+
generate 'cancan:ability'
|
26
|
+
# create 'app/models/role.rb'
|
27
|
+
# create 'config/initializers/rolify.rb'
|
28
|
+
# create 'db/migrate/...rolify_create_roles.rb'
|
29
|
+
# insert 'rolify' method in 'app/models/users.rb'
|
30
|
+
if recipes.include? 'mongoid'
|
31
|
+
generate 'rolify:role Role User mongoid'
|
32
|
+
else
|
33
|
+
generate 'rolify:role Role User'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Add a 'name' attribute to the User model
|
38
|
+
if recipes.include? 'mongoid'
|
39
|
+
# for mongoid
|
40
|
+
gsub_file 'app/models/user.rb', /end/ do
|
41
|
+
<<-RUBY
|
42
|
+
# run 'rake db:mongoid:create_indexes' to create indexes
|
43
|
+
index :email, :unique => true
|
44
|
+
field :name
|
45
|
+
validates_presence_of :name
|
46
|
+
attr_accessible :name, :email, :password, :password_confirmation, :remember_me
|
47
|
+
end
|
48
|
+
RUBY
|
49
|
+
end
|
50
|
+
else
|
51
|
+
# for ActiveRecord
|
52
|
+
# Devise created a Users database, we'll modify it
|
53
|
+
generate 'migration AddNameToUsers name:string'
|
54
|
+
if recipes.include? 'devise-confirmable'
|
55
|
+
generate 'migration AddConfirmableToUsers confirmation_token:string confirmed_at:datetime confirmation_sent_at:datetime unconfirmed_email:string'
|
56
|
+
end
|
57
|
+
# Devise created a Users model, we'll modify it
|
58
|
+
gsub_file 'app/models/user.rb', /attr_accessible :email/, 'attr_accessible :name, :email'
|
59
|
+
inject_into_file 'app/models/user.rb', :before => 'validates_uniqueness_of' do
|
60
|
+
"validates_presence_of :name\n"
|
61
|
+
end
|
62
|
+
gsub_file 'app/models/user.rb', /validates_uniqueness_of :email/, 'validates_uniqueness_of :name, :email'
|
63
|
+
gsub_file 'app/models/user.rb', /# attr_accessible :title, :body/, ''
|
64
|
+
end
|
65
|
+
|
66
|
+
# needed for both mongoid and ActiveRecord
|
67
|
+
if recipes.include? 'devise-confirmable'
|
68
|
+
gsub_file 'app/models/user.rb', /:registerable,/, ":registerable, :confirmable,"
|
69
|
+
gsub_file 'app/models/user.rb', /:remember_me/, ':remember_me, :confirmed_at'
|
70
|
+
if recipes.include? 'mongoid'
|
71
|
+
gsub_file 'app/models/user.rb', /# field :confirmation_token/, "field :confirmation_token"
|
72
|
+
gsub_file 'app/models/user.rb', /# field :confirmed_at/, "field :confirmed_at"
|
73
|
+
gsub_file 'app/models/user.rb', /# field :confirmation_sent_at/, "field :confirmation_sent_at"
|
74
|
+
gsub_file 'app/models/user.rb', /# field :unconfirmed_email/, "field :unconfirmed_email"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
if recipes.include? 'devise-invitable'
|
78
|
+
if recipes.include? 'mongoid'
|
79
|
+
gsub_file 'app/models/user.rb', /end/ do
|
80
|
+
<<-RUBY
|
81
|
+
#invitable
|
82
|
+
field :invitation_token, :type => String
|
83
|
+
field :invitation_sent_at, :type => Time
|
84
|
+
field :invitation_accepted_at, :type => Time
|
85
|
+
field :invitation_limit, :type => Integer
|
86
|
+
field :invited_by_id, :type => String
|
87
|
+
field :invited_by_type, :type => String
|
88
|
+
end
|
89
|
+
RUBY
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
unless recipes.include? 'haml'
|
95
|
+
# Generate Devise views (unless you are using Haml)
|
96
|
+
run 'rails generate devise:views'
|
97
|
+
# Modify Devise views to add 'name'
|
98
|
+
inject_into_file "app/views/devise/registrations/edit.html.erb", :after => "<%= devise_error_messages! %>\n" do
|
99
|
+
<<-ERB
|
100
|
+
<p><%= f.label :name %><br />
|
101
|
+
<%= f.text_field :name %></p>
|
102
|
+
ERB
|
103
|
+
end
|
104
|
+
inject_into_file "app/views/devise/registrations/new.html.erb", :after => "<%= devise_error_messages! %>\n" do
|
105
|
+
<<-ERB
|
106
|
+
<p><%= f.label :name %><br />
|
107
|
+
<%= f.text_field :name %></p>
|
108
|
+
ERB
|
109
|
+
end
|
110
|
+
else
|
111
|
+
# copy Haml versions of modified Devise views
|
112
|
+
get 'https://raw.github.com/RailsApps/rails3-application-templates/master/files/devise-views-haml/app/views/devise/shared/_links.html.haml', 'app/views/devise/shared/_links.html.haml'
|
113
|
+
get 'https://raw.github.com/RailsApps/rails3-application-templates/master/files/devise-views-haml/app/views/devise/registrations/edit.html.haml', 'app/views/devise/registrations/edit.html.haml'
|
114
|
+
get 'https://raw.github.com/RailsApps/rails3-application-templates/master/files/devise-views-haml/app/views/devise/registrations/new.html.haml', 'app/views/devise/registrations/new.html.haml'
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
__END__
|
122
|
+
|
123
|
+
name: AddUser
|
124
|
+
description: "Add a User model including 'name' and 'email' attributes."
|
125
|
+
author: RailsApps
|
126
|
+
|
127
|
+
run_after: [devise]
|
128
|
+
category: other
|
129
|
+
tags: [utilities, configuration]
|
data/recipes/airbrake.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
gem 'airbrake'
|
3
|
+
|
4
|
+
if config['use_heroku']
|
5
|
+
after_everything do
|
6
|
+
say_wizard "Adding airbrake:developer Heroku addon (you can always upgrade later)"
|
7
|
+
run "heroku addons:add airbrake:developer"
|
8
|
+
generate "airbrake --heroku"
|
9
|
+
end
|
10
|
+
else
|
11
|
+
after_bundler do
|
12
|
+
generate "airbrake --api-key #{config['api_key']}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
__END__
|
17
|
+
|
18
|
+
name: Airbrake
|
19
|
+
description: Add Airbrake exception reporting to your application.
|
20
|
+
|
21
|
+
category: services
|
22
|
+
exclusive: exception_notification
|
23
|
+
tags: [exception_notification]
|
24
|
+
run_after: [heroku]
|
25
|
+
|
26
|
+
config:
|
27
|
+
- use_heroku:
|
28
|
+
type: boolean
|
29
|
+
prompt: "Use the Airbrake Heroku addon?"
|
30
|
+
if_recipe: heroku
|
31
|
+
- api_key:
|
32
|
+
prompt: "Enter Airbrake API Key:"
|
33
|
+
type: string
|
34
|
+
unless: use_heroku
|
data/recipes/backbone.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
if config['backbone']
|
2
|
+
gem 'rails-backbone', :version => '>= 0.7.2'
|
3
|
+
after_bundler do
|
4
|
+
generate 'backbone:install'
|
5
|
+
end
|
6
|
+
else
|
7
|
+
recipes.delete('backbone')
|
8
|
+
end
|
9
|
+
|
10
|
+
__END__
|
11
|
+
|
12
|
+
name: Backbone.js
|
13
|
+
description: "Use the Backbone.js MVC framework"
|
14
|
+
author: ashley_woodard
|
15
|
+
|
16
|
+
exclusive: javascript_framework
|
17
|
+
category: assets
|
18
|
+
tags: [javascript, framework]
|
19
|
+
|
20
|
+
config:
|
21
|
+
- backbone:
|
22
|
+
type: boolean
|
23
|
+
prompt: Would you like to use the Backbone.js MVC framework?
|
data/recipes/capybara.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
gem 'capybara', :group => [:development, :test] unless recipes.include? 'cucumber'
|
2
|
+
|
3
|
+
after_bundler do
|
4
|
+
create_file "spec/support/capybara.rb", <<-RUBY
|
5
|
+
require 'capybara/rails'
|
6
|
+
require 'capybara/rspec'
|
7
|
+
RUBY
|
8
|
+
|
9
|
+
create_file "spec/requests/home_spec.rb", <<-RUBY
|
10
|
+
require 'spec_helper'
|
11
|
+
|
12
|
+
describe 'visiting the homepage' do
|
13
|
+
before do
|
14
|
+
visit '/'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should have a body' do
|
18
|
+
page.should have_css('body')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
RUBY
|
22
|
+
end
|
23
|
+
|
24
|
+
__END__
|
25
|
+
|
26
|
+
name: Capybara
|
27
|
+
description: "Use the Capybara acceptance testing libraries with RSpec."
|
28
|
+
author: mbleigh
|
29
|
+
|
30
|
+
requires: [rspec]
|
31
|
+
run_after: [rspec]
|
32
|
+
exclusive: acceptance_testing
|
33
|
+
category: testing
|
34
|
+
tags: [acceptance]
|
data/recipes/cleanup.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# Application template recipe for the rails_apps_composer. Check for a newer version here:
|
2
|
+
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/cleanup.rb
|
3
|
+
|
4
|
+
after_bundler do
|
5
|
+
|
6
|
+
say_wizard "Cleanup recipe running 'after bundler'"
|
7
|
+
|
8
|
+
# remove unnecessary files
|
9
|
+
%w{
|
10
|
+
README
|
11
|
+
doc/README_FOR_APP
|
12
|
+
public/index.html
|
13
|
+
app/assets/images/rails.png
|
14
|
+
}.each { |file| remove_file file }
|
15
|
+
|
16
|
+
# add placeholder READMEs
|
17
|
+
get "https://raw.github.com/RailsApps/rails3-application-templates/master/files/sample_readme.txt", "README"
|
18
|
+
get "https://raw.github.com/RailsApps/rails3-application-templates/master/files/sample_readme.textile", "README.textile"
|
19
|
+
gsub_file "README", /App_Name/, "#{app_name.humanize.titleize}"
|
20
|
+
gsub_file "README.textile", /App_Name/, "#{app_name.humanize.titleize}"
|
21
|
+
|
22
|
+
# remove commented lines and multiple blank lines from Gemfile
|
23
|
+
# thanks to https://github.com/perfectline/template-bucket/blob/master/cleanup.rb
|
24
|
+
gsub_file 'Gemfile', /#.*\n/, "\n"
|
25
|
+
gsub_file 'Gemfile', /\n^\s*\n/, "\n"
|
26
|
+
|
27
|
+
# remove commented lines and multiple blank lines from config/routes.rb
|
28
|
+
gsub_file 'config/routes.rb', / #.*\n/, "\n"
|
29
|
+
gsub_file 'config/routes.rb', /\n^\s*\n/, "\n"
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
__END__
|
34
|
+
|
35
|
+
name: Cleanup
|
36
|
+
description: "Remove unnecessary files left over from generating a new Rails app."
|
37
|
+
author: RailsApps
|
38
|
+
|
39
|
+
category: other
|
40
|
+
tags: [utilities, configuration]
|
@@ -0,0 +1,36 @@
|
|
1
|
+
if config['cloudfiles']
|
2
|
+
gem 'cloudfiles'
|
3
|
+
else
|
4
|
+
recipes.delete('cloudfiles')
|
5
|
+
end
|
6
|
+
|
7
|
+
if config['cloudfiles']
|
8
|
+
after_bundler do
|
9
|
+
# Code here is run after Bundler installs all the gems for the project.
|
10
|
+
# You can run generators and rake tasks in this section.
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
if config['cloudfiles']
|
15
|
+
after_everything do
|
16
|
+
# These blocks are run after the bundler blocks and are reserved for
|
17
|
+
# special cases like committing the files to a git repository (something
|
18
|
+
# that depends on everything having been generated).
|
19
|
+
end
|
20
|
+
end
|
21
|
+
# A recipe is two parts: the Ruby code and YAML back-matter that comes
|
22
|
+
# after a blank line with the __END__ keyword.
|
23
|
+
|
24
|
+
__END__
|
25
|
+
|
26
|
+
name: Cloudfiles
|
27
|
+
description: "Use Cloudfiles to store files."
|
28
|
+
author: merlinvn
|
29
|
+
|
30
|
+
category: persistence
|
31
|
+
tags: [storage]
|
32
|
+
|
33
|
+
config:
|
34
|
+
- cloudfiles:
|
35
|
+
type: boolean
|
36
|
+
prompt: "Would you like to use Cloudfiles to store your files?"
|
data/recipes/compass.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
if config['compass']
|
2
|
+
gem 'compass', :version => '~> 0.12.1', :group => [:assets]
|
3
|
+
gem 'compass-rails', :version => '~> 1.0.0', :group => [:assets]
|
4
|
+
after_bundler do
|
5
|
+
remove_file 'app/assets/stylesheets/application.css'
|
6
|
+
|
7
|
+
if File.exist?("config/initializers/sass.rb")
|
8
|
+
create_file "app/assets/stylesheets/application.css.sass" do <<-SASS
|
9
|
+
//= require_self
|
10
|
+
//= require_tree .
|
11
|
+
|
12
|
+
@import compass
|
13
|
+
@import _blueprint
|
14
|
+
SASS
|
15
|
+
end
|
16
|
+
else
|
17
|
+
create_file "app/assets/stylesheets/application.css.scss" do <<-SCSS
|
18
|
+
//= require_self
|
19
|
+
//= require_tree .
|
20
|
+
|
21
|
+
@import "compass";
|
22
|
+
@import "_blueprint";
|
23
|
+
SCSS
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
else
|
28
|
+
recipes.delete('compass')
|
29
|
+
end
|
30
|
+
|
31
|
+
__END__
|
32
|
+
|
33
|
+
name: Compass
|
34
|
+
description: "Utilize Compass framework for SASS."
|
35
|
+
author: ashley_woodard
|
36
|
+
|
37
|
+
requires: [sass]
|
38
|
+
run_after: [sass]
|
39
|
+
exclusive: css_framework
|
40
|
+
category: assets
|
41
|
+
tags: [css]
|
42
|
+
|
43
|
+
config:
|
44
|
+
- compass:
|
45
|
+
type: boolean
|
46
|
+
prompt: Would you like to use Compass for stylesheets?
|
@@ -0,0 +1,48 @@
|
|
1
|
+
if config['compass_960']
|
2
|
+
gem 'compass-960-plugin', :version => '~> 0.10.4', :group => [:assets]
|
3
|
+
after_bundler do
|
4
|
+
|
5
|
+
#create compass.rb initializer
|
6
|
+
create_file 'config/initializers/compass.rb' do <<-RUBY
|
7
|
+
require 'ninesixty'
|
8
|
+
RUBY
|
9
|
+
end
|
10
|
+
|
11
|
+
if File.exist?('config/initializers/sass.rb')
|
12
|
+
inject_into_file 'app/assets/stylesheets/application.css.sass', :after => "@import compass\n" do <<-SASS
|
13
|
+
@import 960/grid
|
14
|
+
SASS
|
15
|
+
end
|
16
|
+
else
|
17
|
+
inject_into_file 'app/assets/stylesheets/application.css.scss', :after => "@import \"compass\";\n" do <<-SCSS
|
18
|
+
@import "960/grid";
|
19
|
+
SCSS
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
inject_into_file 'config/application.rb', :after => "Rails::Application\n" do <<-RUBY
|
24
|
+
config.sass.load_paths << "#{Gem.loaded_specs['compass'].full_gem_path}/frameworks/compass/stylesheets"
|
25
|
+
config.sass.load_paths << "#{Gem.loaded_specs['compass-960-plugin'].full_gem_path}/stylesheets"
|
26
|
+
RUBY
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
else
|
31
|
+
recipes.delete('compass_960')
|
32
|
+
end
|
33
|
+
__END__
|
34
|
+
|
35
|
+
name: Compass 960
|
36
|
+
description: "Add compass-960-plugin for Compass"
|
37
|
+
author: porta
|
38
|
+
|
39
|
+
requires: [compass]
|
40
|
+
run_after: [compass]
|
41
|
+
exclusive: css_framework
|
42
|
+
category: assets
|
43
|
+
tags: [css]
|
44
|
+
|
45
|
+
config:
|
46
|
+
- compass_960:
|
47
|
+
type: boolean
|
48
|
+
prompt: Would you like to add Compass 960 plugin for Compass?
|
data/recipes/cucumber.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
# Application template recipe for the rails_apps_composer. Check for a newer version here:
|
2
|
+
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/cucumber.rb
|
3
|
+
|
4
|
+
if config['cucumber']
|
5
|
+
gem 'cucumber-rails', '>= 1.3.0', :group => :test, :require => false
|
6
|
+
gem 'capybara', '>= 1.1.2', :group => :test
|
7
|
+
gem 'database_cleaner', '>= 0.7.2', :group => :test
|
8
|
+
gem 'launchy', '>= 2.1.0', :group => :test
|
9
|
+
else
|
10
|
+
recipes.delete('cucumber')
|
11
|
+
end
|
12
|
+
|
13
|
+
if config['cucumber']
|
14
|
+
after_bundler do
|
15
|
+
say_wizard "Cucumber recipe running 'after bundler'"
|
16
|
+
generate "cucumber:install --capybara#{' --rspec' if recipes.include?('rspec')}#{' -D' if recipes.include?('mongoid')}"
|
17
|
+
# make it easy to run Cucumber for single features without adding "--require features" to the command line
|
18
|
+
gsub_file 'config/cucumber.yml', /std_opts = "/, 'std_opts = "-r features/support/ -r features/step_definitions '
|
19
|
+
if recipes.include? 'mongoid'
|
20
|
+
gsub_file 'features/support/env.rb', /transaction/, "truncation"
|
21
|
+
inject_into_file 'features/support/env.rb', :after => 'begin' do
|
22
|
+
"\n DatabaseCleaner.orm = 'mongoid'"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
if config['cucumber']
|
29
|
+
if recipes.include? 'devise'
|
30
|
+
after_bundler do
|
31
|
+
say_wizard "Copying Cucumber scenarios from the rails3-devise-rspec-cucumber examples"
|
32
|
+
begin
|
33
|
+
# copy all the Cucumber scenario files from the rails3-devise-rspec-cucumber example app
|
34
|
+
get 'https://raw.github.com/RailsApps/rails3-devise-rspec-cucumber/master/features/users/sign_in.feature', 'features/users/sign_in.feature'
|
35
|
+
get 'https://raw.github.com/RailsApps/rails3-devise-rspec-cucumber/master/features/users/sign_out.feature', 'features/users/sign_out.feature'
|
36
|
+
get 'https://raw.github.com/RailsApps/rails3-devise-rspec-cucumber/master/features/users/sign_up.feature', 'features/users/sign_up.feature'
|
37
|
+
get 'https://raw.github.com/RailsApps/rails3-devise-rspec-cucumber/master/features/users/user_edit.feature', 'features/users/user_edit.feature'
|
38
|
+
get 'https://raw.github.com/RailsApps/rails3-devise-rspec-cucumber/master/features/users/user_show.feature', 'features/users/user_show.feature'
|
39
|
+
get 'https://raw.github.com/RailsApps/rails3-devise-rspec-cucumber/master/features/step_definitions/user_steps.rb', 'features/step_definitions/user_steps.rb'
|
40
|
+
remove_file 'features/support/paths.rb'
|
41
|
+
get 'https://raw.github.com/RailsApps/rails3-devise-rspec-cucumber/master/features/support/paths.rb', 'features/support/paths.rb'
|
42
|
+
if recipes.include? 'devise-confirmable'
|
43
|
+
gsub_file 'features/step_definitions/user_steps.rb', /Welcome! You have signed up successfully./, "A message with a confirmation link has been sent to your email address."
|
44
|
+
inject_into_file 'features/users/sign_in.feature', :before => ' Scenario: User signs in successfully' do
|
45
|
+
<<-RUBY
|
46
|
+
Scenario: User has not confirmed account
|
47
|
+
Given I exist as an unconfirmed user
|
48
|
+
And I am not logged in
|
49
|
+
When I sign in with valid credentials
|
50
|
+
Then I see an unconfirmed account message
|
51
|
+
And I should be signed out
|
52
|
+
RUBY
|
53
|
+
end
|
54
|
+
end
|
55
|
+
rescue OpenURI::HTTPError
|
56
|
+
say_wizard "Unable to obtain Cucumber example files from the repo"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
__END__
|
63
|
+
|
64
|
+
name: Cucumber
|
65
|
+
description: "Use Cucumber for BDD (with Capybara)."
|
66
|
+
author: RailsApps
|
67
|
+
|
68
|
+
exclusive: acceptance_testing
|
69
|
+
category: testing
|
70
|
+
tags: [acceptance]
|
71
|
+
|
72
|
+
config:
|
73
|
+
- cucumber:
|
74
|
+
type: boolean
|
75
|
+
prompt: Would you like to use Cucumber for your BDD?
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# Application template recipe for the rails_apps_composer. Check for a newer version here:
|
2
|
+
# https://github.com/RailsApps/rails_apps_composer/blob/master/recipes/datamapper.rb
|
3
|
+
RAILS_VERSION='~> 3.1.0'
|
4
|
+
DM_VERSION='~> 1.2.0'
|
5
|
+
|
6
|
+
if config['datamapper']
|
7
|
+
abort "DataMapper #{DM_VERSION} is only compatible with Rails #{RAILS_VERSION}" unless ::Rails::VERSION::MAJOR == 3 and ::Rails::VERSION::MINOR < 2
|
8
|
+
else
|
9
|
+
recipes.delete('datamapper')
|
10
|
+
end
|
11
|
+
|
12
|
+
if config['datamapper']
|
13
|
+
say_wizard "REMINDER: When creating a Rails app using DataMapper,"
|
14
|
+
say_wizard "you must add the '-O' flag to 'rails new'"
|
15
|
+
gem 'dm-rails', DM_VERSION
|
16
|
+
gem "dm-#{config['database']}-adapter", DM_VERSION
|
17
|
+
gem 'dm-migrations', DM_VERSION
|
18
|
+
gem 'dm-types', DM_VERSION
|
19
|
+
gem 'dm-constraints', DM_VERSION
|
20
|
+
gem 'dm-transactions', DM_VERSION
|
21
|
+
gem 'dm-aggregates', DM_VERSION
|
22
|
+
gem 'dm-timestamps', DM_VERSION
|
23
|
+
gem 'dm-observer', DM_VERSION
|
24
|
+
gem 'dm-validations', DM_VERSION if config['validations'] == 'dm-validations'
|
25
|
+
gem 'dm-devise', '>= 2.0.1' if recipes.include? 'devise'
|
26
|
+
|
27
|
+
inject_into_file 'config/application.rb', "require 'dm-rails/railtie'\n", :after => "require 'action_controller/railtie'\n"
|
28
|
+
prepend_file 'app/controllers/application_controller.rb', "require 'dm-rails/middleware/identity_map'\n"
|
29
|
+
inject_into_class 'app/controllers/application_controller.rb', 'ApplicationController', " use Rails::DataMapper::Middleware::IdentityMap\n"
|
30
|
+
create_file 'config/database.yml' do <<-YAML
|
31
|
+
defaults: &defaults
|
32
|
+
adapter: #{config['database']}
|
33
|
+
|
34
|
+
production:
|
35
|
+
<<: *defaults
|
36
|
+
|
37
|
+
development:
|
38
|
+
<<: *defaults
|
39
|
+
|
40
|
+
test:
|
41
|
+
<<: *defaults
|
42
|
+
YAML
|
43
|
+
end
|
44
|
+
case config['database']
|
45
|
+
when "mysql", "postgres", "oracle", "sqlserver"
|
46
|
+
sane_app_name = app_name.gsub(/[^a-zA-Z0-9_]/, '_')
|
47
|
+
dbname = ask_wizard "Database name \033[33m[#{sane_app_name}]\033[0m"
|
48
|
+
dbname = sane_app_name if dbname.empty?
|
49
|
+
dbhost = ask_wizard "Database host \033[33m[localhost]\033[0m"
|
50
|
+
dbhost = 'localhost' if dbhost.empty?
|
51
|
+
dbuser = ask_wizard "Database username \033[33m[root]\033[0m"
|
52
|
+
dbuser = 'root' if dbuser.empty?
|
53
|
+
dbpass = ask_wizard "Database password \033[33m[]\033[0m"
|
54
|
+
inject_into_file 'config/database.yml', " password: '#{dbpass}'\n", :after => " adapter: #{config['database']}\n"
|
55
|
+
inject_into_file 'config/database.yml', " username: #{dbuser}\n", :after => " adapter: #{config['database']}\n"
|
56
|
+
inject_into_file 'config/database.yml', " host: #{dbhost}\n", :after => " adapter: #{config['database']}\n"
|
57
|
+
inject_into_file 'config/database.yml', " database: #{dbname}\n", :before => "\ndevelopment:"
|
58
|
+
inject_into_file 'config/database.yml', " database: #{dbname}_development\n", :before => "\ntest:"
|
59
|
+
append_file 'config/database.yml', " database: #{dbname}_test"
|
60
|
+
when "sqlite"
|
61
|
+
inject_into_file 'config/database.yml', " database: db/production.db\n", :before => "\ndevelopment:"
|
62
|
+
inject_into_file 'config/database.yml', " database: db/development.db\n", :before => "\ntest:"
|
63
|
+
append_file 'config/database.yml', " database: db/test.db\n"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
if config['datamapper']
|
68
|
+
after_bundler do
|
69
|
+
say_wizard "DataMapper recipe running 'after bundler'"
|
70
|
+
if recipes.include? 'devise'
|
71
|
+
generate 'data_mapper:devise_install'
|
72
|
+
gsub_file 'config/initializers/devise.rb', /# config.data_mapper_validation_lib = nil/, "config.data_mapper_validation_lib = '#{config['validations']}'"
|
73
|
+
end
|
74
|
+
rake "db:create:all" if config['auto_create']
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
__END__
|
79
|
+
|
80
|
+
name: DataMapper
|
81
|
+
description: "Use DataMapper to connect to a data store (requires Rails ~> 3.1.0)."
|
82
|
+
author: Peter Fern
|
83
|
+
|
84
|
+
category: persistence
|
85
|
+
exclusive: orm
|
86
|
+
tags: [orm, datamapper, sql]
|
87
|
+
|
88
|
+
args: ["-O"]
|
89
|
+
|
90
|
+
config:
|
91
|
+
- datamapper:
|
92
|
+
type: boolean
|
93
|
+
prompt: Would you like to use DataMapper to connect to a data store (requires Rails ~> 3.1.0)?
|
94
|
+
- database:
|
95
|
+
type: multiple_choice
|
96
|
+
prompt: "Which backend are you using?"
|
97
|
+
choices:
|
98
|
+
- ["SQLite", sqlite]
|
99
|
+
- ["MySQL", mysql]
|
100
|
+
- ["PostgreSQL", postgres]
|
101
|
+
- ["Oracle", oracle]
|
102
|
+
- ["MSSQL", sqlserver]
|
103
|
+
- validations:
|
104
|
+
type: multiple_choice
|
105
|
+
prompt: "Which validation method do you prefer?"
|
106
|
+
choices:
|
107
|
+
- ["DataMapper Validations", dm-validations]
|
108
|
+
- ["ActiveModel Validations", active_model]
|
109
|
+
- auto_create:
|
110
|
+
type: boolean
|
111
|
+
prompt: "Automatically create database with default configuration?"
|