rails_apps_composer 1.0.0

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.
Files changed (64) hide show
  1. data/README.textile +313 -0
  2. data/bin/rails_apps_composer +7 -0
  3. data/lib/rails_wizard.rb +10 -0
  4. data/lib/rails_wizard/command.rb +79 -0
  5. data/lib/rails_wizard/config.rb +86 -0
  6. data/lib/rails_wizard/recipe.rb +106 -0
  7. data/lib/rails_wizard/recipes.rb +38 -0
  8. data/lib/rails_wizard/template.rb +58 -0
  9. data/recipes/action_mailer.rb +41 -0
  10. data/recipes/activerecord.rb +37 -0
  11. data/recipes/add_user.rb +87 -0
  12. data/recipes/add_user_name.rb +74 -0
  13. data/recipes/application_layout.rb +45 -0
  14. data/recipes/ban_spiders.rb +27 -0
  15. data/recipes/capybara.rb +34 -0
  16. data/recipes/cleanup.rb +36 -0
  17. data/recipes/css_setup.rb +42 -0
  18. data/recipes/cucumber.rb +62 -0
  19. data/recipes/devise.rb +76 -0
  20. data/recipes/devise_navigation.rb +93 -0
  21. data/recipes/env_yaml.rb +54 -0
  22. data/recipes/git.rb +38 -0
  23. data/recipes/haml.rb +23 -0
  24. data/recipes/heroku.rb +58 -0
  25. data/recipes/home_page.rb +45 -0
  26. data/recipes/home_page_users.rb +47 -0
  27. data/recipes/hoptoad.rb +34 -0
  28. data/recipes/jammit.rb +43 -0
  29. data/recipes/jquery.rb +70 -0
  30. data/recipes/less.rb +12 -0
  31. data/recipes/mongo_mapper.rb +18 -0
  32. data/recipes/mongohq.rb +59 -0
  33. data/recipes/mongoid.rb +39 -0
  34. data/recipes/mootools.rb +23 -0
  35. data/recipes/navigation.rb +68 -0
  36. data/recipes/omniauth.rb +152 -0
  37. data/recipes/omniauth_email.rb +82 -0
  38. data/recipes/pow.rb +12 -0
  39. data/recipes/prototype.rb +11 -0
  40. data/recipes/rails_admin.rb +21 -0
  41. data/recipes/redis.rb +17 -0
  42. data/recipes/redistogo.rb +40 -0
  43. data/recipes/rightjs.rb +17 -0
  44. data/recipes/rspec.rb +112 -0
  45. data/recipes/sass.rb +13 -0
  46. data/recipes/seed_database.rb +42 -0
  47. data/recipes/sequel.rb +13 -0
  48. data/recipes/settingslogic.rb +43 -0
  49. data/recipes/slim.rb +11 -0
  50. data/recipes/test_unit.rb +11 -0
  51. data/recipes/users_page.rb +103 -0
  52. data/spec/rails_wizard/config_spec.rb +99 -0
  53. data/spec/rails_wizard/recipe_spec.rb +103 -0
  54. data/spec/rails_wizard/recipes/sanity_spec.rb +30 -0
  55. data/spec/rails_wizard/recipes_spec.rb +24 -0
  56. data/spec/rails_wizard/template_spec.rb +48 -0
  57. data/spec/spec_helper.rb +11 -0
  58. data/spec/support/rails_directory.rb +17 -0
  59. data/spec/support/template_runner.rb +28 -0
  60. data/templates/helpers.erb +45 -0
  61. data/templates/layout.erb +69 -0
  62. data/templates/recipe.erb +10 -0
  63. data/version.rb +3 -0
  64. metadata +206 -0
