ey_rails_wizard 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. data/ChangeLog.md +8 -0
  2. data/README.md +21 -17
  3. data/Rakefile +21 -6
  4. data/lib/rails_wizard.rb +5 -5
  5. data/lib/rails_wizard/command.rb +29 -23
  6. data/lib/rails_wizard/config.rb +6 -6
  7. data/lib/rails_wizard/{recipe.rb → scroll.rb} +10 -10
  8. data/lib/rails_wizard/{recipes.rb → scrolls.rb} +9 -9
  9. data/lib/rails_wizard/template.rb +23 -23
  10. data/sample.rb +2 -2
  11. data/{recipes → scrolls}/active_admin.rb +1 -1
  12. data/{recipes → scrolls}/activerecord.rb +0 -0
  13. data/{recipes → scrolls}/cancan.rb +0 -0
  14. data/{recipes → scrolls}/capybara.rb +0 -0
  15. data/{recipes → scrolls}/carrierwave.rb +0 -0
  16. data/{recipes → scrolls}/carrierwave_direct.rb +0 -0
  17. data/{recipes → scrolls}/cartographer.rb +0 -0
  18. data/{recipes → scrolls}/cucumber.rb +1 -1
  19. data/scrolls/delayed_job.rb +94 -0
  20. data/{recipes → scrolls}/devise.rb +2 -2
  21. data/{recipes → scrolls}/devise_invitable.rb +0 -0
  22. data/{recipes → scrolls}/env_yaml.rb +0 -0
  23. data/{recipes → scrolls}/event_calendar.rb +0 -0
  24. data/scrolls/eycloud.rb +62 -0
  25. data/{recipes → scrolls}/eycloud_recipes_on_deploy.rb +1 -1
  26. data/{recipes → scrolls}/factory_girl.rb +1 -1
  27. data/{recipes → scrolls}/ffaker.rb +0 -0
  28. data/{recipes → scrolls}/fixture_builder.rb +0 -0
  29. data/{recipes → scrolls}/forgery.rb +0 -0
  30. data/{recipes → scrolls}/git.rb +0 -0
  31. data/scrolls/github.rb +31 -0
  32. data/{recipes → scrolls}/haml.rb +0 -0
  33. data/{recipes → scrolls}/heroku.rb +0 -0
  34. data/{recipes → scrolls}/hoptoad.rb +1 -1
  35. data/{recipes → scrolls}/inherited_resources.rb +0 -0
  36. data/scrolls/intercom.rb +35 -0
  37. data/{recipes → scrolls}/jammit.rb +0 -0
  38. data/{recipes → scrolls}/jasmine.rb +0 -0
  39. data/{recipes → scrolls}/jquery.rb +0 -0
  40. data/{recipes → scrolls}/mini_magick.rb +0 -0
  41. data/{recipes → scrolls}/mongo_mapper.rb +0 -0
  42. data/{recipes → scrolls}/mongohq.rb +2 -2
  43. data/{recipes → scrolls}/mongoid.rb +0 -0
  44. data/{recipes → scrolls}/mootools.rb +0 -0
  45. data/{recipes → scrolls}/mysql.rb +12 -2
  46. data/scrolls/newrelic.rb +11 -0
  47. data/{recipes → scrolls}/nifty_generators.rb +1 -1
  48. data/{recipes → scrolls}/oa_oauth.rb +0 -0
  49. data/{recipes → scrolls}/omniauth.rb +0 -0
  50. data/{recipes → scrolls}/paper_trail.rb +0 -0
  51. data/{recipes → scrolls}/pow.rb +0 -0
  52. data/{recipes → scrolls}/prototype.rb +0 -0
  53. data/{recipes → scrolls}/puma.rb +0 -0
  54. data/{recipes → scrolls}/rails_admin.rb +0 -0
  55. data/{recipes → scrolls}/rails_basics.rb +9 -4
  56. data/{recipes → scrolls}/rails_dev_tweaks.rb +0 -0
  57. data/{recipes → scrolls}/rails_erd.rb +0 -0
  58. data/{recipes → scrolls}/rails_footnotes.rb +0 -0
  59. data/{recipes → scrolls}/ransack.rb +0 -0
  60. data/{recipes → scrolls}/redis.rb +4 -0
  61. data/scrolls/resque.rb +70 -0
  62. data/{recipes → scrolls}/rmagick.rb +0 -0
  63. data/{recipes → scrolls}/rspec.rb +0 -0
  64. data/{recipes → scrolls}/sass.rb +1 -1
  65. data/{recipes → scrolls}/sequel.rb +0 -0
  66. data/{recipes → scrolls}/settingslogic.rb +0 -0
  67. data/{recipes → scrolls}/shoulda_matchers.rb +0 -0
  68. data/scrolls/sidekiq.rb +23 -0
  69. data/{recipes → scrolls}/simple_form.rb +1 -1
  70. data/{recipes → scrolls}/slim.rb +0 -0
  71. data/{recipes → scrolls}/sqlite3.rb +0 -0
  72. data/{recipes → scrolls}/test_unit.rb +0 -0
  73. data/{recipes → scrolls}/thin.rb +0 -0
  74. data/{recipes → scrolls}/thinking_sphinx.rb +0 -0
  75. data/{recipes → scrolls}/twitter_bootstrap_rails.rb +1 -1
  76. data/{recipes → scrolls}/unicorn.rb +0 -0
  77. data/spec/rails_wizard/config_spec.rb +6 -6
  78. data/spec/rails_wizard/recipe_spec.rb +16 -16
  79. data/spec/rails_wizard/recipes/sanity_spec.rb +13 -13
  80. data/spec/rails_wizard/recipes_spec.rb +9 -9
  81. data/spec/rails_wizard/template_spec.rb +15 -15
  82. data/templates/helpers.erb +9 -9
  83. data/templates/layout.erb +7 -7
  84. data/templates/new_scroll.erb +20 -0
  85. data/templates/{recipe.erb → scroll.erb} +3 -3
  86. data/version.rb +1 -1
  87. metadata +88 -83
  88. data/recipes/delayed_job.rb +0 -16
  89. data/recipes/eycloud.rb +0 -30
  90. data/recipes/resque.rb +0 -37
