assisted_workflow 0.1.1 → 0.1.2

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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assisted_workflow (0.1.0)
4
+ assisted_workflow (0.1.2)
5
5
  hashie (~> 2.0.5)
6
6
  octokit (~> 2.0)
7
7
  pivotal-tracker (~> 0.5.12)
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Assisted Workflow (aw)
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/assisted_workflow.png)](http://badge.fury.io/rb/assisted_workflow) [![Code Climate](https://codeclimate.com/github/flaviogranero/assisted_workflow.png)](https://codeclimate.com/github/flaviogranero/assisted_workflow)
4
+
3
5
  AW is a CLI tool to automate software development workflows based on github pull requests.
4
6
 
5
7
  * [Github Workflow](http://scottchacon.com/2011/08/31/github-flow.html)
@@ -16,33 +16,37 @@ class AssistedWorkflow::CLI < Thor
16
16
  copy_file "awconfig.local.tt", LOCAL_CONFIG
17
17
  if File.exists?(".git")
18
18
  copy_file "commit-msg.tt", ".git/hooks/commit-msg"
19
+ chmod ".git/hooks/commit-msg", "a+x"
19
20
  else
20
21
  raise AssistedWorkflow::Error, ".git folder not found"
21
22
  end
22
23
  say "set your own configuration editing the .awconfig files or running:", :green
23
- say "\t$ aw config pivotal.fullname='Flavio Granero' --global"
24
- say "\t$ aw config pivotal.token=MYPIVOTALTOKEN --global"
25
- say "\t$ aw config github.token=MYGITHUBOAUTHTOKEN --global"
26
- say "\t$ aw config pivotal.project_id=00001"
24
+ say_command "$ aw config pivotal.fullname='Flavio Granero' --global"
25
+ say_command "$ aw config pivotal.token=MYPIVOTALTOKEN --global"
26
+ say_command "$ aw config github.token=MYGITHUBOAUTHTOKEN --global"
27
+ say_command "$ aw config pivotal.project_id=00001"
27
28
  end
28
29
 
29
30
  desc "start [STORY_ID]", "Start the pivotal story and create a new branch to receive the changes"
31
+ method_option :all, :type => :boolean, :default => false, :aliases => "-a", :desc => "Show started and pending stories when no story_id is provided"
32
+ method_option :estimate, :type => :numeric, :aliases => "-e", :desc => "Sets the story estimate when starting"
30
33
  def start(story_id=nil)
31
34
  check_awfile!
32
35
  story = pivotal.find_story(story_id)
33
36
  if story.nil?
34
- stories = pivotal.pending_stories
37
+ stories = pivotal.pending_stories(:include_started => options[:all])
35
38
  print_title "pending stories"
36
- print_table(pivotal.display_values(stories))
39
+ print_table(pivotal.display_values(stories, :show_state => options[:all]))
37
40
  say "start a story using:", :green
38
- say "\t$ aw start [STORY_ID]"
41
+ say_command "$ aw start [STORY_ID]"
39
42
  else
43
+ say_status "starting story", story.name
44
+ pivotal.start_story(story, :estimate => options[:estimate])
45
+ print_wrapped story.description, :indent => 2
40
46
  say "creating the feature branch"
41
47
  git.create_story_branch(story)
42
- say "starting story: #{story.name}"
43
- pivotal.start_story(story)
44
48
  say "after commiting your changes, submit a pull request using:", :green
45
- say "\t$ aw submit"
49
+ say_command "$ aw submit"
46
50
  end
47
51
  end
48
52
 
@@ -58,10 +62,10 @@ class AssistedWorkflow::CLI < Thor
58
62
  say "submiting the new pull request"
59
63
  pr = github.create_pull_request(git.repository, git.current_branch, story)
60
64
  say "finishing the story"
61
- pivotal.finish_story(story)
65
+ pivotal.finish_story(story, :note => pr._links.html.href)
62
66
  say "new pull request: #{pr._links.html.href}", :yellow
63
67
  say "after pull request approval, remove the feature branch using:", :green
64
- say "\t$aw finish"
68
+ say_command "$ aw finish"
65
69
  else
66
70
  raise AssistedWorkflow::Error, "story not found, make sure a feature branch in active"
67
71
  end
@@ -76,7 +80,7 @@ class AssistedWorkflow::CLI < Thor
76
80
  say "removing local and remote feature branches"
77
81
  git.remove_branch
78
82
  say "well done! check your next stories using:", :green
79
- say "\t$ aw start"
83
+ say_command "$ aw start"
80
84
  else
81
85
  say "this branch is not merged into master yet", :yellow
82
86
  end
@@ -144,6 +148,12 @@ class AssistedWorkflow::CLI < Thor
144
148
  say "-" * title.length, :green
145
149
  end
146
150
 
151
+ def say_command(command)
152
+ with_padding do
153
+ say command
154
+ end
155
+ end
156
+
147
157
  def check_awfile!
148
158
  raise AssistedWorkflow::Error, "#{awfile} does not exist.\nmake sure you run `$ aw setup` in your project folder." unless File.exist?(awfile)
149
159
  end
@@ -60,7 +60,7 @@ module AssistedWorkflow
60
60
  # removes current branch and his remote version
61
61
  def remove_branch
62
62
  branch = current_branch
63
- git "push origin :#{branch}"
63
+ git "push origin :#{branch}", :raise_error => false
64
64
  git "checkout master"
65
65
  git "branch -D #{branch}"
66
66
  end
@@ -68,9 +68,10 @@ module AssistedWorkflow
68
68
  private
69
69
 
70
70
  def git(command, options = {})
71
+ options = {:raise_error => true}.merge(options)
71
72
  puts "git #{command}" unless options[:silent] == true
72
73
  result = %x{git #{command}}.chomp
73
- unless $? == 0
74
+ if $? != 0 && options[:raise_error]
74
75
  msg = ["git command error", options[:error]].compact.join(": ")
75
76
  raise GitError, msg
76
77
  end
@@ -27,21 +27,37 @@ module AssistedWorkflow
27
27
  end
28
28
  end
29
29
 
30
- def start_story(story)
31
- story.update(:current_state => "started") if story
30
+ def start_story(story, options = {})
31
+ update_story! story, options.merge(:current_state => "started")
32
32
  end
33
33
 
34
- def finish_story(story)
35
- story.update(:current_state => finished_state(story)) if story
34
+ def finish_story(story, options = {})
35
+ if update_story! story, :current_state => finished_state(story)
36
+ story.notes.create(:text => options[:note]) if options[:note]
37
+ end
36
38
  end
37
39
 
38
- def pending_stories
39
- @project.stories.all(:state => "unstarted", :owned_by => @username, :limit => 5)
40
+ def pending_stories(options = {})
41
+ states = ["unstarted"]
42
+ states << "started" if options[:include_started]
43
+ @project.stories.all(:state => states, :owned_by => @username, :limit => 5)
44
+ end
45
+
46
+ def update_story!(story, attributes)
47
+ if story
48
+ story.update(attributes)
49
+ raise AssistedWorkflow::Error, story.errors.first.to_s if story.errors.any?
50
+ true
51
+ end
40
52
  end
41
53
 
42
- def display_values(stories)
54
+ def display_values(stories, options = {})
43
55
  stories.map do |story|
44
- [story.id, story.name]
56
+ if options[:show_state]
57
+ [story.id, story.current_state, story.name]
58
+ else
59
+ [story.id, story.estimate, story.name]
60
+ end
45
61
  end
46
62
  end
47
63
 
@@ -1,3 +1,3 @@
1
1
  module AssistedWorkflow
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: assisted_workflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-06 00:00:00.000000000 Z
12
+ date: 2014-01-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor