kumade 0.2.0 → 0.2.1
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.
- data/README.md +30 -12
- data/features/kumade_executable.feature +35 -11
- data/features/kumade_without_jammit.feature +40 -0
- data/features/step_definitions/bundler_steps.rb +33 -0
- data/features/step_definitions/git_steps.rb +18 -2
- data/features/step_definitions/kumade_steps.rb +9 -0
- data/features/support/env.rb +1 -1
- data/lib/kumade.rb +15 -0
- data/lib/kumade/deployer.rb +24 -7
- data/lib/kumade/railtie.rb +10 -0
- data/lib/kumade/runner.rb +5 -1
- data/lib/kumade/version.rb +1 -1
- data/lib/tasks/deploy.rake +8 -0
- data/spec/kumade/deployer_spec.rb +88 -10
- data/spec/kumade/runner_spec.rb +11 -0
- data/spec/kumade_spec.rb +20 -0
- metadata +86 -124
    
        data/README.md
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # Kumade [](http://travis-ci.org/thoughtbot/kumade)
         | 
| 1 | 
            +
            # Kumade 熊手 [](http://travis-ci.org/thoughtbot/kumade)
         | 
| 2 2 | 
             
            Kumade is a set of basic Rake tasks for deploying to Heroku. It aims to
         | 
| 3 3 | 
             
            provide most of what you want. Unlike other Heroku deploy gems, it is
         | 
| 4 4 | 
             
            well-tested.
         | 
| @@ -22,31 +22,35 @@ gem 'kumade' | |
| 22 22 | 
             
            ```
         | 
| 23 23 |  | 
| 24 24 | 
             
            ## Usage
         | 
| 25 | 
            -
             | 
| 25 | 
            +
             | 
| 26 | 
            +
            kumade will deploy to any Heroku remote in the repo.
         | 
| 26 27 | 
             
            For example, if you have a remote named "bamboo":
         | 
| 27 28 |  | 
| 28 | 
            -
                $ kumade  | 
| 29 | 
            +
                $ bundle exec kumade bamboo
         | 
| 29 30 |  | 
| 30 31 | 
             
            which will autodetect the name of the Heroku app that the bamboo remote points
         | 
| 31 | 
            -
            to | 
| 32 | 
            +
            to and deploy to it.
         | 
| 32 33 |  | 
| 33 | 
            -
            To run in pretend mode, which  | 
| 34 | 
            +
            To run in pretend mode, which prints what would be done without actually doing
         | 
| 35 | 
            +
            any of it:
         | 
| 34 36 |  | 
| 35 | 
            -
                $ kumade  | 
| 37 | 
            +
                $ bundle exec kumade bamboo -p
         | 
| 36 38 |  | 
| 37 | 
            -
            The default  | 
| 39 | 
            +
            The default is to deploy to staging:
         | 
| 38 40 |  | 
| 39 | 
            -
                $ kumade # equivalent to "kumade  | 
| 41 | 
            +
                $ bundle exec kumade # equivalent to "bundle exec kumade staging"
         | 
| 40 42 |  | 
| 41 43 | 
             
            ## Does it support the Cedar stack?
         | 
| 42 44 |  | 
| 43 | 
            -
            Yes.
         | 
| 45 | 
            +
            Yes. To indicate that a particular app is using Cedar, run with the -c flag:
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                bundle exec kumade bamboo -c
         | 
| 44 48 |  | 
| 45 49 | 
             
            ## Sample Output
         | 
| 46 50 |  | 
| 47 51 | 
             
            ### Normal mode
         | 
| 48 52 |  | 
| 49 | 
            -
                $ kumade  | 
| 53 | 
            +
                $ kumade heroku-staging
         | 
| 50 54 | 
             
                ==> Deploying to: heroku-staging
         | 
| 51 55 | 
             
                ==> heroku-staging is a Heroku remote
         | 
| 52 56 | 
             
                ==> Git repo is clean
         | 
| @@ -104,7 +108,7 @@ Yes. | |
| 104 108 |  | 
| 105 109 | 
             
            ### Pretend mode
         | 
| 106 110 |  | 
| 107 | 
            -
                $ kumade  | 
| 111 | 
            +
                $ kumade heroku-staging -p
         | 
| 108 112 | 
             
                ==> In Pretend Mode
         | 
| 109 113 | 
             
                ==> Deploying to: heroku-staging
         | 
| 110 114 | 
             
                ==> heroku-staging is a Heroku remote
         | 
| @@ -118,7 +122,7 @@ Yes. | |
| 118 122 |  | 
| 119 123 | 
             
            ### Pretend Mode with a non-Heroku remote
         | 
| 120 124 |  | 
| 121 | 
            -
                $ kumade  | 
| 125 | 
            +
                $ kumade origin -p
         | 
| 122 126 | 
             
                ==> In Pretend Mode
         | 
| 123 127 | 
             
                ==> Deploying to: origin
         | 
| 124 128 | 
             
                ==> ! Cannot deploy: "origin" remote does not point to Heroku
         | 
| @@ -131,6 +135,20 @@ Tested against: | |
| 131 135 | 
             
            * MRI 1.9.2
         | 
| 132 136 | 
             
            * REE 1.8.7
         | 
| 133 137 |  | 
| 138 | 
            +
            ## Misc Features
         | 
| 139 | 
            +
             | 
| 140 | 
            +
            Want to run a task before bundling your assets on deploy? In your rails app's rake tasks, drop in:
         | 
| 141 | 
            +
             | 
| 142 | 
            +
            ``` ruby
         | 
| 143 | 
            +
            namespace :deploy do
         | 
| 144 | 
            +
              task :assets do
         | 
| 145 | 
            +
                puts "This runs before assets are committed and pushed to the remote"
         | 
| 146 | 
            +
              end
         | 
| 147 | 
            +
            end
         | 