data/sample.rb CHANGED
@@ -29,10 +29,10 @@ Rails.application.config.generators do |g|
29
29
  end
30
30
  RUBY
31
31
 
32
- recipes = ["activerecord", "devise", "prototype"]
32
+ scrolls = ["activerecord", "devise", "prototype"]
33
33
 
34
34
  def say_custom(tag, text); say "\033[1m\033[36m" + tag.to_s.rjust(10) + "\033[0m" + " #{text}" end
35
- def say_recipe(name); say "\033[1m\033[36m" + "recipe".rjust(10) + "\033[0m" + " Running #{name} recipe..." end
35
+ def say_scroll(name); say "\033[1m\033[36m" + "scroll".rjust(10) + "\033[0m" + " Running #{name} scroll..." end
36
36
  def say_wizard(text); say_custom('wizard', text) end
37
37
  def ask_wizard(question)
38
38
  ask "\033[1m\033[30m\033[46m" + "prompt".rjust(10) + "\033[0m\033[36m" + " #{question}\033[0m"
@@ -1,4 +1,4 @@
1
- #unless recipes.include? 'sass-rails'
1
+ #unless scrolls.include? 'sass-rails'
2
2
  # gem 'sass-rails'
3
3
  #end
4
4
  gem 'activeadmin'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -3,7 +3,7 @@ gem 'capybara', :group => [:development, :test]
3
3
  gem 'database_cleaner', :group => [:development, :test]
4
4
 
5
5
  after_bundler do
6
- generate "cucumber:install --capybara#{' --rspec' if recipes.include?('rspec')}#{' -D' unless recipes.include?('activerecord')}"
6
+ generate "cucumber:install --capybara#{' --rspec' if scrolls.include?('rspec')}#{' -D' unless scrolls.include?('activerecord')}"
7
7
  end
8
8
 
9
9
  __END__
