pivotal-brancher 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/bin/pb ADDED
@@ -0,0 +1,4 @@
1
+ #!/bin/env ruby
2
+ require 'pivotal-brancher/cli'
3
+
4
+ PivotalBrancher::Cli.start
@@ -0,0 +1,34 @@
1
+ require 'valise'
2
+ require 'pivotal-tracker'
3
+
4
+ module PivotalBrancher
5
+ class App
6
+ def initialize
7
+ @files = Valise::define do
8
+ rw ".pivotal-brancher"
9
+ rw "~/.pivotal-brancher"
10
+
11
+ handle "*.yaml", :yaml, :hash_merge
12
+ end
13
+ configure_pivotal
14
+ end
15
+
16
+ def configs
17
+ @files.find("config.yaml").contents
18
+ end
19
+
20
+ def configure_pivotal
21
+ PivotalTracker::Client.token = configs["token"]
22
+ PivotalTracker::Client.use_ssl
23
+ #RestClient.log = "stdout"
24
+ end
25
+
26
+ def project
27
+ @project = PivotalTracker::Project.find(configs["project"])
28
+ end
29
+
30
+ def started_stories
31
+ project.stories.all(:current_state => "started", :owned_by => configs["user"])
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,47 @@
1
+ require 'thor'
2
+ require 'pivotal-brancher/app'
3
+
4
+ module PivotalBrancher
5
+ class Cli < Thor
6
+ include Thor::Actions
7
+
8
+ default_task :start
9
+
10
+ no_commands do
11
+ def story_branch_name(story)
12
+ ([story.id] + story.name.split(/[^\w]+/).map(&:downcase)).join("_")
13
+ end
14
+
15
+ def app=(app)
16
+ @app = app
17
+ end
18
+
19
+ def app
20
+ @app ||= PivotalBrancher::App.new
21
+ end
22
+ end
23
+
24
+ desc "start", "Start a branch for your first started Pivotal story"
25
+ method_options %w{pretend -p} => :boolean #ok
26
+ def start
27
+ stories = app.started_stories
28
+ story = stories.shift
29
+
30
+ say "Switching to branch for:"
31
+ say "#{story.id}: #{story.name}"
32
+ say ""
33
+ say "Other started stories are:"
34
+ stories.each do |story|
35
+ say "#{story.id}: #{story.name}"
36
+ end
37
+ git_command = "git checkout -b #{story_branch_name(story)}"
38
+ if options.pretend?
39
+ say "Would run: #{git_command}"
40
+ else
41
+ run git_command
42
+ end
43
+ end
44
+ end
45
+
46
+ CLI = Cli
47
+ end
@@ -1,35 +1,5 @@
1
- require 'valise'
2
- require 'pivotal-tracker'
3
-
4
1
  module PivotalBrancher
5
-
6
- class App
7
- def initialize
8
- @files = Valise::define do
9
- rw ".pivotal-brancher"
10
- rw "~/.pivotal-brancher"
11
-
12
- handle "*.yaml", :yaml, :hash_merge
13
- end
14
- configure_pivotal
15
- end
16
-
17
- def configs
18
- @files.find("config.yaml").contents
19
- end
20
-
21
- def configure_pivotal
22
- PivotalTracker::Client.token = configs["token"]
23
- PivotalTracker::Client.use_ssl
24
- #RestClient.log = "stdout"
25
- end
26
-
27
- def project
28
- @project = PivotalTracker::Project.find(configs["project"])
29
- end
30
-
31
- def started_stories
32
- project.stories.all(:current_state => "started", :owned_by => configs["user"])
33
- end
34
- end
35
2
  end
3
+
4
+ require 'pivotal-brancher/app'
5
+ require 'pivotal-brancher/cli'
data/spec/start.rb ADDED
@@ -0,0 +1,46 @@
1
+ require 'pivotal-brancher'
2
+ require 'ostruct'
3
+
4
+ describe PivotalBrancher::Cli do
5
+ before :all do
6
+ described_class.instance_eval do
7
+ @no_commands = true
8
+ end
9
+ end
10
+
11
+ let :cli do
12
+ described_class.new.tap do |cli|
13
+ cli.app = brancher_app
14
+ cli.stub(:run)
15
+ end
16
+ end
17
+
18
+ let :brancher_app do
19
+ PivotalBrancher::App.new.tap do |app|
20
+ app.stub(:started_stories).and_return(stories)
21
+ end
22
+ end
23
+
24
+ let :stories do
25
+ [
26
+ OpenStruct.new(:id => "123456", :name => "This: is a story")
27
+ ]
28
+ end
29
+
30
+ it "should report on stories considered" do
31
+ expect(capture_stdout do
32
+ cli.start
33
+ end).to match(/is a story/)
34
+ end
35
+
36
+ it "should build branch names" do
37
+ expect(cli.story_branch_name(stories.first)).to eql("123456_this_is_a_story")
38
+ end
39
+
40
+ it "should execute git checkout -b" do
41
+ cli.should_receive(:run).with("git checkout -b 123456_this_is_a_story")
42
+ capture_stdout do
43
+ cli.start
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,4 @@
1
+ support_dir = File::dirname(__FILE__)
2
+ Dir[File::expand_path("../**/*.rb", __FILE__)].each do |file|
3
+ require file
4
+ end
@@ -0,0 +1,17 @@
1
+ require 'stringio'
2
+
3
+ RSpec.configure do |config|
4
+ def capture_stdout
5
+ begin
6
+ old_stream = $stdout
7
+ new_stream = StringIO.new
8
+ $stdout = new_stream
9
+ yield
10
+ result = $stdout.string
11
+ ensure
12
+ $stdout = old_stream
13
+ end
14
+
15
+ result
16
+ end
17
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: pivotal-brancher
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Judson Lester
@@ -17,7 +17,7 @@ dependencies:
17
17
  name: pivotal-tracker
18
18
  version_requirements: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - ! '>='
20
+ - - ~>
21
21
  - !ruby/object:Gem::Version
22
22
  segments:
23
23
  - 0
@@ -27,7 +27,7 @@ dependencies:
27
27
  none: false
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - ! '>='
30
+ - - ~>
31
31
  - !ruby/object:Gem::Version
32
32
  segments:
33
33
  - 0
@@ -41,7 +41,7 @@ dependencies:
41
41
  name: valise
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ! '>='
44
+ - - ~>
45
45
  - !ruby/object:Gem::Version
46
46
  segments:
47
47
  - 0
@@ -50,25 +50,52 @@ dependencies:
50
50
  none: false
51
51
  requirement: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ! '>='
53
+ - - ~>
54
54
  - !ruby/object:Gem::Version
55
55
  segments:
56
56
  - 0
57
57
  - 9
58
58
  version: '0.9'
59
59
  none: false
60
+ - !ruby/object:Gem::Dependency
61
+ prerelease: false
62
+ type: :runtime
63
+ name: thor
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
70
+ - 18
71
+ version: '0.18'
72
+ none: false
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ segments:
78
+ - 0
79
+ - 18
80
+ version: '0.18'
81
+ none: false
60
82
  description: ! " Some command line tools to be used in tandem with a githook for
61
- Pivotal\n\n - pt-start will switch to\n (possibly creating) a git branch named
62
- for your current highest priority\n started Pivotal story.\n"
83
+ Pivotal\n\n `pb start` will switch to (possibly creating) a git branch named for
84
+ your\n current highest priority started Pivotal story.\n"
63
85
  email:
64
86
  - nyarly@gmail.com
65
87
  executables:
66
- - pt-start
88
+ - pb
67
89
  extensions: []
68
90
  extra_rdoc_files: []
69
91
  files:
92
+ - lib/pivotal-brancher/app.rb
93
+ - lib/pivotal-brancher/cli.rb
70
94
  - lib/pivotal-brancher.rb
71
- - bin/pt-start
95
+ - bin/pb
96
+ - spec/start.rb
97
+ - spec_support/all.rb
98
+ - spec_support/capture.rb
72
99
  homepage: http://nyarly.github.com/pivotal-brancher
73
100
  licenses:
74
101
  - MIT
@@ -78,7 +105,7 @@ rdoc_options:
78
105
  - --main
79
106
  - doc/README
80
107
  - --title
81
- - pivotal-brancher-0.0.1 Documentation
108
+ - pivotal-brancher-0.0.2 Documentation
82
109
  require_paths:
83
110
  - lib/
84
111
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -87,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
114
  - !ruby/object:Gem::Version
88
115
  segments:
89
116
  - 0
90
- hash: -363476799
117
+ hash: -369662783
91
118
  version: '0'
92
119
  none: false
93
120
  required_rubygems_version: !ruby/object:Gem::Requirement
data/bin/pt-start DELETED
@@ -1,16 +0,0 @@
1
- #!/bin/env ruby
2
- require 'pivotal-brancher'
3
- require 'pp'
4
-
5
- app = PivotalBrancher::App.new
6
- stories = app.started_stories
7
- story = stories.shift
8
-
9
- $stderr.puts "Switching to branch for:"
10
- $stderr.puts "#{story.id}: #{story.name}"
11
- $stderr.puts
12
- $stderr.puts "Other started stories are:"
13
- stories.each do |story|
14
- $stderr.puts "#{story.id}: #{story.name}"
15
- end
16
- %x"git checkout -b #{([story.id] + story.name.split(/\s/).map(&:downcase)).join("_")}"