data/recipes/git.rb ADDED
@@ -0,0 +1,38 @@
1
+ # Application template recipe for the rails_apps_composer. Check for a newer version here:
2
+ # https://github.com/fortuity/rails_apps_composer/blob/master/recipes/git.rb
3
+
4
+ after_everything do
5
+
6
+ say_wizard "Git recipe running 'after everything'"
7
+
8
+ # Git should ignore some files
9
+ remove_file '.gitignore'
10
+ get "https://github.com/fortuity/rails3-gitignore/raw/master/gitignore.txt", ".gitignore"
11
+
12
+ if recipes.include? 'omniauth'
13
+ append_file '.gitignore' do <<-TXT
14
+ # keep OmniAuth service provider secrets out of the Git repo
15
+ config/initializers/omniauth.rb
16
+ TXT
17
+ end
18
+ end
19
+
20
+ # Initialize new Git repo
21
+ git :init
22
+ git :add => '.'
23
+ git :commit => "-aqm 'new Rails app generated by rails_apps_composer'"
24
+ # Create a git branch
25
+ git :checkout => ' -b working_branch'
26
+ git :add => '.'
27
+ git :commit => "-m 'Initial commit of working_branch'"
28
+ end
29
+
30
+ __END__
31
+
32
+ name: Git
33
+ description: "Set up Git and commit the initial repository."
34
+ author: fortuity
35
+
36
+ exclusive: scm
37
+ category: other
38
+ tags: [scm]
data/recipes/haml.rb ADDED
@@ -0,0 +1,23 @@
1
+ # Application template recipe for the rails_apps_composer. Check for a newer version here:
2
+ # https://github.com/fortuity/rails_apps_composer/blob/master/recipes/haml.rb
3
+
4
+ if config['haml']
5
+ gem 'haml', '>= 3.1.1'
6
+ gem 'haml-rails', '>= 0.3.4', :group => :development
7
+ else
8
+ recipes.delete('haml')
9
+ end
10
+
11
+ __END__
12
+
13
+ name: HAML
14
+ description: "Utilize Haml instead of ERB."
15
+ author: fortuity
16
+
17
+ category: templating
18
+ exclusive: templating
19
+
20
+ config:
21
+ - haml:
22
+ type: boolean
23
+ prompt: Would you like to use Haml instead of ERB?
data/recipes/heroku.rb ADDED
@@ -0,0 +1,58 @@
1
+ heroku_name = app_name.gsub('_','')
2
+
3
+ after_everything do
4
+ if config['create']
5
+ say_wizard "Creating Heroku app '#{heroku_name}.heroku.com'"
6
+ while !system("heroku create #{heroku_name}")
7
+ heroku_name = ask_wizard("What do you want to call your app? ")
8
+ end
9
+ end
10
+
11
+ if config['staging']
12
+ staging_name = "#{heroku_name}-staging"
13
+ say_wizard "Creating staging Heroku app '#{staging_name}.heroku.com'"
14
+ while !system("heroku create #{staging_name}")
15
+ staging_name = ask_wizard("What do you want to call your staging app?")
16
+ end
17
+ git :remote => "rm heroku"
18
+ git :remote => "add production git@heroku.com:#{heroku_name}.git"
19
+ git :remote => "add staging git@heroku.com:#{staging_name}.git"
20
+ say_wizard "Created branches 'production' and 'staging' for Heroku deploy."
21
+ end
22
+
23
+ unless config['domain'].blank?
24
+ run "heroku addons:add custom_domains"
25
+ run "heroku domains:add #{config['domain']}"
26
+ end
27
+
28
+ git :push => "#{config['staging'] ? 'staging' : 'heroku'} master" if config['deploy']
29
+ end
30
+
31
+ __END__
32
+
33
+ name: Heroku
34
+ description: Create Heroku application and instantly deploy.
35
+ author: mbleigh
36
+
37
+ requires: [git]
38
+ run_after: [git]
39
+ exclusive: deployment
40
+ category: deployment
41
+ tags: [provider]
42
+
43
+ config:
44
+ - create:
45
+ prompt: "Automatically create appname.heroku.com?"
46
+ type: boolean
47
+ - staging:
48
+ prompt: "Create staging app? (appname-staging.heroku.com)"
49
+ type: boolean
50
+ if: create
51
+ - domain:
52
+ prompt: "Specify custom domain (or leave blank):"
53
+ type: string
54
+ if: create
55
+ - deploy:
56
+ prompt: "Deploy immediately?"
57
+ type: boolean
58
+ if: create
@@ -0,0 +1,45 @@
1
+ # Application template recipe for the rails_apps_composer. Check for a newer version here:
2
+ # https://github.com/fortuity/rails_apps_composer/blob/master/recipes/home_page.rb
3
+
4
+ after_bundler do
5
+
6
+ say_wizard "HomePage recipe running 'after bundler'"
7
+
8
+ # remove the default home page
9
+ remove_file 'public/index.html'
10
+
11
+ # create a home controller and view
12
+ generate(:controller, "home index")
13
+
14
+ # set up a simple home page (with placeholder content)
15
+ if recipes.include? 'haml'
16
+ remove_file 'app/views/home/index.html.haml'
17
+ # There is Haml code in this script. Changing the indentation is perilous between HAMLs.
18
+ # We have to use single-quote-style-heredoc to avoid interpolation.
19
+ create_file 'app/views/home/index.html.haml' do
20
+ <<-'HAML'
21
+ %h3 Home
22
+ HAML
23
+ end
24
+ else
25
+ remove_file 'app/views/home/index.html.erb'
26
+ create_file 'app/views/home/index.html.erb' do
27
+ <<-ERB
28
+ <h3>Home</h3>
29
+ ERB
30
+ end
31
+ end
32
+
33
+ # set routes
34
+ gsub_file 'config/routes.rb', /get \"home\/index\"/, 'root :to => "home#index"'
35
+
36
+ end
37
+
38
+ __END__
39
+
40
+ name: HomePage
41
+ description: "Create a simple home page (creates a home controller and view)."
42
+ author: fortuity
43
+
44
+ category: other
45
+ tags: [utilities, configuration]
@@ -0,0 +1,47 @@
1
+ # Application template recipe for the rails_apps_composer. Check for a newer version here:
2
+ # https://github.com/fortuity/rails_apps_composer/blob/master/recipes/home_page_users.rb
3
+
4
+ after_bundler do
5
+
6
+ say_wizard "HomePageUsers recipe running 'after bundler'"
7
+
8
+ # Modify the home controller
9
+ gsub_file 'app/controllers/home_controller.rb', /def index/ do
10
+ <<-RUBY
11
+ def index
12
+ @users = User.all
13
+ RUBY
14
+ end
15
+
16
+ # Replace the home page
17
+ if recipes.include? 'haml'
18
+ remove_file 'app/views/home/index.html.haml'
19
+ # There is Haml code in this script. Changing the indentation is perilous between HAMLs.
20
+ # We have to use single-quote-style-heredoc to avoid interpolation.
21
+ create_file 'app/views/home/index.html.haml' do
22
+ <<-'HAML'
23
+ %h3 Home
24
+ - @users.each do |user|
25
+ %p User: #{user.name}
26
+ HAML
27
+ end
28
+ else
29
+ append_file 'app/views/home/index.html.erb' do <<-ERB
30
+ <h3>Home</h3>
31
+ <% @users.each do |user| %>
32
+ <p>User: <%= user.name %></p>
33
+ <% end %>
34
+ ERB
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+ __END__
41
+
42
+ name: HomePageUsers
43
+ description: "Display a list of users on the home page."
44
+ author: fortuity
45
+
46
+ category: other
47
+ tags: [utilities, configuration]
@@ -0,0 +1,34 @@
1
+
2
+ gem 'hoptoad_notifier'
3
+
4
+ if config['use_heroku']
5
+ after_everything do
6
+ say_wizard "Adding hoptoad:basic Heroku addon (you can always upgrade later)"
7
+ run "heroku addons:add hoptoad:basic"
8
+ generate "hoptoad --heroku"
9
+ end
10
+ else
11
+ after_bundler do
12
+ generate "hoptoad --api-key #{config['api_key']}"
13
+ end
14
+ end
15
+
16
+ __END__
17
+
18
+ name: Hoptoad
19
+ description: Add Hoptoad 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 Hoptoad Heroku addon?"
30
+ if_recipe: heroku
31
+ - api_key:
32
+ prompt: "Enter Hoptoad API Key:"
33
+ type: string
34
+ unless: use_heroku
data/recipes/jammit.rb ADDED
@@ -0,0 +1,43 @@
1
+ gem 'jammit'
2
+
3
+ after_bundler do
4
+ if config['pre_commit']
5
+ say_wizard "Adding git pre-commit hook..."
6
+ create_file ".git/hooks/pre-commit", <<-BASH
7
+ #!/bin/sh
8
+
9
+ echo "Packaging assets with Jammit..."
10
+ jammit
11
+ git add public/assets
12
+ BASH
13
+ run "chmod +x .git/hooks/pre-commit"
14
+ end
15
+
16
+ create_file "config/assets.yml", <<-YAML
17
+ javascripts:
18
+ app:
19
+ - public/javascripts/*.js
20
+ stylesheets:
21
+ app:
22
+ - public/stylesheets/*.css
23
+ YAML
24
+
25
+ gsub_file "app/views/layouts/application.html.erb", "<%= javascript_include_tag :defaults %>", "<%= include_javascripts :app %>"
26
+ gsub_file "app/views/layouts/application.html.erb", "<%= stylesheet_link_tag :all %>", "<%= include_stylesheets :app %>"
27
+ end
28
+
29
+ __END__
30
+
31
+ name: Jammit
32
+ description: "Use Jammit to package your application's assets."
33
+ author: mbleigh
34
+
35
+ exclusive: asset_packaging
36
+ category: assets
37
+ tags: [packaging]
38
+
39
+ config:
40
+ - pre_commit:
41
+ type: boolean
42
+ prompt: "Create a git pre-commit hook to generate assets for Heroku?"
43
+ if_recipe: heroku
data/recipes/jquery.rb ADDED
@@ -0,0 +1,70 @@
1
+ # Application template recipe for the rails_apps_composer. Check for a newer version here:
2
+ # https://github.com/fortuity/rails_apps_composer/blob/master/recipes/jquery.rb
3
+
4
+ if config['jquery']
5
+ if recipes.include? 'rails 3.0'
6
+ say_wizard "Replacing Prototype framework with jQuery for Rails 3.0."
7
+ after_bundler do
8
+ say_wizard "jQuery recipe running 'after bundler'"
9
+ # remove the Prototype adapter file
10
+ remove_file 'public/javascripts/rails.js'
11
+ # remove the Prototype files (if they exist)
12
+ remove_file 'public/javascripts/controls.js'
13
+ remove_file 'public/javascripts/dragdrop.js'
14
+ remove_file 'public/javascripts/effects.js'
15
+ remove_file 'public/javascripts/prototype.js'
16
+ # add jQuery files
17
+ inside "public/javascripts" do
18
+ get "https://github.com/rails/jquery-ujs/raw/master/src/rails.js", "rails.js"
19
+ get "http://code.jquery.com/jquery-1.6.min.js", "jquery.js"
20
+ if config['ui']
21
+ get "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js", "jqueryui.js"
22
+ end
23
+ end
24
+ # adjust the Javascript defaults
25
+ # first uncomment "config.action_view.javascript_expansions"
26
+ gsub_file "config/application.rb", /# config.action_view.javascript_expansions/, "config.action_view.javascript_expansions"
27
+ # then add "jquery rails" if necessary
28
+ gsub_file "config/application.rb", /= \%w\(\)/, "%w(jquery rails)"
29
+ # finally change to "jquery jqueryui rails" if necessary
30
+ if config['ui']
31
+ gsub_file "config/application.rb", /jquery rails/, "jquery jqueryui rails"
32
+ end
33
+ end
34
+ elsif recipes.include? 'rails 3.1'
35
+ if config['ui']
36
+ inside "app/assets/javascripts" do
37
+ get "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js", "jqueryui.js"
38
+ end
39
+ else
40
+ say_wizard "jQuery installed by default in Rails 3.1."
41
+ end
42
+ else
43
+ say_wizard "Don't know what to do for Rails version #{Rails::VERSION::STRING}. jQuery recipe skipped."
44
+ end
45
+ else
46
+ if config['ui']
47
+ say_wizard "You said you didn't want jQuery. Can't install jQuery UI without jQuery."
48
+ end
49
+ recipes.delete('jquery')
50
+ end
51
+
52
+ __END__
53
+
54
+ name: jQuery
55
+ description: "Install jQuery (with jQuery UI option) for Rails 3.0 or 3.1."
56
+ author: fortuity
57
+
58
+ exclusive: javascript_framework
59
+ category: assets
60
+ tags: [javascript, framework]
61
+
62
+ args: ["-J"]
63
+
64
+ config:
65
+ - jquery:
66
+ type: boolean
67
+ prompt: Would you like to use jQuery?
68
+ - ui:
69
+ type: boolean
70
+ prompt: Would you like to use jQuery UI?
data/recipes/less.rb ADDED
@@ -0,0 +1,12 @@
1
+ gem 'less'
2
+ plugin 'more', :git => 'git://github.com/cloudhead/more.git'
3
+
4
+ __END__
5
+
6
+ name: Less CSS
7
+ description: "Utilize Less CSS for CSS generation utilizing the \"more\" plugin for Rails."
8
+ author: mbleigh
9
+
10
+ exclusive: css_replacement
11
+ category: assets
12
+ tags: [css]
@@ -0,0 +1,18 @@
1
+ gem 'bson_ext'
2
+ gem 'mongo_mapper', :git => 'git://github.com/jnunemaker/mongomapper.git', :branch => 'rails3'
3
+
4
+ after_bundler do
5
+ generate 'mongo_mapper:config'
6
+ end
7
+
8
+ __END__
9
+
10
+ name: MongoMapper
11
+ description: "Use MongoDB with MongoMapper as your primary datastore."
12
+ author: mbleigh
13
+
14
+ exclusive: orm
15
+ category: persistence
16
+ tags: [mongodb, orm]
17
+
18
+ args: ["-O"]
@@ -0,0 +1,59 @@
1
+ if config['use_heroku']
2
+
3
+ header = <<-YAML
4
+ <% if ENV['MONGOHQ_URL'] %>
5
+ <% mongohq = URI.parse(ENV['MONGOHQ_URL']) %>
6
+ mongohq:
7
+ host: <%= mongohq.host %>
8
+ port: <%= mongohq.port %>
9
+ database: <%= mongohq.path.sub '/', '' %>
10
+ username: <%= mongohq.user %>
11
+ password: <%= mongohq.password %>
12
+ <% end %>
13
+ YAML
14
+
15
+ after_everything do
16
+ say_wizard 'Adding mongohq:free addon (you can always upgrade later)'
17
+ system 'heroku addons:add mongohq:free'
18
+ end
19
+ else
20
+ mongohq = URI.parse(config['uri'])
21
+
22
+ header = <<-YAML
23
+ mongohq:
24
+ host: #{mongohq.host}
25
+ port: #{mongohq.port}
26
+ database: #{mongohq.path.sub '/',''}
27
+ username: #{mongohq.user}
28
+ password: #{mongohq.password}
29
+ YAML
30
+ end
31
+
32
+ after_bundler do
33
+ mongo_yml = "config/mongo#{'id' if recipe?('mongoid')}.yml"
34
+
35
+ prepend_file mongo_yml, header
36
+ inject_into_file mongo_yml, " <<: *mongohq\n", :after => "production:\n <<: *defaults\n"
37
+ end
38
+
39
+ __END__
40
+
41
+ name: MongoHQ
42
+ description: "Utilize MongoHQ as the production data host for your application."
43
+ author: mbleigh
44
+
45
+ requires_any: [mongo_mapper, mongoid]
46
+ run_after: [mongo_mapper, mongoid, heroku]
47
+ exclusive: mongodb_host
48
+ category: services
49
+ tags: [mongodb]
50
+
51
+ config:
52
+ - use_heroku:
53
+ type: boolean
54
+ prompt: "Use the MongoHQ Heroku addon?"
55
+ if_recipe: heroku
56
+ - uri:
57
+ type: string
58
+ prompt: "Enter your MongoHQ URI:"
59
+ unless: use_heroku