potassium 1.3.5 → 2.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 (138) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +1 -1
  5. data/.ruby_style.yml +6 -2
  6. data/CHANGELOG.md +19 -1
  7. data/README.md +79 -74
  8. data/circle.yml +9 -0
  9. data/docs/CONTRIBUTING.md +132 -0
  10. data/docs/{dsl.md → DSL.md} +146 -18
  11. data/lib/potassium/{templates/application/assets → assets}/.bowerrc +0 -0
  12. data/lib/potassium/assets/.buildpacks +3 -0
  13. data/lib/potassium/{templates/application/assets → assets}/.editorconfig +0 -0
  14. data/lib/potassium/assets/.env.example.erb +8 -0
  15. data/lib/potassium/assets/.hound.yml +2 -0
  16. data/lib/potassium/{templates/application/assets → assets}/.pryrc +0 -0
  17. data/lib/potassium/assets/.rubocop.yml +3 -0
  18. data/lib/potassium/assets/.ruby_style.yml +0 -0
  19. data/lib/potassium/assets/Dockerfile.ci +4 -0
  20. data/lib/potassium/assets/Procfile +1 -0
  21. data/lib/potassium/assets/README.md.erb +2 -0
  22. data/lib/potassium/assets/README.yml +83 -0
  23. data/lib/potassium/{templates/application/assets → assets}/active_admin/active_admin.js.coffee +0 -0
  24. data/lib/potassium/{templates/application/assets → assets}/active_admin/admin_user_policy.rb +0 -0
  25. data/lib/potassium/{templates/application/assets → assets}/active_admin/comment_policy.rb +0 -0
  26. data/lib/potassium/{templates/application/assets → assets}/active_admin/init_activeadmin_angular.rb +0 -0
  27. data/lib/potassium/{templates/application/assets → assets}/active_admin/pundit_page_policy.rb +0 -0
  28. data/lib/potassium/{templates/application/assets → assets}/api/api_error_concern.rb +0 -0
  29. data/lib/potassium/{templates/application/assets → assets}/api/base_controller.rb +0 -0
  30. data/lib/potassium/{templates/application/assets → assets}/api/responder.rb +0 -0
  31. data/lib/potassium/assets/bin/cibuild.erb +27 -0
  32. data/lib/potassium/assets/bin/setup.erb +22 -0
  33. data/lib/potassium/assets/bin/setup_heroku.erb +21 -0
  34. data/lib/potassium/{templates/application/assets → assets}/bower.json +0 -0
  35. data/lib/potassium/assets/circle.yml +16 -0
  36. data/lib/potassium/assets/config/database_mysql.yml.erb +25 -0
  37. data/lib/potassium/assets/config/database_postgresql.yml.erb +25 -0
  38. data/lib/potassium/assets/config/environments/staging.rb +5 -0
  39. data/lib/potassium/assets/config/puma.rb +29 -0
  40. data/lib/potassium/assets/config/secrets.yml.erb +14 -0
  41. data/lib/potassium/assets/docker-compose.ci.yml +6 -0
  42. data/lib/potassium/{templates/application/assets → assets}/es.yml +0 -0
  43. data/lib/potassium/{templates/application/assets → assets}/testing/.rspec +0 -0
  44. data/lib/potassium/{templates/application/assets → assets}/testing/rails_helper.rb +0 -0
  45. data/lib/potassium/cli/commands/create.rb +55 -4
  46. data/lib/potassium/cli/commands/install.rb +27 -13
  47. data/lib/potassium/{templates/application/generator.rb → generators/application.rb} +7 -2
  48. data/lib/potassium/{templates/application/recipe_generator.rb → generators/recipe.rb} +11 -2
  49. data/lib/potassium/helpers/answer-helpers.rb +21 -0
  50. data/lib/potassium/{templates/application/helpers → helpers}/callback-helpers.rb +0 -0
  51. data/lib/potassium/helpers/docker-helpers.rb +37 -0
  52. data/lib/potassium/{templates/application/helpers → helpers}/environment-helpers.rb +0 -0
  53. data/lib/potassium/{templates/application/helpers → helpers}/gem-helpers.rb +6 -2
  54. data/lib/potassium/helpers/info-helpers.rb +16 -0
  55. data/lib/potassium/helpers/readme-helpers.rb +85 -0
  56. data/lib/potassium/{templates/application/helpers → helpers}/template-dsl.rb +8 -0
  57. data/lib/potassium/helpers/template-helpers.rb +97 -0
  58. data/lib/potassium/{templates/application/helpers → helpers}/variable-helpers.rb +0 -0
  59. data/lib/potassium/recipe.rb +2 -0
  60. data/lib/potassium/{templates/application/recipes → recipes}/admin.rb +36 -6
  61. data/lib/potassium/recipes/angular_admin.rb +56 -0
  62. data/lib/potassium/recipes/api.rb +43 -0
  63. data/lib/potassium/recipes/aws_sdk.rb +5 -0
  64. data/lib/potassium/recipes/bower.rb +13 -0
  65. data/lib/potassium/recipes/ci.rb +42 -0
  66. data/lib/potassium/recipes/cleanup.rb +10 -0
  67. data/lib/potassium/recipes/database.rb +42 -0
  68. data/lib/potassium/recipes/delayed_job.rb +41 -0
  69. data/lib/potassium/recipes/devise.rb +64 -0
  70. data/lib/potassium/recipes/editorconfig.rb +5 -0
  71. data/lib/potassium/recipes/env.rb +10 -0
  72. data/lib/potassium/recipes/git.rb +13 -0
  73. data/lib/potassium/recipes/github.rb +27 -0
  74. data/lib/potassium/recipes/heroku.rb +138 -0
  75. data/lib/potassium/recipes/i18n.rb +26 -0
  76. data/lib/potassium/recipes/paperclip.rb +37 -0
  77. data/lib/potassium/recipes/production.rb +7 -0
  78. data/lib/potassium/recipes/pry.rb +10 -0
  79. data/lib/potassium/recipes/puma.rb +19 -0
  80. data/lib/potassium/recipes/pundit.rb +61 -0
  81. data/lib/potassium/recipes/rack_cors.rb +21 -0
  82. data/lib/potassium/recipes/readme.rb +7 -0
  83. data/lib/potassium/recipes/ruby.rb +23 -0
  84. data/lib/potassium/recipes/script.rb +16 -0
  85. data/lib/potassium/recipes/secrets.rb +5 -0
  86. data/lib/potassium/recipes/staging.rb +5 -0
  87. data/lib/potassium/recipes/style.rb +13 -0
  88. data/lib/potassium/recipes/testing.rb +37 -0
  89. data/lib/potassium/templates/application.rb +67 -0
  90. data/lib/potassium/templates/recipe.rb +12 -0
  91. data/lib/potassium/text_spinner.rb +0 -5
  92. data/lib/potassium/version.rb +2 -1
  93. data/potassium.gemspec +3 -0
  94. data/spec/fakes/bin/heroku +5 -0
  95. data/spec/fakes/bin/hub +5 -0
  96. data/spec/features/ci_spec.rb +14 -0
  97. data/spec/features/github_spec.rb +22 -0
  98. data/spec/features/heroku_spec.rb +61 -0
  99. data/spec/features/new_project_spec.rb +38 -0
  100. data/spec/spec_helper.rb +33 -0
  101. data/spec/support/fake_github.rb +25 -0
  102. data/spec/support/fake_heroku.rb +77 -0
  103. data/spec/support/potassium_test_helpers.rb +98 -0
  104. metadata +149 -62
  105. data/lib/potassium/templates/application/assets/.rbenv-vars.example +0 -8
  106. data/lib/potassium/templates/application/assets/config/database_mysql.yml +0 -40
  107. data/lib/potassium/templates/application/assets/config/database_postgresql.yml +0 -26
  108. data/lib/potassium/templates/application/helpers/recipe-helpers.rb +0 -5
  109. data/lib/potassium/templates/application/helpers/template-helpers.rb +0 -35
  110. data/lib/potassium/templates/application/recipe_template.rb +0 -23
  111. data/lib/potassium/templates/application/recipes/angular_admin.rb +0 -26
  112. data/lib/potassium/templates/application/recipes/api.rb +0 -22
  113. data/lib/potassium/templates/application/recipes/asks/admin.rb +0 -9
  114. data/lib/potassium/templates/application/recipes/asks/api.rb +0 -2
  115. data/lib/potassium/templates/application/recipes/asks/database.rb +0 -9
  116. data/lib/potassium/templates/application/recipes/asks/devise.rb +0 -10
  117. data/lib/potassium/templates/application/recipes/asks/i18n.rb +0 -8
  118. data/lib/potassium/templates/application/recipes/asks/paperclip.rb +0 -2
  119. data/lib/potassium/templates/application/recipes/asks/pundit.rb +0 -4
  120. data/lib/potassium/templates/application/recipes/aws_sdk.rb +0 -1
  121. data/lib/potassium/templates/application/recipes/bower.rb +0 -3
  122. data/lib/potassium/templates/application/recipes/checks/devise.rb +0 -1
  123. data/lib/potassium/templates/application/recipes/database.rb +0 -22
  124. data/lib/potassium/templates/application/recipes/dependencies/admin.rb +0 -3
  125. data/lib/potassium/templates/application/recipes/devise.rb +0 -28
  126. data/lib/potassium/templates/application/recipes/editorconfig.rb +0 -1
  127. data/lib/potassium/templates/application/recipes/git.rb +0 -9
  128. data/lib/potassium/templates/application/recipes/i18n.rb +0 -9
  129. data/lib/potassium/templates/application/recipes/paperclip.rb +0 -20
  130. data/lib/potassium/templates/application/recipes/production.rb +0 -3
  131. data/lib/potassium/templates/application/recipes/pry.rb +0 -6
  132. data/lib/potassium/templates/application/recipes/pundit.rb +0 -33
  133. data/lib/potassium/templates/application/recipes/rack-cors.rb +0 -15
  134. data/lib/potassium/templates/application/recipes/rbenv.rb +0 -23
  135. data/lib/potassium/templates/application/recipes/readme.rb +0 -2
  136. data/lib/potassium/templates/application/recipes/testing.rb +0 -32
  137. data/lib/potassium/templates/application/recipes/unicorn.rb +0 -5
  138. data/lib/potassium/templates/application/template.rb +0 -58
@@ -0,0 +1,26 @@
1
+ class Recipes::I18n < Rails::AppBuilder
2
+ def ask
3
+ languages = {
4
+ es: "Spanish",
5
+ en: "English"
6
+ }
7
+
8
+ lang = answer(:lang) do
9
+ languages.keys[Ask.list("What is the main language of your app?", languages.values)]
10
+ end
11
+
12
+ set(:lang, lang)
13
+ end
14
+
15
+ def create
16
+ gather_gem('rails-i18n')
17
+
18
+ if equals?(:lang, :es)
19
+ template('../assets/es.yml', 'config/locales/es.yml')
20
+ end
21
+
22
+ gsub_file 'config/application.rb', /# config\.i18n\.default_locale =[^\n]+\n/ do
23
+ "config.i18n.default_locale = :#{get(:lang)}\n"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,37 @@
1
+ class Recipes::Paperclip < Rails::AppBuilder
2
+ def ask
3
+ paperclip = answer(:paperclip) { Ask.confirm("Do you want to use Paperclip for uploads?") }
4
+ set(:paperclip, paperclip)
5
+ end
6
+
7
+ def create
8
+ add_paperclip if selected?(:paperclip)
9
+ end
10
+
11
+ def install
12
+ add_paperclip
13
+ end
14
+
15
+ def installed?
16
+ gem_exists?(/paperclip/)
17
+ end
18
+
19
+ private
20
+
21
+ def add_paperclip
22
+ gather_gem 'paperclip', '~> 4.3'
23
+ paperclip_config =
24
+ <<-RUBY.gsub(/^ {7}/, '')
25
+ config.paperclip_defaults = {
26
+ storage: :s3,
27
+ s3_credentials: {
28
+ bucket: ENV['AWS_BUCKET']
29
+ }
30
+ }
31
+ RUBY
32
+ application paperclip_config.strip, env: 'production'
33
+ append_to_file '.env.example', 'AWS_BUCKET='
34
+ append_to_file '.env', 'AWS_BUCKET='
35
+ add_readme_section :internal_dependencies, :paperclip
36
+ end
37
+ end
@@ -0,0 +1,7 @@
1
+ class Recipes::Production < Rails::AppBuilder
2
+ def create
3
+ gsub_file "config/environments/production.rb", /(\# config.action_mailer.+)/i do |match|
4
+ "#{match}\n config.action_mailer.default_options = { from: ENV['DEFAULT_EMAIL_ADDRESS'] }\n"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ class Recipes::Pry < Rails::AppBuilder
2
+ def create
3
+ gather_gems(:development, :test) do
4
+ gather_gem('pry-rails')
5
+ gather_gem('pry-byebug')
6
+ end
7
+
8
+ template '../assets/.pryrc', '.pryrc'
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ class Recipes::Puma < Rails::AppBuilder
2
+ def create
3
+ gather_gem 'puma'
4
+
5
+ gather_gems(:production, :staging) do
6
+ gather_gem 'rack-timeout'
7
+ end
8
+
9
+ copy_file '../assets/config/puma.rb', 'config/puma.rb'
10
+
11
+ # Configure rack-timout
12
+ rack_timeout_config =
13
+ <<-RUBY.gsub(/^ {9}/, '')
14
+ Rack::Timeout.timeout = (ENV["RACK_TIMEOUT"] || 10).to_i
15
+ RUBY
16
+
17
+ append_file "config/environments/production.rb", rack_timeout_config
18
+ end
19
+ end
@@ -0,0 +1,61 @@
1
+ class Recipes::Pundit < Rails::AppBuilder
2
+ def ask
3
+ if get(:authentication).present?
4
+ use_pundit = answer(:pundit) { Ask.confirm("Do you want to use Pundit for authorization?") }
5
+ set(:authorization, use_pundit)
6
+ end
7
+ end
8
+
9
+ def create
10
+ if selected?(:authorization)
11
+ run_pundit_installer
12
+ recipe = self
13
+
14
+ if selected?(:admin_mode)
15
+ after(:admin_install) do
16
+ recipe.install_admin_pundit
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ def install
23
+ run_pundit_installer
24
+
25
+ active_admin = load_recipe(:admin)
26
+ install_admin_pundit if active_admin.installed?
27
+ end
28
+
29
+ def installed?
30
+ gem_exists?(/pundit/)
31
+ end
32
+
33
+ private
34
+
35
+ def run_pundit_installer
36
+ gather_gem 'pundit'
37
+
38
+ after(:gem_install) do
39
+ application_controller = "app/controllers/application_controller.rb"
40
+ gsub_file application_controller, "protect_from_forgery" do
41
+ "include Pundit\n protect_from_forgery"
42
+ end
43
+ generate "pundit:install"
44
+ add_readme_section :internal_dependencies, :pundit
45
+ end
46
+ end
47
+
48
+ def install_admin_pundit
49
+ initializer = "config/initializers/active_admin.rb"
50
+ gsub_file initializer, /# config\.authorization_adapter =[^\n]+\n/ do
51
+ "config.authorization_adapter = ActiveAdmin::PunditAdapter\n"
52
+ end
53
+
54
+ template "../assets/active_admin/pundit_page_policy.rb",
55
+ "app/policies/active_admin/page_policy.rb"
56
+ template "../assets/active_admin/comment_policy.rb",
57
+ "app/policies/active_admin/comment_policy.rb"
58
+ template "../assets/active_admin/admin_user_policy.rb",
59
+ "app/policies/admin_user_policy.rb"
60
+ end
61
+ end
@@ -0,0 +1,21 @@
1
+ class Recipes::RackCors < Rails::AppBuilder
2
+ def create
3
+ gather_gem('rack-cors', '~> 0.4.0')
4
+ after(:gem_install) do
5
+ rack_cors_config =
6
+ <<-RUBY.gsub(/^ {7}/, '')
7
+ config.middleware.insert_before 0, "Rack::Cors" do
8
+ allow do
9
+ origins '*'
10
+ resource '*',
11
+ headers: :any,
12
+ expose: ['X-Page', 'X-PageTotal'],
13
+ methods: [:get, :post, :delete, :put, :options]
14
+ end
15
+ end
16
+ RUBY
17
+
18
+ application rack_cors_config.strip
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ class Recipes::Readme < Rails::AppBuilder
2
+ def create
3
+ remove_file "README.md"
4
+ template '../assets/README.md.erb', 'README.md'
5
+ add_readme_header :installation
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ require 'net/http'
2
+ require 'semantic'
3
+
4
+ class Recipes::Ruby < Rails::AppBuilder
5
+ def create
6
+ info 'Getting platanus latest ruby version...'
7
+ info "Using ruby version #{version_alias}"
8
+ create_file '.ruby-version', version_alias
9
+ end
10
+
11
+ private
12
+
13
+ def latest
14
+ Net::HTTP.get(URI.parse('http://ruby.platan.us/latest'))
15
+ rescue
16
+ RUBY_VERSION
17
+ end
18
+
19
+ def version_alias
20
+ version = latest
21
+ Semantic::Version.new(version).instance_eval { "#{major}.#{minor}" }
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ class Recipes::Script < Rails::AppBuilder
2
+ def create
3
+ template "../assets/bin/setup.erb", "bin/setup", force: true
4
+ run "chmod a+x bin/setup"
5
+ end
6
+
7
+ def install
8
+ heroku = load_recipe(:heroku)
9
+ set(:heroku, heroku.installed?)
10
+ create
11
+ end
12
+
13
+ def installed?
14
+ file_exist?("bin/setup")
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ class Recipes::Secrets < Rails::AppBuilder
2
+ def create
3
+ template '../assets/config/secrets.yml.erb', 'config/secrets.yml', force: true
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class Recipes::Staging < Rails::AppBuilder
2
+ def create
3
+ copy_file '../assets/config/environments/staging.rb', "config/environments/staging.rb"
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ class Recipes::Style < Rails::AppBuilder
2
+ def create
3
+ copy_file '../assets/.rubocop.yml', '.rubocop.yml'
4
+ copy_file '../assets/.ruby_style.yml', '.ruby_style.yml'
5
+ copy_file '../assets/.hound.yml', '.hound.yml'
6
+ append_to_file '.gitignore', '.rubocop-http*\n'
7
+ add_readme_header :style_guide
8
+ end
9
+
10
+ def install
11
+ create
12
+ end
13
+ end
@@ -0,0 +1,37 @@
1
+ class Recipes::Testing < Rails::AppBuilder
2
+ def create
3
+ gather_gems(:development, :test) do
4
+ gather_gem('rspec-rails')
5
+ gather_gem('factory_girl_rails')
6
+ gather_gem('guard-rspec', require: false)
7
+ gather_gem('rspec-nc', require: false)
8
+ end
9
+
10
+ gather_gems(:test) do
11
+ gather_gem('shoulda-matchers', require: false)
12
+ end
13
+
14
+ after(:gem_install) do
15
+ remove_dir 'test'
16
+
17
+ generate "rspec:install"
18
+
19
+ remove_file 'spec/rails_helper.rb'
20
+ copy_file '../assets/testing/rails_helper.rb', 'spec/rails_helper.rb'
21
+
22
+ remove_file '.rspec'
23
+ copy_file '../assets/testing/.rspec', '.rspec'
24
+
25
+ empty_directory 'spec/support'
26
+ create_file 'spec/support/.keep'
27
+
28
+ run "bundle exec guard init"
29
+ run "bundle binstubs rspec-core"
30
+ end
31
+
32
+ raise_delivery_errors_regexp = /config.action_mailer.raise_delivery_errors = false\n/
33
+ gsub_file 'config/environments/development.rb', raise_delivery_errors_regexp do
34
+ "config.action_mailer.raise_delivery_errors = true"
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,67 @@
1
+ set :app_name, app_name
2
+ set :titleized_app_name, get(:app_name).titleize
3
+ set :underscorized_app_name, get(:app_name).underscore
4
+ set :dasherized_app_name, get(:app_name).dasherize
5
+
6
+ run_action(:cleaning) do
7
+ clean_gemfile
8
+ gather_gem("spring")
9
+ end
10
+
11
+ run_action(:asking) do
12
+ ask :database
13
+ ask :devise
14
+ ask :admin
15
+ ask :angular_admin
16
+ ask :delayed_job
17
+ ask :pundit
18
+ ask :i18n
19
+ ask :api
20
+ ask :paperclip
21
+ ask :heroku
22
+ ask :github
23
+ end
24
+
25
+ run_action(:recipe_loading) do
26
+ create :readme
27
+ create :heroku
28
+ create :ci
29
+ create :style
30
+ create :puma
31
+ create :database
32
+ create :ruby
33
+ create :env
34
+ create :bower
35
+ create :editorconfig
36
+ create :aws_sdk
37
+ create :i18n
38
+ create :pry
39
+ create :devise
40
+ create :admin
41
+ create :angular_admin
42
+ create :delayed_job
43
+ create :pundit
44
+ create :testing
45
+ create :production
46
+ create :staging
47
+ create :secrets
48
+ create :git
49
+ create :api
50
+ create :rack_cors
51
+ create :paperclip
52
+ create :script
53
+ create :github
54
+ create :cleanup
55
+ end
56
+
57
+ info "Gathered enough information. Applying the template. Wait a minute."
58
+
59
+ run_action(:gem_install) do
60
+ build_gemfile
61
+ run "bundle install"
62
+ end
63
+
64
+ run_action(:database_creation) do
65
+ run "rake db:create db:migrate"
66
+ run "RAILS_ENV=test rake db:create db:migrate"
67
+ end
@@ -0,0 +1,12 @@
1
+ set :app_name, app_name
2
+ set :titleized_app_name, get(:app_name).titleize
3
+ set :underscorized_app_name, get(:app_name).underscore
4
+ set :dasherized_app_name, get(:app_name).dasherize
5
+ recipe_name = ARGV.first
6
+
7
+ run_action(:recipe_loading) do
8
+ install recipe_name.to_sym
9
+ run_action(:gem_install) do
10
+ run "bundle install" if build_gemfile
11
+ end
12
+ end
@@ -30,7 +30,6 @@ module Potassium
30
30
  sleep interval
31
31
  self.counter += 1
32
32
  end
33
- clear_message
34
33
  self.started = false
35
34
  end
36
35
  end
@@ -44,10 +43,6 @@ module Potassium
44
43
  print "\r#{base_message}#{message_continuation}"
45
44
  end
46
45
 
47
- def clear_message
48
- print "\r#{' ' * (base_message.size * 2)}\r"
49
- end
50
-
51
46
  def already_started_message
52
47
  "Please don't start this text spinner while is running. It can cause race conditions."
53
48
  end
@@ -1,4 +1,5 @@
1
1
  module Potassium
2
- VERSION = "1.3.5"
2
+ VERSION = "2.0.0"
3
3
  RAILS_VERSION = "~> 4.2.0"
4
+ RUBOCOP_VERSION = "~> 0.38.0"
4
5
  end
data/potassium.gemspec CHANGED
@@ -20,6 +20,9 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec", "~> 3.4.0"
24
+ spec.add_development_dependency "pry", "~> 0.10.3"
25
+ spec.add_development_dependency "rubocop", Potassium::RUBOCOP_VERSION
23
26
  spec.add_runtime_dependency "rails", Potassium::RAILS_VERSION
24
27
  spec.add_runtime_dependency "gli", "~> 2.12.2"
25
28
  spec.add_runtime_dependency "inquirer", "~> 0.2"
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.join('..', '..', 'support', 'fake_heroku'), File.dirname(__FILE__))
4
+
5
+ FakeHeroku.new(ARGV).run!
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.join('..', '..', 'support', 'fake_github'), File.dirname(__FILE__))
4
+
5
+ FakeGithub.new(ARGV).run!