git-pivotal 0.2.3 → 0.8.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.
- data/.gitignore +2 -0
- data/CHANGELOG +9 -1
- data/Rakefile +23 -10
- data/VERSION +1 -1
- data/bin/git-bug +0 -1
- data/bin/git-chore +0 -1
- data/bin/git-feature +0 -1
- data/bin/git-finish +0 -1
- data/bin/git-info +7 -0
- data/bin/git-pick +0 -1
- data/features/bug.feature +9 -0
- data/features/chore.feature +22 -0
- data/features/feature.feature +37 -0
- data/features/finish.feature +79 -0
- data/features/info.feature +39 -0
- data/features/step_definitions/steps.rb +18 -0
- data/features/support/env.rb +5 -0
- data/features/support/git-pivotal.rb +47 -0
- data/features/test_repo/readme +1 -0
- data/features/test_repo/working.git/COMMIT_EDITMSG +1 -0
- data/features/test_repo/working.git/HEAD +1 -0
- data/features/test_repo/working.git/config +8 -0
- data/features/test_repo/working.git/description +1 -0
- data/features/test_repo/working.git/hooks/applypatch-msg.sample +15 -0
- data/features/test_repo/working.git/hooks/commit-msg.sample +24 -0
- data/features/test_repo/working.git/hooks/post-commit.sample +8 -0
- data/features/test_repo/working.git/hooks/post-receive.sample +15 -0
- data/features/test_repo/working.git/hooks/post-update.sample +8 -0
- data/features/test_repo/working.git/hooks/pre-applypatch.sample +14 -0
- data/features/test_repo/working.git/hooks/pre-commit.sample +46 -0
- data/features/test_repo/working.git/hooks/pre-rebase.sample +169 -0
- data/features/test_repo/working.git/hooks/prepare-commit-msg.sample +36 -0
- data/features/test_repo/working.git/hooks/update.sample +128 -0
- data/features/test_repo/working.git/index +0 -0
- data/features/test_repo/working.git/info/exclude +6 -0
- data/features/test_repo/working.git/logs/HEAD +1 -0
- data/features/test_repo/working.git/logs/refs/heads/master +1 -0
- data/features/test_repo/working.git/objects/0c/6f7b1384910d1a2f137590095f008a06c7e00c +0 -0
- data/features/test_repo/working.git/objects/10/ecf2b7ce989f01f3f7266e712b48d9275f2635 +0 -0
- data/features/test_repo/working.git/objects/a5/71d56305df09fb060f6ccb730b46080d305beb +0 -0
- data/features/test_repo/working.git/refs/heads/master +1 -0
- data/git-pivotal.gemspec +49 -38
- data/lib/commands/base.rb +19 -9
- data/lib/commands/finish.rb +12 -9
- data/lib/commands/info.rb +31 -0
- data/lib/commands/pick.rb +26 -22
- data/lib/git-pivotal.rb +9 -0
- data/readme.markdown +13 -0
- data/spec/commands/base_spec.rb +20 -1
- data/spec/commands/bug_spec.rb +0 -1
- data/spec/commands/chore_spec.rb +0 -1
- data/spec/commands/feature_spec.rb +0 -1
- data/spec/commands/finish_spec.rb +1 -2
- data/spec/spec_helper.rb +4 -8
- metadata +61 -52
- data/lib/pivotal/api.rb +0 -17
- data/lib/pivotal/associations.rb +0 -17
- data/lib/pivotal/attributes.rb +0 -25
- data/lib/pivotal/base.rb +0 -73
- data/lib/pivotal/collection.rb +0 -63
- data/lib/pivotal/project.rb +0 -14
- data/lib/pivotal/story.rb +0 -44
- data/lib/pivotal.rb +0 -8
- data/spec/pivotal/api_spec.rb +0 -18
- data/spec/pivotal/associations_spec.rb +0 -13
- data/spec/pivotal/attributes_spec.rb +0 -31
- data/spec/pivotal/base_spec.rb +0 -77
- data/spec/pivotal/collection_spec.rb +0 -25
- data/spec/pivotal/project_spec.rb +0 -34
- data/spec/pivotal/story_spec.rb +0 -113
- data/spec/spec.opts +0 -1
    
        data/lib/commands/pick.rb
    CHANGED
    
    | @@ -2,57 +2,61 @@ require 'commands/base' | |
| 2 2 |  | 
| 3 3 | 
             
            module Commands
         | 
| 4 4 | 
             
              class Pick < Base
         | 
| 5 | 
            -
             | 
| 5 | 
            +
             | 
| 6 6 | 
             
                def type
         | 
| 7 7 | 
             
                  raise Error("must define in subclass")
         | 
| 8 8 | 
             
                end
         | 
| 9 | 
            -
             | 
| 9 | 
            +
             | 
| 10 10 | 
             
                def plural_type
         | 
| 11 11 | 
             
                  raise Error("must define in subclass")
         | 
| 12 12 | 
             
                end
         | 
| 13 | 
            -
             | 
| 13 | 
            +
             | 
| 14 14 | 
             
                def branch_suffix
         | 
| 15 15 | 
             
                  raise Error("must define in subclass")
         | 
| 16 16 | 
             
                end
         | 
| 17 | 
            -
             | 
| 17 | 
            +
             | 
| 18 18 | 
             
                def run!
         | 
| 19 | 
            -
                  super
         | 
| 19 | 
            +
                  response = super
         | 
| 20 | 
            +
                  return response if response > 0
         | 
| 20 21 |  | 
| 21 22 | 
             
                  msg = "Retrieving latest #{plural_type} from Pivotal Tracker"
         | 
| 22 23 | 
             
                  if options[:only_mine]
         | 
| 23 24 | 
             
                    msg += " for #{options[:full_name]}"
         | 
| 24 25 | 
             
                  end
         | 
| 25 26 | 
             
                  put "#{msg}..."
         | 
| 26 | 
            -
             | 
| 27 | 
            +
             | 
| 27 28 | 
             
                  unless story
         | 
| 28 29 | 
             
                    put "No #{plural_type} available!"
         | 
| 29 30 | 
             
                    return 0
         | 
| 30 31 | 
             
                  end
         | 
| 31 | 
            -
             | 
| 32 | 
            +
             | 
| 32 33 | 
             
                  put "Story: #{story.name}"
         | 
| 33 34 | 
             
                  put "URL:   #{story.url}"
         | 
| 34 35 |  | 
| 35 36 | 
             
                  put "Updating #{type} status in Pivotal Tracker..."
         | 
| 36 | 
            -
                  if story. | 
| 37 | 
            -
             | 
| 38 | 
            -
                     | 
| 39 | 
            -
                    unless options[:quiet]
         | 
| 40 | 
            -
                      put "Enter branch name (will be prepended by #{story.id}) [#{ | 
| 41 | 
            -
                       | 
| 42 | 
            -
                  
         | 
| 43 | 
            -
                      suffix = "feature" if suffix == ""
         | 
| 37 | 
            +
                  if story.update(:owned_by => options[:full_name], :current_state => :started)
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    suffix_or_prefix = ""
         | 
| 40 | 
            +
                    unless options[:quiet] || options[:defaults]
         | 
| 41 | 
            +
                      put "Enter branch name (will be #{options[:append_name] ? 'appended' : 'prepended'} by #{story.id}) [#{suffix_or_prefix}]: ", false
         | 
| 42 | 
            +
                      suffix_or_prefix = input.gets.chomp
         | 
| 44 43 | 
             
                    end
         | 
| 44 | 
            +
                    suffix_or_prefix = branch_suffix if suffix_or_prefix == ""
         | 
| 45 45 |  | 
| 46 | 
            -
                     | 
| 46 | 
            +
                    if options[:append_name]
         | 
| 47 | 
            +
                      branch = "#{suffix_or_prefix}-#{story.id}"
         | 
| 48 | 
            +
                    else
         | 
| 49 | 
            +
                      branch = "#{story.id}-#{suffix_or_prefix}"
         | 
| 50 | 
            +
                    end
         | 
| 47 51 | 
             
                    if get("git branch").match(branch).nil?
         | 
| 48 | 
            -
                      put " | 
| 52 | 
            +
                      put "Switched to a new branch '#{branch}'"
         | 
| 49 53 | 
             
                      sys "git checkout -b #{branch}"
         | 
| 50 54 | 
             
                    end
         | 
| 51 | 
            -
             | 
| 55 | 
            +
             | 
| 52 56 | 
             
                    return 0
         | 
| 53 57 | 
             
                  else
         | 
| 54 58 | 
             
                    put "Unable to mark #{type} as started"
         | 
| 55 | 
            -
             | 
| 59 | 
            +
             | 
| 56 60 | 
             
                    return 1
         | 
| 57 61 | 
             
                  end
         | 
| 58 62 | 
             
                end
         | 
| @@ -61,10 +65,10 @@ module Commands | |
| 61 65 |  | 
| 62 66 | 
             
                def story
         | 
| 63 67 | 
             
                  return @story if @story
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                  conditions = { :story_type => type, :current_state =>  | 
| 68 | 
            +
             | 
| 69 | 
            +
                  conditions = { :story_type => type, :current_state => "unstarted", :limit => 1, :offset => 0 }
         | 
| 66 70 | 
             
                  conditions[:owned_by] = options[:full_name] if options[:only_mine]
         | 
| 67 | 
            -
                  @story = project.stories. | 
| 71 | 
            +
                  @story = project.stories.all(conditions).first
         | 
| 68 72 | 
             
                end
         | 
| 69 73 | 
             
              end
         | 
| 70 74 | 
             
            end
         | 
    
        data/lib/git-pivotal.rb
    ADDED
    
    | @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            $:.unshift(File.dirname(__FILE__))
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require File.join('commands', 'base')
         | 
| 4 | 
            +
            require File.join('commands', 'pick')
         | 
| 5 | 
            +
            require File.join('commands', 'feature')
         | 
| 6 | 
            +
            require File.join('commands', 'bug')
         | 
| 7 | 
            +
            require File.join('commands', 'chore')
         | 
| 8 | 
            +
            require File.join('commands', 'finish')
         | 
| 9 | 
            +
            require File.join('commands', 'info')
         | 
    
        data/readme.markdown
    CHANGED
    
    | @@ -27,6 +27,15 @@ When on a feature branch, this command will close the associated story in Pivota | |
| 27 27 | 
             
                Removing 1234567-testing branch
         | 
| 28 28 | 
             
                4 git-pivotal:master %
         | 
| 29 29 |  | 
| 30 | 
            +
            ###Git Info
         | 
| 31 | 
            +
            When on a feature/bug/chore branch, this command will display the story information as recorded in Pivotal Tracker.
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                5 git-pivotal:1234567-testing % git info
         | 
| 34 | 
            +
                Story:        Test git pivotal
         | 
| 35 | 
            +
                URL:          http://www.pivotaltracker.com/story/show/1234567
         | 
| 36 | 
            +
                Description:  The awesome story description
         | 
| 37 | 
            +
                6 git-pivotal:1234567-testing % 
         | 
| 38 | 
            +
             | 
| 30 39 | 
             
            ##Installation
         | 
| 31 40 | 
             
            To install git-pivotal, simply run
         | 
| 32 41 |  | 
| @@ -50,6 +59,10 @@ The project id is best placed within your project's git config: | |
| 50 59 |  | 
| 51 60 | 
             
                git config -f .git/config pivotal.project-id 88888
         | 
| 52 61 |  | 
| 62 | 
            +
            If you would rather have the story id appended to the branch name (feature-123456) instead of prepending (123456-feature), you can configue that:
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                git config -f .git/config pivotal.append-name true
         | 
| 65 | 
            +
             | 
| 53 66 | 
             
            If you're not interested in storing these options in git, you can pass them into git pivotal as command line arguments.  See the usage guides for more details.
         | 
| 54 67 |  | 
| 55 68 | 
             
            ##TODO
         | 
    
        data/spec/commands/base_spec.rb
    CHANGED
    
    | @@ -1,5 +1,4 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 | 
            -
            require 'commands/base'
         | 
| 3 2 |  | 
| 4 3 | 
             
            describe Commands::Base do
         | 
| 5 4 |  | 
| @@ -101,4 +100,24 @@ describe Commands::Base do | |
| 101 100 | 
             
                @pick.run!    
         | 
| 102 101 | 
             
              end
         | 
| 103 102 |  | 
| 103 | 
            +
              it "should set the append name flag with the -a option" do
         | 
| 104 | 
            +
                @pick = Commands::Base.new(@input, @output,"-a")
         | 
| 105 | 
            +
                @pick.options[:append_name].should be_true
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
              it "should set the append name flag from git config" do
         | 
| 109 | 
            +
                Commands::Base.any_instance.stubs(:get).with("git config --get pivotal.append-name").returns("true")
         | 
| 110 | 
            +
                @pick = Commands::Base.new
         | 
| 111 | 
            +
                @pick.options[:append_name].should be_true
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
              it "should set the append name flag with the --append-name" do
         | 
| 115 | 
            +
                @pick = Commands::Base.new(@input, @output, "--append-name")
         | 
| 116 | 
            +
                @pick.options[:append_name].should be_true
         | 
| 117 | 
            +
              end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
              it "should default the append name flag if none is specified" do
         | 
| 120 | 
            +
                @pick = Commands::Base.new
         | 
| 121 | 
            +
                @pick.options[:append_name].should be_false
         | 
| 122 | 
            +
              end
         | 
| 104 123 | 
             
            end
         | 
    
        data/spec/commands/bug_spec.rb
    CHANGED
    
    
    
        data/spec/commands/chore_spec.rb
    CHANGED
    
    
| @@ -1,4 +1,3 @@ | |
| 1 | 
            -
            require 'commands/finish'
         | 
| 2 1 | 
             
            require 'spec_helper'
         | 
| 3 2 |  | 
| 4 3 | 
             
            describe Commands::Finish do
         | 
| @@ -46,7 +45,7 @@ describe Commands::Finish do | |
| 46 45 | 
             
                # stub out git config requests
         | 
| 47 46 | 
             
                Commands::Finish.any_instance.stubs(:get).with { |v| v =~ /git config/ }.returns("")
         | 
| 48 47 |  | 
| 49 | 
            -
                 | 
| 48 | 
            +
                PivotalTracker::Project.stubs(:find).returns(mock_projects)
         | 
| 50 49 |  | 
| 51 50 | 
             
                @finish = Commands::Finish.new(nil, nil, "-p", mock_project_id)
         | 
| 52 51 | 
             
                @finish.stubs(:sys)
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -1,18 +1,14 @@ | |
| 1 | 
            -
            require ' | 
| 1 | 
            +
            require 'rspec'
         | 
| 2 2 | 
             
            require 'mocha'
         | 
| 3 3 | 
             
            require 'builder'
         | 
| 4 | 
            -
            require 'pivotal'
         | 
| 4 | 
            +
            require 'lib/git-pivotal'
         | 
| 5 | 
            +
             | 
| 5 6 | 
             
            require File.join(File.dirname(__FILE__), 'factories')
         | 
| 6 7 |  | 
| 7 | 
            -
             | 
| 8 | 
            +
            RSpec.configure do |config|
         | 
| 8 9 | 
             
              config.mock_with :mocha
         | 
| 9 10 | 
             
            end
         | 
| 10 11 |  | 
| 11 12 | 
             
            def stub_connection_to_pivotal
         | 
| 12 13 | 
             
              RestClient::Resource.any_instance.stubs(:get).returns("")
         | 
| 13 | 
            -
            end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            def pivotal_api
         | 
| 16 | 
            -
              stub_connection_to_pivotal
         | 
| 17 | 
            -
              Pivotal::Api.new :api_token => 1
         | 
| 18 14 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,12 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: git-pivotal
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash: 17
         | 
| 5 4 | 
             
              prerelease: false
         | 
| 6 5 | 
             
              segments: 
         | 
| 7 6 | 
             
              - 0
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0. | 
| 7 | 
            +
              - 8
         | 
| 8 | 
            +
              - 0
         | 
| 9 | 
            +
              version: 0.8.0
         | 
| 11 10 | 
             
            platform: ruby
         | 
| 12 11 | 
             
            authors: 
         | 
| 13 12 | 
             
            - Jeff Tucker
         | 
| @@ -16,93 +15,93 @@ autorequire: | |
| 16 15 | 
             
            bindir: bin
         | 
| 17 16 | 
             
            cert_chain: []
         | 
| 18 17 |  | 
| 19 | 
            -
            date:  | 
| 18 | 
            +
            date: 2011-04-10 00:00:00 -04:00
         | 
| 20 19 | 
             
            default_executable: 
         | 
| 21 20 | 
             
            dependencies: 
         | 
| 22 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 23 | 
            -
              name:  | 
| 22 | 
            +
              name: builder
         | 
| 24 23 | 
             
              prerelease: false
         | 
| 25 24 | 
             
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 26 25 | 
             
                none: false
         | 
| 27 26 | 
             
                requirements: 
         | 
| 28 27 | 
             
                - - ">="
         | 
| 29 28 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 30 | 
            -
                    hash: 3
         | 
| 31 29 | 
             
                    segments: 
         | 
| 32 30 | 
             
                    - 0
         | 
| 33 31 | 
             
                    version: "0"
         | 
| 34 32 | 
             
              type: :runtime
         | 
| 35 33 | 
             
              version_requirements: *id001
         | 
| 36 34 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 37 | 
            -
              name:  | 
| 35 | 
            +
              name: pivotal-tracker
         | 
| 38 36 | 
             
              prerelease: false
         | 
| 39 37 | 
             
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 40 38 | 
             
                none: false
         | 
| 41 39 | 
             
                requirements: 
         | 
| 42 40 | 
             
                - - ~>
         | 
| 43 41 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 44 | 
            -
                    hash: 7
         | 
| 45 42 | 
             
                    segments: 
         | 
| 46 | 
            -
                    - 1
         | 
| 47 | 
            -
                    - 4
         | 
| 48 43 | 
             
                    - 0
         | 
| 49 | 
            -
                     | 
| 44 | 
            +
                    - 3
         | 
| 45 | 
            +
                    - 1
         | 
| 46 | 
            +
                    version: 0.3.1
         | 
| 50 47 | 
             
              type: :runtime
         | 
| 51 48 | 
             
              version_requirements: *id002
         | 
| 52 49 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 53 | 
            -
              name:  | 
| 50 | 
            +
              name: rspec
         | 
| 54 51 | 
             
              prerelease: false
         | 
| 55 52 | 
             
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 56 53 | 
             
                none: false
         | 
| 57 54 | 
             
                requirements: 
         | 
| 58 | 
            -
                - -  | 
| 55 | 
            +
                - - ~>
         | 
| 59 56 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 60 | 
            -
                    hash: 3
         | 
| 61 57 | 
             
                    segments: 
         | 
| 58 | 
            +
                    - 2
         | 
| 59 | 
            +
                    - 5
         | 
| 62 60 | 
             
                    - 0
         | 
| 63 | 
            -
                    version:  | 
| 64 | 
            -
              type: : | 
| 61 | 
            +
                    version: 2.5.0
         | 
| 62 | 
            +
              type: :development
         | 
| 65 63 | 
             
              version_requirements: *id003
         | 
| 66 64 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 67 | 
            -
              name:  | 
| 65 | 
            +
              name: rcov
         | 
| 68 66 | 
             
              prerelease: false
         | 
| 69 67 | 
             
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 70 68 | 
             
                none: false
         | 
| 71 69 | 
             
                requirements: 
         | 
| 72 70 | 
             
                - - ">="
         | 
| 73 71 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 74 | 
            -
                    hash: 3
         | 
| 75 72 | 
             
                    segments: 
         | 
| 76 73 | 
             
                    - 0
         | 
| 77 74 | 
             
                    version: "0"
         | 
| 78 75 | 
             
              type: :development
         | 
| 79 76 | 
             
              version_requirements: *id004
         | 
| 80 77 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 81 | 
            -
              name:  | 
| 78 | 
            +
              name: cucumber
         | 
| 82 79 | 
             
              prerelease: false
         | 
| 83 80 | 
             
              requirement: &id005 !ruby/object:Gem::Requirement 
         | 
| 84 81 | 
             
                none: false
         | 
| 85 82 | 
             
                requirements: 
         | 
| 86 | 
            -
                - -  | 
| 83 | 
            +
                - - ~>
         | 
| 87 84 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 88 | 
            -
                    hash: 3
         | 
| 89 85 | 
             
                    segments: 
         | 
| 90 86 | 
             
                    - 0
         | 
| 91 | 
            -
                     | 
| 87 | 
            +
                    - 9
         | 
| 88 | 
            +
                    - 2
         | 
| 89 | 
            +
                    version: 0.9.2
         | 
| 92 90 | 
             
              type: :development
         | 
| 93 91 | 
             
              version_requirements: *id005
         | 
| 94 92 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 95 | 
            -
              name:  | 
| 93 | 
            +
              name: aruba
         | 
| 96 94 | 
             
              prerelease: false
         | 
| 97 95 | 
             
              requirement: &id006 !ruby/object:Gem::Requirement 
         | 
| 98 96 | 
             
                none: false
         | 
| 99 97 | 
             
                requirements: 
         | 
| 100 | 
            -
                - -  | 
| 98 | 
            +
                - - ~>
         | 
| 101 99 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 102 | 
            -
                    hash: 3
         | 
| 103 100 | 
             
                    segments: 
         | 
| 104 101 | 
             
                    - 0
         | 
| 105 | 
            -
                     | 
| 102 | 
            +
                    - 2
         | 
| 103 | 
            +
                    - 3
         | 
| 104 | 
            +
                    version: 0.2.3
         | 
| 106 105 | 
             
              type: :development
         | 
| 107 106 | 
             
              version_requirements: *id006
         | 
| 108 107 | 
             
            description: A collection of git utilities to ease integration with Pivotal Tracker
         | 
| @@ -112,6 +111,7 @@ executables: | |
| 112 111 | 
             
            - git-chore
         | 
| 113 112 | 
             
            - git-feature
         | 
| 114 113 | 
             
            - git-finish
         | 
| 114 | 
            +
            - git-info
         | 
| 115 115 | 
             
            - git-pick
         | 
| 116 116 | 
             
            extensions: []
         | 
| 117 117 |  | 
| @@ -127,22 +127,48 @@ files: | |
| 127 127 | 
             
            - bin/git-chore
         | 
| 128 128 | 
             
            - bin/git-feature
         | 
| 129 129 | 
             
            - bin/git-finish
         | 
| 130 | 
            +
            - bin/git-info
         | 
| 130 131 | 
             
            - bin/git-pick
         | 
| 132 | 
            +
            - features/bug.feature
         | 
| 133 | 
            +
            - features/chore.feature
         | 
| 134 | 
            +
            - features/feature.feature
         | 
| 135 | 
            +
            - features/finish.feature
         | 
| 136 | 
            +
            - features/info.feature
         | 
| 137 | 
            +
            - features/step_definitions/steps.rb
         | 
| 138 | 
            +
            - features/support/env.rb
         | 
| 139 | 
            +
            - features/support/git-pivotal.rb
         | 
| 140 | 
            +
            - features/test_repo/readme
         | 
| 141 | 
            +
            - features/test_repo/working.git/COMMIT_EDITMSG
         | 
| 142 | 
            +
            - features/test_repo/working.git/HEAD
         | 
| 143 | 
            +
            - features/test_repo/working.git/config
         | 
| 144 | 
            +
            - features/test_repo/working.git/description
         | 
| 145 | 
            +
            - features/test_repo/working.git/hooks/applypatch-msg.sample
         | 
| 146 | 
            +
            - features/test_repo/working.git/hooks/commit-msg.sample
         | 
| 147 | 
            +
            - features/test_repo/working.git/hooks/post-commit.sample
         | 
| 148 | 
            +
            - features/test_repo/working.git/hooks/post-receive.sample
         | 
| 149 | 
            +
            - features/test_repo/working.git/hooks/post-update.sample
         | 
| 150 | 
            +
            - features/test_repo/working.git/hooks/pre-applypatch.sample
         | 
| 151 | 
            +
            - features/test_repo/working.git/hooks/pre-commit.sample
         | 
| 152 | 
            +
            - features/test_repo/working.git/hooks/pre-rebase.sample
         | 
| 153 | 
            +
            - features/test_repo/working.git/hooks/prepare-commit-msg.sample
         | 
| 154 | 
            +
            - features/test_repo/working.git/hooks/update.sample
         | 
| 155 | 
            +
            - features/test_repo/working.git/index
         | 
| 156 | 
            +
            - features/test_repo/working.git/info/exclude
         | 
| 157 | 
            +
            - features/test_repo/working.git/logs/HEAD
         | 
| 158 | 
            +
            - features/test_repo/working.git/logs/refs/heads/master
         | 
| 159 | 
            +
            - features/test_repo/working.git/objects/0c/6f7b1384910d1a2f137590095f008a06c7e00c
         | 
| 160 | 
            +
            - features/test_repo/working.git/objects/10/ecf2b7ce989f01f3f7266e712b48d9275f2635
         | 
| 161 | 
            +
            - features/test_repo/working.git/objects/a5/71d56305df09fb060f6ccb730b46080d305beb
         | 
| 162 | 
            +
            - features/test_repo/working.git/refs/heads/master
         | 
| 131 163 | 
             
            - git-pivotal.gemspec
         | 
| 132 164 | 
             
            - lib/commands/base.rb
         | 
| 133 165 | 
             
            - lib/commands/bug.rb
         | 
| 134 166 | 
             
            - lib/commands/chore.rb
         | 
| 135 167 | 
             
            - lib/commands/feature.rb
         | 
| 136 168 | 
             
            - lib/commands/finish.rb
         | 
| 169 | 
            +
            - lib/commands/info.rb
         | 
| 137 170 | 
             
            - lib/commands/pick.rb
         | 
| 138 | 
            -
            - lib/pivotal.rb
         | 
| 139 | 
            -
            - lib/pivotal/api.rb
         | 
| 140 | 
            -
            - lib/pivotal/associations.rb
         | 
| 141 | 
            -
            - lib/pivotal/attributes.rb
         | 
| 142 | 
            -
            - lib/pivotal/base.rb
         | 
| 143 | 
            -
            - lib/pivotal/collection.rb
         | 
| 144 | 
            -
            - lib/pivotal/project.rb
         | 
| 145 | 
            -
            - lib/pivotal/story.rb
         | 
| 171 | 
            +
            - lib/git-pivotal.rb
         | 
| 146 172 | 
             
            - readme.markdown
         | 
| 147 173 | 
             
            - spec/commands/base_spec.rb
         | 
| 148 174 | 
             
            - spec/commands/bug_spec.rb
         | 
| @@ -151,14 +177,6 @@ files: | |
| 151 177 | 
             
            - spec/commands/finish_spec.rb
         | 
| 152 178 | 
             
            - spec/factories.rb
         | 
| 153 179 | 
             
            - spec/factory.rb
         | 
| 154 | 
            -
            - spec/pivotal/api_spec.rb
         | 
| 155 | 
            -
            - spec/pivotal/associations_spec.rb
         | 
| 156 | 
            -
            - spec/pivotal/attributes_spec.rb
         | 
| 157 | 
            -
            - spec/pivotal/base_spec.rb
         | 
| 158 | 
            -
            - spec/pivotal/collection_spec.rb
         | 
| 159 | 
            -
            - spec/pivotal/project_spec.rb
         | 
| 160 | 
            -
            - spec/pivotal/story_spec.rb
         | 
| 161 | 
            -
            - spec/spec.opts
         | 
| 162 180 | 
             
            - spec/spec_helper.rb
         | 
| 163 181 | 
             
            has_rdoc: true
         | 
| 164 182 | 
             
            homepage: http://github.com/trydionel/git-pivotal
         | 
| @@ -174,7 +192,6 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 174 192 | 
             
              requirements: 
         | 
| 175 193 | 
             
              - - ">="
         | 
| 176 194 | 
             
                - !ruby/object:Gem::Version 
         | 
| 177 | 
            -
                  hash: 3
         | 
| 178 195 | 
             
                  segments: 
         | 
| 179 196 | 
             
                  - 0
         | 
| 180 197 | 
             
                  version: "0"
         | 
| @@ -183,7 +200,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 183 200 | 
             
              requirements: 
         | 
| 184 201 | 
             
              - - ">="
         | 
| 185 202 | 
             
                - !ruby/object:Gem::Version 
         | 
| 186 | 
            -
                  hash: 3
         | 
| 187 203 | 
             
                  segments: 
         | 
| 188 204 | 
             
                  - 0
         | 
| 189 205 | 
             
                  version: "0"
         | 
| @@ -202,11 +218,4 @@ test_files: | |
| 202 218 | 
             
            - spec/commands/finish_spec.rb
         | 
| 203 219 | 
             
            - spec/factories.rb
         | 
| 204 220 | 
             
            - spec/factory.rb
         | 
| 205 | 
            -
            - spec/pivotal/api_spec.rb
         | 
| 206 | 
            -
            - spec/pivotal/associations_spec.rb
         | 
| 207 | 
            -
            - spec/pivotal/attributes_spec.rb
         | 
| 208 | 
            -
            - spec/pivotal/base_spec.rb
         | 
| 209 | 
            -
            - spec/pivotal/collection_spec.rb
         | 
| 210 | 
            -
            - spec/pivotal/project_spec.rb
         | 
| 211 | 
            -
            - spec/pivotal/story_spec.rb
         | 
| 212 221 | 
             
            - spec/spec_helper.rb
         | 
    
        data/lib/pivotal/api.rb
    DELETED
    
    | @@ -1,17 +0,0 @@ | |
| 1 | 
            -
            module Pivotal
         | 
| 2 | 
            -
              class Api < Base
         | 
| 3 | 
            -
              
         | 
| 4 | 
            -
                attr_accessor :api_token
         | 
| 5 | 
            -
                has_collection :projects, :of => Pivotal::Project
         | 
| 6 | 
            -
                
         | 
| 7 | 
            -
                def initialize(options = {})
         | 
| 8 | 
            -
                  super(options)
         | 
| 9 | 
            -
                  @api_url = "https://www.pivotaltracker.com/services/v3"
         | 
| 10 | 
            -
                end
         | 
| 11 | 
            -
              
         | 
| 12 | 
            -
                def resource
         | 
| 13 | 
            -
                  @resource ||= RestClient::Resource.new @api_url, :headers => { 'X-TrackerToken' => api_token, 'Content-Type' => 'application/xml' }
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
              
         | 
| 16 | 
            -
              end
         | 
| 17 | 
            -
            end
         | 
    
        data/lib/pivotal/associations.rb
    DELETED
    
    | @@ -1,17 +0,0 @@ | |
| 1 | 
            -
            module Pivotal
         | 
| 2 | 
            -
              module Associations
         | 
| 3 | 
            -
                
         | 
| 4 | 
            -
                def self.included(base)
         | 
| 5 | 
            -
                  base.extend ClassMethods
         | 
| 6 | 
            -
                end
         | 
| 7 | 
            -
                
         | 
| 8 | 
            -
                module ClassMethods
         | 
| 9 | 
            -
                  def has_collection(name, options = {})
         | 
| 10 | 
            -
                    define_method name do
         | 
| 11 | 
            -
                      Pivotal::Collection.new resource[name], options[:of]
         | 
| 12 | 
            -
                    end
         | 
| 13 | 
            -
                  end
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
                
         | 
| 16 | 
            -
              end
         | 
| 17 | 
            -
            end
         | 
    
        data/lib/pivotal/attributes.rb
    DELETED
    
    | @@ -1,25 +0,0 @@ | |
| 1 | 
            -
            module Pivotal
         | 
| 2 | 
            -
              module Attributes
         | 
| 3 | 
            -
                
         | 
| 4 | 
            -
                def self.included(base)
         | 
| 5 | 
            -
                  base.extend ClassMethods
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                  class << base
         | 
| 8 | 
            -
                    attr_accessor :attributes
         | 
| 9 | 
            -
                  end
         | 
| 10 | 
            -
                end
         | 
| 11 | 
            -
                
         | 
| 12 | 
            -
                module ClassMethods
         | 
| 13 | 
            -
                  def has_attributes(*attributes)
         | 
| 14 | 
            -
                    @attributes = attributes.map { |attribute| attribute.to_s }
         | 
| 15 | 
            -
                    
         | 
| 16 | 
            -
                    attributes.each do |attribute|
         | 
| 17 | 
            -
                      define_method attribute do
         | 
| 18 | 
            -
                        parsed_resource.xpath("*/" + attribute.to_s).text
         | 
| 19 | 
            -
                      end
         | 
| 20 | 
            -
                    end
         | 
| 21 | 
            -
                  end
         | 
| 22 | 
            -
                end
         | 
| 23 | 
            -
                
         | 
| 24 | 
            -
              end
         | 
| 25 | 
            -
            end
         | 
    
        data/lib/pivotal/base.rb
    DELETED
    
    | @@ -1,73 +0,0 @@ | |
| 1 | 
            -
            require 'rubygems'
         | 
| 2 | 
            -
            gem 'rest-client', '~>1.4.0'
         | 
| 3 | 
            -
            require 'rest_client'
         | 
| 4 | 
            -
            require 'nokogiri'
         | 
| 5 | 
            -
            require 'builder'
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            module Pivotal
         | 
| 8 | 
            -
              class Base
         | 
| 9 | 
            -
                include Pivotal::Associations
         | 
| 10 | 
            -
                include Pivotal::Attributes
         | 
| 11 | 
            -
                
         | 
| 12 | 
            -
                attr_accessor :resource, :xml
         | 
| 13 | 
            -
                
         | 
| 14 | 
            -
                def initialize(params = {})
         | 
| 15 | 
            -
                  params.each do |key, value|
         | 
| 16 | 
            -
                    send("#{key}=", value)
         | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
                end    
         | 
| 19 | 
            -
                
         | 
| 20 | 
            -
                def xml
         | 
| 21 | 
            -
                  @xml ||= resource.get.body
         | 
| 22 | 
            -
                end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                def parsed_resource
         | 
| 25 | 
            -
                  @parsed_resource ||= Nokogiri::XML(xml)
         | 
| 26 | 
            -
                end
         | 
| 27 | 
            -
                
         | 
| 28 | 
            -
                def update_attributes(options = {})
         | 
| 29 | 
            -
                  begin
         | 
| 30 | 
            -
                    resource.put generate_xml(options) do |response|
         | 
| 31 | 
            -
                      if response.code == 200
         | 
| 32 | 
            -
                        @xml = response.body
         | 
| 33 | 
            -
                        return true
         | 
| 34 | 
            -
                      else
         | 
| 35 | 
            -
                        return false
         | 
| 36 | 
            -
                      end
         | 
| 37 | 
            -
                    end
         | 
| 38 | 
            -
                  rescue RestClient::Exception
         | 
| 39 | 
            -
                    return false
         | 
| 40 | 
            -
                  end
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
                
         | 
| 43 | 
            -
                class << self
         | 
| 44 | 
            -
                  def name_as_xml_attribute
         | 
| 45 | 
            -
                    self.name.gsub(/.+\:\:/, '').downcase
         | 
| 46 | 
            -
                  end
         | 
| 47 | 
            -
                  
         | 
| 48 | 
            -
                  def xpath
         | 
| 49 | 
            -
                    '//' + self.name_as_xml_attribute
         | 
| 50 | 
            -
                  end
         | 
| 51 | 
            -
                end
         | 
| 52 | 
            -
                
         | 
| 53 | 
            -
              private
         | 
| 54 | 
            -
              
         | 
| 55 | 
            -
                def generate_xml(options = {})
         | 
| 56 | 
            -
                  builder = Builder::XmlMarkup.new
         | 
| 57 | 
            -
                  builder.__send__ self.class.name_as_xml_attribute do
         | 
| 58 | 
            -
                    allowed_keys(options).each do |key, value|
         | 
| 59 | 
            -
                      builder.__send__(key, value.to_s)
         | 
| 60 | 
            -
                    end
         | 
| 61 | 
            -
                  end
         | 
| 62 | 
            -
                  
         | 
| 63 | 
            -
                  builder.target!
         | 
| 64 | 
            -
                end
         | 
| 65 | 
            -
                
         | 
| 66 | 
            -
                def allowed_keys(options = {})
         | 
| 67 | 
            -
                  options.reject do |key, _|
         | 
| 68 | 
            -
                    !self.class.attributes.include? key.to_s
         | 
| 69 | 
            -
                  end
         | 
| 70 | 
            -
                end
         | 
| 71 | 
            -
                
         | 
| 72 | 
            -
              end
         | 
| 73 | 
            -
            end
         | 
    
        data/lib/pivotal/collection.rb
    DELETED
    
    | @@ -1,63 +0,0 @@ | |
| 1 | 
            -
            require 'cgi'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Pivotal
         | 
| 4 | 
            -
              class Collection
         | 
| 5 | 
            -
                
         | 
| 6 | 
            -
                attr_accessor :resource, :component_class
         | 
| 7 | 
            -
                
         | 
| 8 | 
            -
                def initialize(resource, component_class)
         | 
| 9 | 
            -
                  @resource, @component_class = resource, component_class
         | 
| 10 | 
            -
                end
         | 
| 11 | 
            -
                
         | 
| 12 | 
            -
                # Param queries will break our REST structure,
         | 
| 13 | 
            -
                # so if we find an :id parameter, accept it and
         | 
| 14 | 
            -
                # ignore all other params.
         | 
| 15 | 
            -
                def find(*args)
         | 
| 16 | 
            -
                  params = args.last.is_a?(Hash) ? args.pop : {}
         | 
| 17 | 
            -
                  finder = args.first
         | 
| 18 | 
            -
                  
         | 
| 19 | 
            -
                  return item(params[:id]) if params[:id]
         | 
| 20 | 
            -
                  return item(finder) if finder.is_a?(Numeric)
         | 
| 21 | 
            -
                  
         | 
| 22 | 
            -
                  all(params)
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
                
         | 
| 25 | 
            -
                def first
         | 
| 26 | 
            -
                  all.first
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
                
         | 
| 29 | 
            -
              private
         | 
| 30 | 
            -
              
         | 
| 31 | 
            -
                def item(id)
         | 
| 32 | 
            -
                  component_class.new :resource => resource[id]
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
              
         | 
| 35 | 
            -
                def filters(params = {})
         | 
| 36 | 
            -
                  return "" if params.empty?
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                  param_url = []
         | 
| 39 | 
            -
                  if params[:conditions]
         | 
| 40 | 
            -
                    condition_string = params[:conditions].map { |k,v| "#{k}:#{v}" }.join " "
         | 
| 41 | 
            -
                    param_url << "filter=#{CGI::escape(condition_string)}"
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
                  
         | 
| 44 | 
            -
                  if params[:limit]
         | 
| 45 | 
            -
                    param_url << "limit=#{params[:limit]}&offset=#{params[:offset]||0}"
         | 
| 46 | 
            -
                  end
         | 
| 47 | 
            -
                  
         | 
| 48 | 
            -
                  "?" + param_url.join("&")
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
                
         | 
| 51 | 
            -
                def build_collection_from_xml(xml = "")
         | 
| 52 | 
            -
                  Nokogiri::XML(xml).xpath(component_class.xpath).map do |item|
         | 
| 53 | 
            -
                    item_id = item.xpath("id").text
         | 
| 54 | 
            -
                    component_class.new :resource => resource[item_id], :xml => item.to_xml
         | 
| 55 | 
            -
                  end
         | 
| 56 | 
            -
                end
         | 
| 57 | 
            -
                
         | 
| 58 | 
            -
                def all(params = {})
         | 
| 59 | 
            -
                  build_collection_from_xml resource[filters(params)].get.body
         | 
| 60 | 
            -
                end
         | 
| 61 | 
            -
                
         | 
| 62 | 
            -
              end
         | 
| 63 | 
            -
            end
         | 
    
        data/lib/pivotal/project.rb
    DELETED
    
    | @@ -1,14 +0,0 @@ | |
| 1 | 
            -
            module Pivotal
         | 
| 2 | 
            -
              class Project < Base
         | 
| 3 | 
            -
             | 
| 4 | 
            -
                has_collection :stories, :of => Pivotal::Story
         | 
| 5 | 
            -
                has_attributes :id, :name, :iteration_length, :week_start_day,
         | 
| 6 | 
            -
                               :point_scale, :account, :velocity_scheme,
         | 
| 7 | 
            -
                               :current_velocity, :initial_velocity,
         | 
| 8 | 
            -
                               :number_of_iterations_to_show, :labels,
         | 
| 9 | 
            -
                               :allow_attachments, :public, :use_https,
         | 
| 10 | 
            -
                               :bugs_and_chores_are_estimatable, :commit_mode,
         | 
| 11 | 
            -
                               :last_activity_at, :memberships, :integrations
         | 
| 12 | 
            -
             | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
            end
         |