| 148 | 
            +
            ```
         | 
| 149 | 
            +
             | 
| 150 | 
            +
            You can hook in any custom code you want to run there before deploying!
         | 
| 151 | 
            +
             | 
| 134 152 | 
             
            ## What's with the name?
         | 
| 135 153 |  | 
| 136 154 | 
             
            Kumade ([pronunciation here](http://translate.google.com/#ja|en|熊手)) means
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            @extra-timeout @creates-remote
         | 
| 1 | 
            +
            @extra-timeout @creates-remote @disable-bundler
         | 
| 2 2 | 
             
            Feature: Kumade executable
         | 
| 3 3 | 
             
              As a user
         | 
| 4 4 | 
             
              I want to be able to use the kumade executable
         | 
| @@ -7,16 +7,16 @@ Feature: Kumade executable | |
| 7 7 | 
             
              Background:
         | 
| 8 8 | 
             
                Given a directory named "executable"
         | 
| 9 9 | 
             
                And I cd to "executable"
         | 
| 10 | 
            -
                 | 
| 11 | 
            -
                And I  | 
| 12 | 
            -
                And I  | 
| 13 | 
            -
                 | 
| 10 | 
            +
                And I set up the Gemfile with kumade
         | 
| 11 | 
            +
                And I add "jammit" to the Gemfile
         | 
| 12 | 
            +
                And I bundle
         | 
| 13 | 
            +
                When I set up a git repo
         | 
| 14 14 | 
             
                And I create a Heroku remote for "pretend-staging-app" named "pretend-staging"
         | 
| 15 15 | 
             
                And I create a Heroku remote for "app-two" named "staging"
         | 
| 16 16 | 
             
                And I create a non-Heroku remote named "bad-remote"
         | 
| 17 17 |  | 
| 18 18 | 
             
              Scenario: Pretend mode with a Heroku remote
         | 
| 19 | 
            -
                When I run  | 
| 19 | 
            +
                When I run kumade with "pretend-staging -p"
         | 
| 20 20 | 
             
                Then the output should contain "In Pretend Mode"
         | 
| 21 21 | 
             
                And the output should contain:
         | 
| 22 22 | 
             
                  """
         | 
| @@ -24,6 +24,7 @@ Feature: Kumade executable | |
| 24 24 | 
             
                  ==> Packaged assets with Jammit
         | 
| 25 25 | 
             
                           run  git push origin master
         | 
| 26 26 | 
             
                  ==> Pushed master -> origin
         | 
| 27 | 
            +
                           run  git branch deploy
         | 
| 27 28 | 
             
                           run  git push -f pretend-staging deploy:master
         | 
| 28 29 | 
             
                  ==> Force pushed master -> pretend-staging
         | 
| 29 30 | 
             
                  ==> Migrated pretend-staging-app
         | 
| @@ -33,30 +34,53 @@ Feature: Kumade executable | |
| 33 34 | 
             
                But the output should not contain "==> Packaged assets with More"
         | 
| 34 35 |  | 
| 35 36 | 
             
              Scenario: Default environment is staging
         | 
| 36 | 
            -
                When I run  | 
| 37 | 
            +
                When I run kumade with "-p"
         | 
| 37 38 | 
             
                Then the output should contain "==> Deployed to: staging"
         | 
| 38 39 |  | 
| 39 40 | 
             
              Scenario: Can deploy to arbitrary environment
         | 
| 40 | 
            -
                When I run  | 
| 41 | 
            +
                When I run kumade with "bamboo"
         | 
| 41 42 | 
             
                Then the output should contain "==> Deploying to: bamboo"
         | 
| 42 | 
            -
                 | 
| 43 | 
            +
                And the output should match /Cannot deploy: /
         | 
| 43 44 |  | 
| 44 45 | 
             
              Scenario: Deploying to a non-Heroku remote fails
         | 
| 45 | 
            -
                When I run  | 
| 46 | 
            +
                When I run kumade with "bad-remote"
         | 
| 46 47 | 
             
                Then the output should match /==> ! Cannot deploy: "bad-remote" remote does not point to Heroku/
         | 
| 47 48 |  | 
| 48 49 | 
             
              Scenario: Deploy from another branch
         | 
| 49 50 | 
             
                When I run `git checkout -b new_branch`
         | 
| 50 | 
            -
                 | 
| 51 | 
            +
                And I run kumade with "pretend-staging -p"
         | 
| 51 52 | 
             
                Then the output should contain:
         | 
| 52 53 | 
             
                  """
         | 
| 53 54 | 
             
                  ==> Git repo is clean
         | 
| 54 55 | 
             
                  ==> Packaged assets with Jammit
         | 
| 55 56 | 
             
                           run  git push origin new_branch
         | 
| 56 57 | 
             
                  ==> Pushed new_branch -> origin
         | 
| 58 | 
            +
                           run  git branch deploy
         | 
| 57 59 | 
             
                           run  git push -f pretend-staging deploy:master
         | 
| 58 60 | 
             
                  ==> Force pushed new_branch -> pretend-staging
         | 
| 59 61 | 
             
                  ==> Migrated pretend-staging-app
         | 
| 60 62 | 
             
                           run  git checkout new_branch && git branch -D deploy
         | 
| 61 63 | 
             
                  ==> Deployed to: pretend-staging
         | 
| 62 64 | 
             
                  """
         | 
| 65 | 
            +
             | 
| 66 | 
            +
              Scenario: Git is clean if there are untracked files
         | 
| 67 | 
            +
                Given I write to "new-file" with:
         | 
| 68 | 
            +
                  """
         | 
| 69 | 
            +
                  clean
         | 
| 70 | 
            +
                  """
         | 
| 71 | 
            +
                When I run kumade with "pretend-staging"
         | 
| 72 | 
            +
                Then the output from "bundle exec kumade pretend-staging" should not contain "==> ! Cannot deploy: repo is not clean"
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              Scenario: Git is not clean if a tracked file is modified
         | 
| 75 | 
            +
                Given I write to "new-file" with:
         | 
| 76 | 
            +
                  """
         | 
| 77 | 
            +
                  clean
         | 
| 78 | 
            +
                  """
         | 
| 79 | 
            +
                And I commit everything in the current repo
         | 
| 80 | 
            +
                When I append to "new-file" with "dirty it up"
         | 
| 81 | 
            +
                And I run kumade with "pretend-staging"
         | 
| 82 | 
            +
                Then the output from "bundle exec kumade pretend-staging" should contain "==> ! Cannot deploy: repo is not clean"
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              Scenario: Jammit packager runs if Jammit is installed
         | 
| 85 | 
            +
                When I run kumade with "pretend-staging"
         | 
| 86 | 
            +
                Then the output from "bundle exec kumade pretend-staging" should contain "==> ! Error: Jammit::MissingConfiguration"
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            @extra-timeout @creates-remote @disable-bundler
         | 
| 2 | 
            +
            Feature: Kumade without jammit
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              Background:
         | 
| 5 | 
            +
                Given a directory named "executable"
         | 
| 6 | 
            +
                And I cd to "executable"
         | 
| 7 | 
            +
                And I set up the Gemfile with kumade
         | 
| 8 | 
            +
                And I bundle
         | 
| 9 | 
            +
                When I set up a git repo
         | 
| 10 | 
            +
                And I create a Heroku remote for "pretend-staging-app" named "pretend-staging"
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              Scenario: Jammit packager does not run if Jammit is not installed
         | 
| 13 | 
            +
                When I run kumade with "pretend-staging"
         | 
| 14 | 
            +
                Then the output should not contain "==> ! Error: Jammit::MissingConfiguration"
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              Scenario: Run custom task if it exists
         | 
| 17 | 
            +
                Given I write to "Rakefile" with:
         | 
| 18 | 
            +
                  """
         | 
| 19 | 
            +
                  namespace :deploy do
         | 
| 20 | 
            +
                    task :assets do
         | 
| 21 | 
            +
                      puts 'Hi!'
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                  """
         | 
| 25 | 
            +
                When I run kumade with "pretend-staging"
         | 
| 26 | 
            +
                Then the output should contain "Running deploy:assets task"
         | 
| 27 | 
            +
                And the output should contain "Hi!"
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              Scenario: Don't run rake task in pretend mode
         | 
| 30 | 
            +
                Given I write to "Rakefile" with:
         | 
| 31 | 
            +
                  """
         | 
| 32 | 
            +
                  namespace :deploy do
         | 
| 33 | 
            +
                    task :assets do
         | 
| 34 | 
            +
                      puts 'Hi!'
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                  """
         | 
| 38 | 
            +
                When I run kumade with "pretend-staging -p"
         | 
| 39 | 
            +
                Then the output should contain "Running deploy:assets task"
         | 
| 40 | 
            +
                And the output should not contain "Hi!"
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            When /^I bundle$/ do
         | 
| 2 | 
            +
              When %{I successfully run `bundle --gemfile=./Gemfile --local || bundle --gemfile=./Gemfile`}
         | 
| 3 | 
            +
            end
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            When /^I rebundle$/ do
         | 
| 6 | 
            +
              steps %{
         | 
| 7 | 
            +
                When I bundle
         | 
| 8 | 
            +
                And I commit everything in the current repo
         | 
| 9 | 
            +
              }
         | 
| 10 | 
            +
            end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            Given /^an empty Gemfile$/ do
         | 
| 13 | 
            +
              When %{I write to "Gemfile" with:}, ""
         | 
| 14 | 
            +
            end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            When /^I set up the Gemfile with kumade$/ do
         | 
| 17 | 
            +
              steps %{
         | 
| 18 | 
            +
                When I write to "Gemfile" with:
         | 
| 19 | 
            +
                  """
         | 
| 20 | 
            +
                  gem 'kumade', :path => '../../..'
         | 
| 21 | 
            +
                  """
         | 
| 22 | 
            +
              }
         | 
| 23 | 
            +
            end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            When /^I add "([^"]+)" to the Gemfile$/ do |gem|
         | 
| 26 | 
            +
              steps %{
         | 
| 27 | 
            +
                When I append to "Gemfile" with:
         | 
| 28 | 
            +
                  """
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  gem '#{gem}'
         | 
| 31 | 
            +
                  """
         | 
| 32 | 
            +
              }
         | 
| 33 | 
            +
            end
         | 
| @@ -1,9 +1,25 @@ | |
| 1 1 | 
             
            When /^I create a Heroku remote for "([^"]*)" named "([^"]*)"$/ do |app_name, remote_name|
         | 
| 2 | 
            -
              When %{I run `git remote add #{remote_name} git@heroku.com:#{app_name}.git`}
         | 