@@ -0,0 +1,94 @@
1
+ gem 'delayed_job_active_record'
2
+ gem 'delayed_job_admin'
3
+
4
+ if config["admin"]
5
+ inject_into_class "app/controllers/application_controller.rb", "ApplicationController" do
6
+ <<-RUBY
7
+
8
+ def delayed_job_admin_authentication
9
+ # authentication_logic_goes_here
10
+ true
11
+ end
12
+
13
+ RUBY
14
+ end
15
+
16
+ create_file "readmes/delayed_job_admin.md", <<-MD
17
+ # Delayed Job Admin README
18
+
19
+ Delayed Job Admin console is available at [/delayed_job_admin](http://localhost:3000/delayed_job_admin).
20
+
21
+ ```
22
+ open http://localhost:3000/delayed_job_admin
23
+ ```
24
+
25
+ ## Steps to complete
26
+
27
+ ### Authentication
28
+
29
+ By default, there is no authentication or authorization protecting access to `/delayed_job_admin`.
30
+
31
+ Please go to `app/controllers/application_controller.rb` and edit the following method:
32
+
33
+ ```ruby
34
+ def delayed_job_admin_authentication
35
+ # authentication_logic_goes_here
36
+ true
37
+ end
38
+ ```
39
+
40
+ For example, if you are using the Devise gem and have an Admin model:
41
+
42
+ ```ruby
43
+ def delayed_job_admin_authentication
44
+ authenticate_admin!
45
+ end
46
+ ```
47
+
48
+ MD
49
+ end
50
+
51
+ if scroll? "eycloud_recipes_on_deploy"
52
+ gem 'eycloud-scroll-delayed_job', :group => :eycloud
53
+ end
54
+
55
+
56
+ after_bundler do
57
+ generate 'delayed_job'
58
+
59
+ if scroll? "eycloud_recipes_on_deploy"
60
+ say_wizard 'Installing deploy hooks to restart delayed_job after deploys'
61
+ run "touch deploy/before_restart.rb"
62
+ append_file "deploy/before_restart.rb", <<-RUBY
63
+ on_app_servers_and_utilities do
64
+ node[:applications].each do |app_name, data|
65
+ sudo 'echo "sleep 20 && monit -g dj_\#{app_name} restart all" | at now'
66
+ end
67
+ end
68
+ RUBY
69
+
70
+ append_file "deploy/cookbooks/main/scrolls/default.rb", "\nrequire_scroll 'delayed_job'\n"
71
+ end
72
+ end
73
+
74
+ after_everything do
75
+ say_custom "readme", "Delayed Job Admin"
76
+ run %q{cat "readmes/delayed_job_admin.md"}
77
+ end
78
+
79
+ __END__
80
+
81
+ name: Delayed Job
82
+ description: Use Delayed Job to handle background jobs
83
+ author: drnic
84
+
85
+ exclusive: worker
86
+ category: worker
87
+ tags: [worker,background-tasks]
88
+
89
+ run_after: [eycloud_recipes_on_deploy]
90
+
91
+ config:
92
+ - admin:
93
+ type: boolean
94
+ prompt: "Install simple admin interface to Delayed Job?"
@@ -9,11 +9,11 @@ inject_into_file 'config/routes.rb', "\nroot :to => 'home#index'\n", :after => "
9
9
  after_bundler do
10
10
  generate 'devise:install'
11
11
 
12
- if recipes.include? 'mongo_mapper'
12
+ if scrolls.include? 'mongo_mapper'
13
13
  gem 'mm-devise'
14
14
  gsub_file 'config/initializers/devise.rb', 'devise/orm/', 'devise/orm/mongo_mapper_active_model'
15
15
  generate 'mongo_mapper:devise User'
16
- elsif recipes.include? 'mongoid'
16
+ elsif scrolls.include? 'mongoid'
17
17
  gsub_file 'config/initializers/devise.rb', 'devise/orm/active_record', 'devise/orm/mongoid'
18
18
  end
19
19
 
File without changes
File without changes
File without changes
@@ -0,0 +1,62 @@
1
+ @name = File.basename(File.expand_path("."))
2
+ say_custom "eycloud", "Deploying #{@name} to Engine Yard Cloud..."
3
+
4
+ # gem 'engineyard-v2', :groups => [:development]
5
+ gem 'ey_config'
6
+
7
+ unless scroll?("mysql") || scroll?("postgresql")
8
+ say_custom "eycloud", "ERROR: To deploy to Engine Yard Cloud, please include 'mysql' or 'postgresql' scroll."
9
+ exit 1
10
+ end
11
+
12
+ after_everything do
13
+ if @mysql_stack
14
+ say_custom "eycloud", "Using mysql #{@mysql_stack}"
15
+ elsif @postgresql_stack
16
+ say_custom "eycloud", "Using postgresql #{@postgresql_stack}"
17
+ end
18
+
19
+ # run "ey login"
20
+ #
21
+ # require "yaml"
22
+ # require "engineyard" # for EY.ui
23
+ # require "engineyard/eyrc" # to load api token
24
+ # require "engineyard-cloud-client"
25
+ # ey_api = EY::CloudClient.new(EY::EYRC.load.api_token)
26
+ #
27
+ #
28
+ # say_custom "eycloud", "Fetching list of accounts..."
29
+ # current_apps = EY::CloudClient::App.all(ey_api)
30
+ #
31
+ # # TODO check if @git_uri is in current_apps, if not then create app
32
+ #
33
+ # accounts = current_apps.map(&:account).uniq
34
+ # account = multiple_choice("Create app to which Engine Yard Cloud account?", accounts.map {|a| [a.name, a]})
35
+ #
36
+ # say_custom "eycloud", "Creating application #{@name} on account #{account.name}..."
37
+ # app = EY::CloudClient::App.create(ey_api, {
38
+ # "account" => account,
39
+ # "name" => @name,
40
+ # "repository_uri" => @git_uri,
41
+ # "app_type_id" => "rails3"
42
+ # })
43
+ #
44
+
45
+ # TODO how to get deploy key?
46
+ # How to upload deploy key to github?
47
+
48
+ # multiple_choice("Let's boot some instances!", [
49
+ # [""]
50
+ # ])
51
+ end
52
+
53
+ __END__
54
+
55
+ name: Engine Yard Cloud
56
+ description: The Most Powerful Ruby Cloud
57
+ author: drnic
58
+
59
+ requires: [github]
60
+ run_after: [github]
61
+ category: deployment
62
+ exclusive: deployment
@@ -15,6 +15,6 @@ author: drnic
15
15
  website: https://github.com/engineyard/engineyard-recipes
16
16
 
17
17
  requires: [eycloud]
18
- run_after: [eycloud]
18
+ run_before: [eycloud]
19
19
  category: deployment
20
20
  tags: [background, worker]
@@ -34,5 +34,5 @@ config:
34
34
  - use_devise:
35
35
  type: boolean
36
36
  prompt: "Add factory for devise user?"
37
- if_recipe: devise
37
+ if_scroll: devise
38
38
 
File without changes
File without changes
File without changes
File without changes
data/scrolls/github.rb ADDED
@@ -0,0 +1,31 @@
1
+ gem 'github', '>= 0.7.0', :group => [:development]
2
+
3
+ after_everything do
4
+ if config["github_private"]
5
+ run "bundle exec gh create-from-local --private"
6
+ else
7
+ run "bundle exec gh create-from-local"
8
+ end
9
+
10
+ # TODO - what to do if repo already exists? prompt to override?
11
+
12
+ @git_uri = `git config remote.origin.url`.strip
13
+ say_custom "github", "Created repo #{@git_uri}"
14
+ end
15
+
16
+ __END__
17
+
18
+ name: GitHub
19
+ description: Create/push project to new GitHub repository
20
+ author: drnic
21
+
22
+ category: deployment
23
+ exclusive: scm-hosting
24
+
25
+ requires: [git]
26
+ run_after: [git]
27
+
28
+ config:
29
+ - github_private:
30
+ type: boolean
31
+ prompt: "Creating GitHub repository; want it to be private?"
File without changes
File without changes
@@ -27,7 +27,7 @@ config:
27
27
  - use_heroku:
28
28
  type: boolean
29
29
  prompt: "Use the Hoptoad Heroku addon?"
30
- if_recipe: heroku
30
+ if_scroll: heroku
31
31
  - api_key:
32
32
  prompt: "Enter Hoptoad API Key:"
33
33
  type: string
File without changes
@@ -0,0 +1,35 @@
1
+ # gem 'intercom-ruby', :group => [:development] # for API communication
2
+ gem 'intercom-rails' # to generate the javascript in the layout
3
+
4
+
5
+ # during initial generation (after "rails new")
6
+ # signin to intercom.io, fetch token, or enter tokens
7
+ # create new intercom app and get metadata
8
+
9
+
10
+ after_bundler do
11
+ generate %Q|intercom:install #{config["intercom_app_id"]}|
12
+ end
13
+
14
+ after_everything do
15
+ end
16
+
17
+
18
+ __END__
19
+
20
+ name: Intercom
21
+ description: Install intercom.io
22
+ author: drnic
23
+ website: http://intercom.io
24
+
25
+ requires: []
26
+ run_after: []
27
+ run_before: []
28
+
29
+ category: other # authentication, testing, persistence, javascript, css, services, deployment, and templating
30
+ # exclusive:
31
+
32
+ config:
33
+ - intercom_app_id:
34
+ type: string
35
+ prompt: "What is your Intercom app id for this new, fantastic app?"
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -30,7 +30,7 @@ YAML
30
30
  end
31
31
 
32
32
  after_bundler do
33
- mongo_yml = "config/mongo#{'id' if recipe?('mongoid')}.yml"
33
+ mongo_yml = "config/mongo#{'id' if scroll?('mongoid')}.yml"
34
34
 
35
35
  prepend_file mongo_yml, header
36
36
  inject_into_file mongo_yml, " <<: *mongohq\n", :after => "production:\n <<: *defaults\n"
@@ -52,7 +52,7 @@ config:
52
52
  - use_heroku:
53
53
  type: boolean
54
54
  prompt: "Use the MongoHQ Heroku addon?"
55
- if_recipe: heroku
55
+ if_scroll: heroku
56
56
  - uri:
57
57
  type: string
58
58
  prompt: "Enter your MongoHQ URI:"
File without changes
File without changes
@@ -1,13 +1,21 @@
1
- if recipe?("sqlite3")
1
+ if scroll?("sqlite3")
2
2
  gem "mysql2", :group => :production
3
3
  else
4
- gem "mysql2", :group => :production
4
+ gem "mysql2"
5
5
  end
6
6
  # TODO what about Windows?
7
7
  # TODO what if you only want MySQL in production?
8
8
 
9
9
  # TODO generate config/database.yml for DBs
10
10
 
11
+ if scroll?("eycloud")
12
+ mysql_versions = [
13
+ ["MySQL 5.0", "mysql_50"],
14
+ ["MySQL 5.5 (beta)", "mysql_55"]
15
+ ]
16
+ @mysql_stack = multiple_choice("Create app to which Engine Yard Cloud account?", mysql_versions)
17
+ end
18
+
11
19
  __END__
12
20
 
13
21
  name: MySQL
@@ -17,3 +25,5 @@ author: drnic
17
25
  exclusive: orm
18
26
  category: persistence
19
27
  tags: [sql, orm, mysql]
28
+
29
+ run_before: [eycloud]
@@ -0,0 +1,11 @@
1
+ gem 'newrelic_rpm'
2
+
3
+ __END__
4
+
5
+ name: New Relic RPM
6
+ description: Monitor applications with New Relic
7
+ author: drnic
8
+ website: https://support.cloud.engineyard.com/entries/21016493-monitor-applications-with-new-relic-on-engine-yard-cloud
9
+
10
+ category: deployment
11
+ exclusive: app-monitoring
@@ -2,7 +2,7 @@ gem "nifty-generators"
2
2
  after_bundler do
3
3
  remove_file 'app/views/layouts/application.html.erb' # use nifty layout instead
4
4
 
5
- if recipes.include? 'haml'
5
+ if scrolls.include? 'haml'
6
6
  generate 'nifty:layout --haml'
7
7
  else
8
8
  generate 'nifty:layout'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes