ey_rails_wizard 0.3.1 → 0.4.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 (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