| 2 | 
            +
              When %{I successfully run `git remote add #{remote_name} git@heroku.com:#{app_name}.git`}
         | 
| 3 3 | 
             
            end
         | 
| 4 4 |  | 
| 5 5 | 
             
            When /^I create a non-Heroku remote named "([^"]*)"$/ do |remote_name|
         | 
| 6 | 
            -
              When %{I run `git remote add #{remote_name} git@github.com:gabebw/kumade.git`}
         | 
| 6 | 
            +
              When %{I successfully run `git remote add #{remote_name} git@github.com:gabebw/kumade.git`}
         | 
| 7 | 
            +
            end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            When /^I set up a git repo$/ do
         | 
| 10 | 
            +
              steps %{
         | 
| 11 | 
            +
                When I successfully run `git init`
         | 
| 12 | 
            +
                And I successfully run `touch .gitkeep`
         | 
| 13 | 
            +
                And I successfully run `git add .`
         | 
| 14 | 
            +
                And I successfully run `git commit -am First`
         | 
| 15 | 
            +
              }
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            When /^I commit everything in the current repo$/ do
         | 
| 19 | 
            +
              steps %{
         | 
| 20 | 
            +
                When I successfully run `git add .`
         | 
| 21 | 
            +
                And I successfully run `git commit -am MY_MESSAGE`
         | 
| 22 | 
            +
              }
         | 
| 7 23 | 
             
            end
         | 
| 8 24 |  | 
| 9 25 | 
             
            After("@creates-remote") do
         | 
    
        data/features/support/env.rb
    CHANGED
    
    
    
        data/lib/kumade.rb
    CHANGED
    
    | @@ -1,6 +1,9 @@ | |
| 1 | 
            +
            require 'rake'
         | 
| 1 2 | 
             
            require 'thor'
         | 
| 3 | 
            +
             | 
| 2 4 | 
             
            require 'kumade/deployer'
         | 
| 3 5 | 
             
            require 'kumade/runner'
         | 
| 6 | 
            +
            require 'kumade/railtie'
         | 
| 4 7 |  | 
| 5 8 | 
             
            module Kumade
         | 
| 6 9 | 
             
              def self.app_for(environment)
         | 
| @@ -11,4 +14,16 @@ module Kumade | |
| 11 14 | 
             
                  nil
         | 
| 12 15 | 
             
                end
         | 
| 13 16 | 
             
              end
         | 
| 17 | 
            +
              def self.environments
         | 
| 18 | 
            +
                url_remotes = `git remote`.strip.split("\n").map{|remote| [remote, `git config --get remote.#{remote}.url`.strip] }.select{|remote| remote.last =~ /^git@heroku\.com:(.+)\.git$/}.map{|remote| remote.first}
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def self.on_cedar!(app)
         | 
| 22 | 
            +
                @cedar_apps ||= []
         | 
| 23 | 
            +
                @cedar_apps << app
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def self.cedar?(app)
         | 
| 27 | 
            +
                @cedar_apps.include?(app)
         | 
| 28 | 
            +
              end
         | 
| 14 29 | 
             
            end
         | 
    
        data/lib/kumade/deployer.rb
    CHANGED
    
    | @@ -3,11 +3,12 @@ module Kumade | |
| 3 3 | 
             
                DEPLOY_BRANCH = "deploy"
         | 
| 4 4 | 
             
                attr_reader :environment, :pretending
         | 
| 5 5 |  | 
| 6 | 
            -
                def initialize(environment = 'staging', pretending = false)
         | 
| 6 | 
            +
                def initialize(environment = 'staging', pretending = false, cedar = false)
         | 
| 7 7 | 
             
                  super()
         | 
| 8 8 | 
             
                  @environment = environment
         | 
| 9 9 | 
             
                  @pretending  = pretending
         | 
| 10 10 | 
             
                  @branch      = current_branch
         | 
| 11 | 
            +
                  @cedar       = cedar
         | 
| 11 12 | 
             
                end
         | 
| 12 13 |  | 
| 13 14 | 
             
                def deploy
         | 
| @@ -31,6 +32,9 @@ module Kumade | |
| 31 32 | 
             
                end
         | 
| 32 33 |  | 
| 33 34 | 
             
                def sync_heroku
         | 
| 35 | 
            +
                  unless branch_exist?(DEPLOY_BRANCH)
         | 
| 36 | 
            +
                    run_or_error("git branch deploy", "Failed to create #{DEPLOY_BRANCH}")
         | 
| 37 | 
            +
                  end
         | 
| 34 38 | 
             
                  run_or_error("git push -f #{environment} #{DEPLOY_BRANCH}:master",
         | 
| 35 39 | 
             
                               "Failed to force push #{DEPLOY_BRANCH} -> #{environment}/master")
         | 
| 36 40 | 
             
                  success("Force pushed #{@branch} -> #{environment}")
         | 
| @@ -49,7 +53,7 @@ module Kumade | |
| 49 53 | 
             
                end
         | 
| 50 54 |  | 
| 51 55 | 
             
                def heroku(command, app)
         | 
| 52 | 
            -
                  heroku_command = if  | 
| 56 | 
            +
                  heroku_command = if @cedar
         | 
| 53 57 | 
             
                                     "bundle exec heroku run"
         | 
| 54 58 | 
             
                                   else
         | 
| 55 59 | 
             
                                     "bundle exec heroku"
         | 
| @@ -58,11 +62,6 @@ module Kumade | |
| 58 62 | 
             
                               "Failed to run #{command} on Heroku")
         | 
| 59 63 | 
             
                end
         | 
| 60 64 |  | 
| 61 | 
            -
                def on_cedar?(app)
         | 
| 62 | 
            -
                  selected_stack = run("heroku stack --app '#{app}'", :capture => true).split("\n").grep(/^\*/).first
         | 
| 63 | 
            -
                  selected_stack && selected_stack.include?('cedar')
         | 
| 64 | 
            -
                end
         | 
| 65 | 
            -
             | 
| 66 65 | 
             
                def ensure_clean_git
         | 
| 67 66 | 
             
                  if ! pretending && git_dirty?
         | 
| 68 67 | 
             
                    error("Cannot deploy: repo is not clean.")
         | 
| @@ -74,6 +73,7 @@ module Kumade | |
| 74 73 | 
             
                def package_assets
         | 
| 75 74 | 
             
                  package_with_jammit if jammit_installed?
         | 
| 76 75 | 
             
                  package_with_more if more_installed?
         | 
| 76 | 
            +
                  invoke_custom_task if custom_task?
         | 
| 77 77 | 
             
                end
         | 
| 78 78 |  | 
| 79 79 | 
             
                def package_with_jammit
         | 
| @@ -110,6 +110,11 @@ module Kumade | |
| 110 110 | 
             
                  end
         | 
| 111 111 | 
             
                end
         | 
| 112 112 |  | 
| 113 | 
            +
                def invoke_custom_task
         | 
| 114 | 
            +
                  success "Running deploy:assets task"
         | 
| 115 | 
            +
                  Rake::Task["deploy:assets"].invoke unless pretending
         | 
| 116 | 
            +
                end
         | 
| 117 | 
            +
             | 
| 113 118 | 
             
                def git_add_and_commit_all_assets_in(dir)
         | 
| 114 119 | 
             
                  run_or_error ["git checkout -b #{DEPLOY_BRANCH}", "git add -f #{dir}", "git commit -m 'Compiled assets'"],
         | 
| 115 120 | 
             
                               "Cannot deploy: couldn't commit assets"
         | 
| @@ -147,6 +152,11 @@ module Kumade | |
| 147 152 | 
             
                      end)
         | 
| 148 153 | 
             
                end
         | 
| 149 154 |  | 
| 155 | 
            +
                def custom_task?
         | 
| 156 | 
            +
                  load("Rakefile") if File.exist?("Rakefile")
         | 
| 157 | 
            +
                  Rake::Task.task_defined?("deploy:assets")
         | 
| 158 | 
            +
                end
         | 
| 159 | 
            +
             | 
| 150 160 | 
             
                def git_dirty?
         | 
| 151 161 | 
             
                  `git diff --exit-code`
         | 
| 152 162 | 
             
                  !$?.success?
         | 
| @@ -166,6 +176,13 @@ module Kumade | |
| 166 176 | 
             
                  config[:capture] ? `#{command}` : system("#{command}")
         | 
| 167 177 | 
             
                end
         | 
| 168 178 |  | 
| 179 | 
            +
                def branch_exist?(branch)
         | 
| 180 | 
            +
                    branches = `git branch`
         | 
| 181 | 
            +
                    regex = Regexp.new('[\\n\\s\\*]+' + Regexp.escape(branch.to_s) + '\\n')
         | 
| 182 | 
            +
                    result = ((branches =~ regex) ? true : false)
         | 
| 183 | 
            +
                    return result
         | 
| 184 | 
            +
                end
         | 
| 185 | 
            +
             | 
| 169 186 | 
             
                def error(message)
         | 
| 170 187 | 
             
                  say("==> ! #{message}", :red)
         | 
| 171 188 | 
             
                  exit 1
         | 
    
        data/lib/kumade/runner.rb
    CHANGED
    
    | @@ -19,7 +19,7 @@ module Kumade | |
| 19 19 | 
             
                    @out.puts "==> In Pretend Mode"
         | 
| 20 20 | 
             
                  end
         | 
| 21 21 | 
             
                  @out.puts "==> Deploying to: #{environment}"
         | 
| 22 | 
            -
                  Deployer.new(environment, pretending | 
| 22 | 
            +
                  Deployer.new(environment, pretending?, @options[:cedar]).deploy
         | 
| 23 23 | 
             
                  @out.puts "==> Deployed to: #{environment}"
         | 
| 24 24 | 
             
                end
         | 
| 25 25 |  | 
| @@ -32,6 +32,10 @@ module Kumade | |
| 32 32 | 
             
                      options[:pretend] = p
         | 
| 33 33 | 
             
                    end
         | 
| 34 34 |  | 
| 35 | 
            +
                    opts.on("-c", "--cedar", "Use this if your app is on cedar") do |cedar|
         | 
| 36 | 
            +
                      options[:cedar] = cedar
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
             | 
| 35 39 | 
             
                    opts.on_tail('-v', '--version', 'Show version') do
         | 
| 36 40 | 
             
                      @out.puts "kumade #{Kumade::VERSION}"
         | 
| 37 41 | 
             
                      exit
         | 
    
        data/lib/kumade/version.rb
    CHANGED
    
    
| @@ -15,7 +15,7 @@ describe Kumade::Deployer, "#pre_deploy" do | |
| 15 15 | 
             
                subject.pre_deploy
         | 
| 16 16 | 
             
              end
         | 
| 17 17 |  | 
| 18 | 
            -
              it " | 
| 18 | 
            +
              it "syncs to github" do
         | 
| 19 19 | 
             
                %w(
         | 
| 20 20 | 
             
                  ensure_clean_git
         | 
| 21 21 | 
             
                  package_assets
         | 
| @@ -32,7 +32,6 @@ describe Kumade::Deployer, "#deploy" do | |
| 32 32 | 
             
              let(:remote_name){ 'staging' }
         | 
| 33 33 | 
             
              let(:app_name){ 'kumade-staging' }
         | 
| 34 34 |  | 
| 35 | 
            -
             | 
| 36 35 | 
             
              before do
         | 
| 37 36 | 
             
                subject.stub(:say)
         | 
| 38 37 | 
             
                force_add_heroku_remote(remote_name, app_name)
         | 
| @@ -101,12 +100,28 @@ describe Kumade::Deployer, "#sync_heroku" do | |
| 101 100 | 
             
              let(:environment) { 'my-env' }
         | 
| 102 101 | 
             
              subject { Kumade::Deployer.new(environment) }
         | 
| 103 102 | 
             
              before { subject.stub(:say) }
         | 
| 103 | 
            +
              
         | 
| 104 | 
            +
              context "when deploy branch exists" do
         | 
| 105 | 
            +
                it "should calls `git push -f`" do
         | 
| 106 | 
            +
                  subject.stub(:branch_exist?).with("deploy").and_return(true)
         | 
| 107 | 
            +
                  subject.should_receive(:run).
         | 
| 108 | 
            +
                    with("git push -f #{environment} deploy:master").
         | 
| 109 | 
            +
                    and_return(true)
         | 
| 110 | 
            +
                  subject.sync_heroku
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
              end
         | 
| 104 113 |  | 
| 105 | 
            -
               | 
| 106 | 
            -
                 | 
| 107 | 
            -
                  with(" | 
| 108 | 
            -
                   | 
| 109 | 
            -
             | 
| 114 | 
            +
              context "when deploy branch doesn't exists" do
         | 
| 115 | 
            +
                it "should calls `git branch deploy` and `git push -f`" do
         | 
| 116 | 
            +
                  subject.stub(:branch_exist?).with("deploy").and_return(false)
         | 
| 117 | 
            +
                  subject.should_receive(:run).
         | 
| 118 | 
            +
                    with("git branch deploy").
         | 
| 119 | 
            +
                    and_return(true)
         | 
| 120 | 
            +
                  subject.should_receive(:run).
         | 
| 121 | 
            +
                    with("git push -f #{environment} deploy:master").
         | 
| 122 | 
            +
                    and_return(true)
         | 
| 123 | 
            +
                  subject.sync_heroku
         | 
| 124 | 
            +
                end
         | 
| 110 125 | 
             
              end
         | 
| 111 126 |  | 
| 112 127 | 
             
              context "when syncing to heroku fails" do
         | 
| @@ -115,7 +130,7 @@ describe Kumade::Deployer, "#sync_heroku" do | |
| 115 130 | 
             
                end
         | 
| 116 131 |  | 
| 117 132 | 
             
                it "prints an error" do
         | 
| 118 | 
            -
                  subject.should_receive(:error)
         | 
| 133 | 
            +
                  subject.should_receive(:error).twice
         | 
| 119 134 | 
             
                  subject.sync_heroku
         | 
| 120 135 | 
             
                end
         | 
| 121 136 | 
             
              end
         | 
| @@ -203,6 +218,34 @@ describe Kumade::Deployer, "#package_assets" do | |
| 203 218 | 
             
                  subject.package_assets
         | 
| 204 219 | 
             
                end
         | 
| 205 220 | 
             
              end
         | 
| 221 | 
            +
             | 
| 222 | 
            +
              context "with custom rake task installed" do
         | 
| 223 | 
            +
                before do
         | 
| 224 | 
            +
                  subject.stub(:jammit_installed?  => false,
         | 
| 225 | 
            +
                               :more_installed?    => false,
         | 
| 226 | 
            +
                               :invoke_custom_task => nil,
         | 
| 227 | 
            +
                               :custom_task?       => true)
         | 
| 228 | 
            +
                end
         | 
| 229 | 
            +
             | 
| 230 | 
            +
                it "invokes custom task" do
         | 
| 231 | 
            +
                  subject.should_receive(:invoke_custom_task)
         | 
| 232 | 
            +
                  subject.package_assets
         | 
| 233 | 
            +
                end
         | 
| 234 | 
            +
              end
         | 
| 235 | 
            +
             | 
| 236 | 
            +
              context "with custom rake task not installed" do
         | 
| 237 | 
            +
                before do
         | 
| 238 | 
            +
                  subject.stub(:jammit_installed?  => false,
         | 
| 239 | 
            +
                               :more_installed?    => false,
         | 
| 240 | 
            +
                               :invoke_custom_task => nil,
         | 
| 241 | 
            +
                               :custom_task?       => false)
         | 
| 242 | 
            +
                end
         | 
| 243 | 
            +
             | 
| 244 | 
            +
                it "does not invoke custom task" do
         | 
| 245 | 
            +
                  subject.should_not_receive(:invoke_custom_task)
         | 
| 246 | 
            +
                  subject.package_assets
         | 
| 247 | 
            +
                end
         | 
| 248 | 
            +
              end
         | 
| 206 249 | 
             
            end
         | 
| 207 250 |  | 
| 208 251 | 
             
            describe Kumade::Deployer, "#package_with_jammit" do
         | 
| @@ -246,6 +289,20 @@ describe Kumade::Deployer, "#package_with_jammit" do | |
| 246 289 | 
             
              end
         | 
| 247 290 | 
             
            end
         | 
| 248 291 |  | 
| 292 | 
            +
            describe Kumade::Deployer, "#invoke_custom_task" do
         | 
| 293 | 
            +
              before do
         | 
| 294 | 
            +
                Rake::Task.stub(:[] => task)
         | 
| 295 | 
            +
              end
         | 
| 296 | 
            +
             | 
| 297 | 
            +
              let(:task) { stub('task', :invoke => nil) }
         | 
| 298 | 
            +
             | 
| 299 | 
            +
              it "calls deploy task" do
         | 
| 300 | 
            +
                Rake::Task.should_receive(:[]).with("deploy:assets")
         | 
| 301 | 
            +
                task.should_receive(:invoke)
         | 
| 302 | 
            +
                subject.invoke_custom_task
         | 
| 303 | 
            +
              end
         | 
| 304 | 
            +
            end
         | 
| 305 | 
            +
             | 
| 249 306 | 
             
            describe Kumade::Deployer, "#package_with_more" do
         | 
| 250 307 | 
             
              before do
         | 
| 251 308 | 
             
                subject.stub(:git_add_and_commit_all_assets_in => true,
         | 
| @@ -388,6 +445,25 @@ describe Kumade::Deployer, "#more_installed?" do | |
| 388 445 | 
             
              end
         | 
| 389 446 | 
             
            end
         | 
| 390 447 |  | 
| 448 | 
            +
            describe Kumade::Deployer, "#custom_task?" do
         | 
| 449 | 
            +
              before do
         | 
| 450 | 
            +
                Rake::Task.clear
         | 
| 451 | 
            +
              end
         | 
| 452 | 
            +
             | 
| 453 | 
            +
              it "returns true if it task found" do
         | 
| 454 | 
            +
                namespace :deploy do
         | 
| 455 | 
            +
                  task :assets do
         | 
| 456 | 
            +
             | 
| 457 | 
            +
                  end
         | 
| 458 | 
            +
                end
         | 
| 459 | 
            +
                Kumade::Deployer.new.custom_task?.should be_true
         | 
| 460 | 
            +
              end
         | 
| 461 | 
            +
             | 
| 462 | 
            +
              it "returns false if task not found" do
         | 
| 463 | 
            +
                Kumade::Deployer.new.custom_task?.should be_false
         | 
| 464 | 
            +
              end
         | 
| 465 | 
            +
            end
         | 
| 466 | 
            +
             | 
| 391 467 | 
             
            describe Kumade::Deployer, "#heroku_migrate" do
         | 
| 392 468 | 
             
              let(:environment){ 'staging' }
         | 
| 393 469 | 
             
              let(:app_name){ 'sushi' }
         | 
| @@ -477,7 +553,8 @@ describe Kumade::Deployer, "#heroku" do | |
| 477 553 | 
             
              let(:app_name){ 'sushi' }
         | 
| 478 554 |  | 
| 479 555 | 
             
              context "when on Cedar" do
         | 
| 480 | 
            -
                 | 
| 556 | 
            +
                subject { Kumade::Deployer.new('staging', false, cedar = true) }
         | 
| 557 | 
            +
             | 
| 481 558 | 
             
                it "runs commands with `run`" do
         | 
| 482 559 | 
             
                  subject.should_receive(:run_or_error).with("bundle exec heroku run rake --app #{app_name}", //)
         | 
| 483 560 | 
             
                  subject.heroku("rake", app_name)
         | 
| @@ -485,7 +562,8 @@ describe Kumade::Deployer, "#heroku" do | |
| 485 562 | 
             
              end
         | 
| 486 563 |  | 
| 487 564 | 
             
              context "when not on Cedar" do
         | 
| 488 | 
            -
                 | 
| 565 | 
            +
                subject { Kumade::Deployer.new('staging', false, cedar = false) }
         | 
| 566 | 
            +
             | 
| 489 567 | 
             
                it "runs commands without `run`" do
         | 
| 490 568 | 
             
                  subject.should_receive(:run_or_error).with("bundle exec heroku rake --app #{app_name}", //)
         | 
| 491 569 | 
             
                  subject.heroku("rake", app_name)
         | 
    
        data/spec/kumade/runner_spec.rb
    CHANGED
    
    | @@ -25,4 +25,15 @@ describe Kumade::Runner do | |
| 25 25 |  | 
| 26 26 | 
             
                subject.run([environment], out)
         | 
| 27 27 | 
             
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              %w(-c --cedar).each do |cedar_arg|
         | 
| 30 | 
            +
                it "uses cedar when run with #{cedar_arg}" do
         | 
| 31 | 
            +
                  deployer = double("deployer").as_null_object
         | 
| 32 | 
            +
                  Kumade::Deployer.should_receive(:new).
         | 
| 33 | 
            +
                    with(anything, anything, true).
         | 
| 34 | 
            +
                    and_return(deployer)
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  subject.run([environment, cedar_arg], out)
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
              end
         | 
| 28 39 | 
             
            end
         | 
    
        data/spec/kumade_spec.rb
    CHANGED
    
    | @@ -27,3 +27,23 @@ describe Kumade, ".app_for" do | |
| 27 27 | 
             
                Kumade.app_for(not_a_heroku_env).should be_nil
         | 
| 28 28 | 
             
              end
         | 
| 29 29 | 
             
            end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            describe Kumade, ".environments" do
         | 
| 32 | 
            +
              let(:environment){ 'staging' }
         | 
| 33 | 
            +
              let(:app_name){ 'staging_test' }
         | 
| 34 | 
            +
              let(:not_a_heroku_env){ 'fake_heroku' }
         | 
| 35 | 
            +
              let(:not_a_heroku_url){ 'git@github.com:gabebw/kumade.git' }
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              before do
         | 
| 38 | 
            +
                force_add_heroku_remote(environment, app_name)
         | 
| 39 | 
            +
                `git remote add #{not_a_heroku_env} #{not_a_heroku_url}`
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
              after do
         | 
| 42 | 
            +
                remove_remote(environment)
         | 
| 43 | 
            +
                remove_remote(not_a_heroku_env)
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              it "should return all environments" do
         | 
| 47 | 
            +
                Kumade.environments.should == ["staging"]
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,145 +1,103 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: kumade
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.2.1
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 | 
            -
              segments: 
         | 
| 7 | 
            -
              - 0
         | 
| 8 | 
            -
              - 2
         | 
| 9 | 
            -
              - 0
         | 
| 10 | 
            -
              version: 0.2.0
         | 
| 11 6 | 
             
            platform: ruby
         | 
| 12 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 13 8 | 
             
            - Gabe Berke-Williams
         | 
| 14 9 | 
             
            - thoughtbot
         | 
| 15 10 | 
             
            autorequire: 
         | 
| 16 11 | 
             
            bindir: bin
         | 
| 17 12 | 
             
            cert_chain: []
         | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
            dependencies: 
         | 
| 22 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 13 | 
            +
            date: 2011-08-19 00:00:00.000000000Z
         | 
| 14 | 
            +
            dependencies:
         | 
| 15 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 23 16 | 
             
              name: heroku
         | 
| 24 | 
            -
               | 
| 25 | 
            -
              type: :runtime
         | 
| 26 | 
            -
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 17 | 
            +
              requirement: &2152636140 !ruby/object:Gem::Requirement
         | 
| 27 18 | 
             
                none: false
         | 
| 28 | 
            -
                requirements: | 
| 19 | 
            +
                requirements:
         | 
| 29 20 | 
             
                - - ~>
         | 
| 30 | 
            -
                  - !ruby/object:Gem::Version | 
| 31 | 
            -
                     | 
| 32 | 
            -
                    segments: 
         | 
| 33 | 
            -
                    - 2
         | 
| 34 | 
            -
                    - 0
         | 
| 35 | 
            -
                    version: "2.0"
         | 
| 36 | 
            -
              version_requirements: *id001
         | 
| 37 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 38 | 
            -
              name: thor
         | 
| 39 | 
            -
              prerelease: false
         | 
| 21 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            +
                    version: '2.0'
         | 
| 40 23 | 
             
              type: :runtime
         | 
| 41 | 
            -
               | 
| 24 | 
            +
              prerelease: false
         | 
| 25 | 
            +
              version_requirements: *2152636140
         | 
| 26 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 27 | 
            +
              name: thor
         | 
| 28 | 
            +
              requirement: &2152635640 !ruby/object:Gem::Requirement
         | 
| 42 29 | 
             
                none: false
         | 
| 43 | 
            -
                requirements: | 
| 30 | 
            +
                requirements:
         | 
| 44 31 | 
             
                - - ~>
         | 
| 45 | 
            -
                  - !ruby/object:Gem::Version | 
| 46 | 
            -
                     | 
| 47 | 
            -
             | 
| 48 | 
            -
                    - 0
         | 
| 49 | 
            -
                    - 14
         | 
| 50 | 
            -
                    version: "0.14"
         | 
| 51 | 
            -
              version_requirements: *id002
         | 
| 52 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 53 | 
            -
              name: rake
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0.14'
         | 
| 34 | 
            +
              type: :runtime
         | 
| 54 35 | 
             
              prerelease: false
         | 
| 55 | 
            -
               | 
| 56 | 
            -
             | 
| 36 | 
            +
              version_requirements: *2152635640
         | 
| 37 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 38 | 
            +
              name: rake
         | 
| 39 | 
            +
              requirement: &2152635180 !ruby/object:Gem::Requirement
         | 
| 57 40 | 
             
                none: false
         | 
| 58 | 
            -
                requirements: | 
| 41 | 
            +
                requirements:
         | 
| 59 42 | 
             
                - - ~>
         | 
| 60 | 
            -
                  - !ruby/object:Gem::Version | 
| 61 | 
            -
                    hash: 49
         | 
| 62 | 
            -
                    segments: 
         | 
| 63 | 
            -
                    - 0
         | 
| 64 | 
            -
                    - 8
         | 
| 65 | 
            -
                    - 7
         | 
| 43 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 66 44 | 
             
                    version: 0.8.7
         | 
| 67 | 
            -
              version_requirements: *id003
         | 
| 68 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 69 | 
            -
              name: rspec
         | 
| 70 | 
            -
              prerelease: false
         | 
| 71 45 | 
             
              type: :development
         | 
| 72 | 
            -
               | 
| 46 | 
            +
              prerelease: false
         | 
| 47 | 
            +
              version_requirements: *2152635180
         | 
| 48 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 49 | 
            +
              name: rspec
         | 
| 50 | 
            +
              requirement: &2152634720 !ruby/object:Gem::Requirement
         | 
| 73 51 | 
             
                none: false
         | 
| 74 | 
            -
                requirements: | 
| 52 | 
            +
                requirements:
         | 
| 75 53 | 
             
                - - ~>
         | 
| 76 | 
            -
                  - !ruby/object:Gem::Version | 
| 77 | 
            -
                    hash: 23
         | 
| 78 | 
            -
                    segments: 
         | 
| 79 | 
            -
                    - 2
         | 
| 80 | 
            -
                    - 6
         | 
| 81 | 
            -
                    - 0
         | 
| 54 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 55 | 
             
                    version: 2.6.0
         | 
| 83 | 
            -
              version_requirements: *id004
         | 
| 84 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 85 | 
            -
              name: cucumber
         | 
| 86 | 
            -
              prerelease: false
         | 
| 87 56 | 
             
              type: :development
         | 
| 88 | 
            -
               | 
| 57 | 
            +
              prerelease: false
         | 
| 58 | 
            +
              version_requirements: *2152634720
         | 
| 59 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 60 | 
            +
              name: cucumber
         | 
| 61 | 
            +
              requirement: &2152634260 !ruby/object:Gem::Requirement
         | 
| 89 62 | 
             
                none: false
         | 
| 90 | 
            -
                requirements: | 
| 63 | 
            +
                requirements:
         | 
| 91 64 | 
             
                - - ~>
         | 
| 92 | 
            -
                  - !ruby/object:Gem::Version | 
| 93 | 
            -
                    hash: 19
         | 
| 94 | 
            -
                    segments: 
         | 
| 95 | 
            -
                    - 1
         | 
| 96 | 
            -
                    - 0
         | 
| 97 | 
            -
                    - 2
         | 
| 65 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 98 66 | 
             
                    version: 1.0.2
         | 
| 99 | 
            -
              version_requirements: *id005
         | 
| 100 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 101 | 
            -
              name: aruba
         | 
| 102 | 
            -
              prerelease: false
         | 
| 103 67 | 
             
              type: :development
         | 
| 104 | 
            -
               | 
| 68 | 
            +
              prerelease: false
         | 
| 69 | 
            +
              version_requirements: *2152634260
         | 
| 70 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 71 | 
            +
              name: aruba
         | 
| 72 | 
            +
              requirement: &2152633800 !ruby/object:Gem::Requirement
         | 
| 105 73 | 
             
                none: false
         | 
| 106 | 
            -
                requirements: | 
| 74 | 
            +
                requirements:
         | 
| 107 75 | 
             
                - - ~>
         | 
| 108 | 
            -
                  - !ruby/object:Gem::Version | 
| 109 | 
            -
                    hash: 9
         | 
| 110 | 
            -
                    segments: 
         | 
| 111 | 
            -
                    - 0
         | 
| 112 | 
            -
                    - 4
         | 
| 113 | 
            -
                    - 3
         | 
| 76 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 114 77 | 
             
                    version: 0.4.3
         | 
| 115 | 
            -
              version_requirements: *id006
         | 
| 116 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 117 | 
            -
              name: jammit
         | 
| 118 | 
            -
              prerelease: false
         | 
| 119 78 | 
             
              type: :development
         | 
| 120 | 
            -
               | 
| 79 | 
            +
              prerelease: false
         | 
| 80 | 
            +
              version_requirements: *2152633800
         | 
| 81 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 82 | 
            +
              name: jammit
         | 
| 83 | 
            +
              requirement: &2152633340 !ruby/object:Gem::Requirement
         | 
| 121 84 | 
             
                none: false
         | 
| 122 | 
            -
                requirements: | 
| 85 | 
            +
                requirements:
         | 
| 123 86 | 
             
                - - ~>
         | 
| 124 | 
            -
                  - !ruby/object:Gem::Version | 
| 125 | 
            -
                    hash: 1
         | 
| 126 | 
            -
                    segments: 
         | 
| 127 | 
            -
                    - 0
         | 
| 128 | 
            -
                    - 6
         | 
| 129 | 
            -
                    - 3
         | 
| 87 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 130 88 | 
             
                    version: 0.6.3
         | 
| 131 | 
            -
               | 
| 89 | 
            +
              type: :development
         | 
| 90 | 
            +
              prerelease: false
         | 
| 91 | 
            +
              version_requirements: *2152633340
         | 
| 132 92 | 
             
            description: Simple rake tasks for deploying to Heroku
         | 
| 133 | 
            -
            email: | 
| 93 | 
            +
            email:
         | 
| 134 94 | 
             
            - gabe@thoughtbot.com
         | 
| 135 95 | 
             
            - support@thoughtbot.com
         | 
| 136 | 
            -
            executables: | 
| 96 | 
            +
            executables:
         | 
| 137 97 | 
             
            - kumade
         | 
| 138 98 | 
             
            extensions: []
         | 
| 139 | 
            -
             | 
| 140 99 | 
             
            extra_rdoc_files: []
         | 
| 141 | 
            -
             | 
| 142 | 
            -
            files: 
         | 
| 100 | 
            +
            files:
         | 
| 143 101 | 
             
            - .gitignore
         | 
| 144 102 | 
             
            - .travis.yml
         | 
| 145 103 | 
             
            - Gemfile
         | 
| @@ -148,56 +106,60 @@ files: | |
| 148 106 | 
             
            - Rakefile
         | 
| 149 107 | 
             
            - bin/kumade
         | 
| 150 108 | 
             
            - features/kumade_executable.feature
         | 
| 109 | 
            +
            - features/kumade_without_jammit.feature
         | 
| 110 | 
            +
            - features/step_definitions/bundler_steps.rb
         | 
| 151 111 | 
             
            - features/step_definitions/dependency_steps.rb
         | 
| 152 112 | 
             
            - features/step_definitions/git_steps.rb
         | 
| 113 | 
            +
            - features/step_definitions/kumade_steps.rb
         | 
| 153 114 | 
             
            - features/support/env.rb
         | 
| 154 115 | 
             
            - kumade.gemspec
         | 
| 155 116 | 
             
            - lib/kumade.rb
         | 
| 156 117 | 
             
            - lib/kumade/deployer.rb
         | 
| 118 | 
            +
            - lib/kumade/railtie.rb
         | 
| 157 119 | 
             
            - lib/kumade/runner.rb
         | 
| 158 120 | 
             
            - lib/kumade/version.rb
         | 
| 121 | 
            +
            - lib/tasks/deploy.rake
         | 
| 159 122 | 
             
            - spec/kumade/deployer_spec.rb
         | 
| 160 123 | 
             
            - spec/kumade/runner_spec.rb
         | 
| 161 124 | 
             
            - spec/kumade_spec.rb
         | 
| 162 125 | 
             
            - spec/spec_helper.rb
         | 
| 163 | 
            -
             | 
| 164 | 
            -
            homepage: ""
         | 
| 126 | 
            +
            homepage: ''
         | 
| 165 127 | 
             
            licenses: []
         | 
| 166 | 
            -
             | 
| 167 128 | 
             
            post_install_message: 
         | 
| 168 129 | 
             
            rdoc_options: []
         | 
| 169 | 
            -
             | 
| 170 | 
            -
            require_paths: 
         | 
| 130 | 
            +
            require_paths:
         | 
| 171 131 | 
             
            - lib
         | 
| 172 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 132 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 173 133 | 
             
              none: false
         | 
| 174 | 
            -
              requirements: | 
| 175 | 
            -
              - -  | 
| 176 | 
            -
                - !ruby/object:Gem::Version | 
| 177 | 
            -
                   | 
| 178 | 
            -
                  segments: | 
| 134 | 
            +
              requirements:
         | 
| 135 | 
            +
              - - ! '>='
         | 
| 136 | 
            +
                - !ruby/object:Gem::Version
         | 
| 137 | 
            +
                  version: '0'
         | 
| 138 | 
            +
                  segments:
         | 
| 179 139 | 
             
                  - 0
         | 
| 180 | 
            -
                   | 
| 181 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement | 
| 140 | 
            +
                  hash: -616977314755429055
         | 
| 141 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 182 142 | 
             
              none: false
         | 
| 183 | 
            -
              requirements: | 
| 184 | 
            -
              - -  | 
| 185 | 
            -
                - !ruby/object:Gem::Version | 
| 186 | 
            -
                   | 
| 187 | 
            -
                  segments: | 
| 143 | 
            +
              requirements:
         | 
| 144 | 
            +
              - - ! '>='
         | 
| 145 | 
            +
                - !ruby/object:Gem::Version
         | 
| 146 | 
            +
                  version: '0'
         | 
| 147 | 
            +
                  segments:
         | 
| 188 148 | 
             
                  - 0
         | 
| 189 | 
            -
                   | 
| 149 | 
            +
                  hash: -616977314755429055
         | 
| 190 150 | 
             
            requirements: []
         | 
| 191 | 
            -
             | 
| 192 151 | 
             
            rubyforge_project: 
         | 
| 193 | 
            -
            rubygems_version: 1.6 | 
| 152 | 
            +
            rubygems_version: 1.8.6
         | 
| 194 153 | 
             
            signing_key: 
         | 
| 195 154 | 
             
            specification_version: 3
         | 
| 196 155 | 
             
            summary: Simple rake tasks for deploying to Heroku
         | 
| 197 | 
            -
            test_files: | 
| 156 | 
            +
            test_files:
         | 
| 198 157 | 
             
            - features/kumade_executable.feature
         | 
| 158 | 
            +
            - features/kumade_without_jammit.feature
         | 
| 159 | 
            +
            - features/step_definitions/bundler_steps.rb
         | 
| 199 160 | 
             
            - features/step_definitions/dependency_steps.rb
         | 
| 200 161 | 
             
            - features/step_definitions/git_steps.rb
         | 
| 162 | 
            +
            - features/step_definitions/kumade_steps.rb
         | 
| 201 163 | 
             
            - features/support/env.rb
         | 
| 202 164 | 
             
            - spec/kumade/deployer_spec.rb
         | 
| 203 165 | 
             
            - spec/kumade/runner_spec.rb
         |