crab 0.2.7 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. data/README.md +0 -1
  2. data/bin/crab +27 -14
  3. data/bin/crab-help +10 -2
  4. data/bin/crab-it +25 -11
  5. data/bin/crab-it-help +11 -2
  6. data/bin/crab-it-list +25 -15
  7. data/bin/crab-iteration +25 -11
  8. data/bin/crab-iteration-help +11 -2
  9. data/bin/crab-iteration-list +25 -15
  10. data/bin/crab-login +24 -13
  11. data/bin/crab-logout +22 -9
  12. data/bin/crab-project +42 -32
  13. data/bin/crab-rel +25 -11
  14. data/bin/crab-rel-help +12 -3
  15. data/bin/crab-rel-list +23 -15
  16. data/bin/crab-release +25 -11
  17. data/bin/crab-release-help +12 -3
  18. data/bin/crab-release-list +23 -15
  19. data/bin/crab-st +24 -11
  20. data/bin/crab-st-add +18 -10
  21. data/bin/crab-st-change +53 -39
  22. data/bin/crab-st-create +18 -10
  23. data/bin/crab-st-del +19 -11
  24. data/bin/crab-st-delete +19 -11
  25. data/bin/crab-st-find +32 -21
  26. data/bin/crab-st-help +11 -2
  27. data/bin/crab-st-list +32 -21
  28. data/bin/crab-st-ls +32 -21
  29. data/bin/crab-st-move +26 -14
  30. data/bin/crab-st-mv +26 -14
  31. data/bin/crab-st-new +18 -10
  32. data/bin/crab-st-pull +28 -20
  33. data/bin/crab-st-ren +26 -14
  34. data/bin/crab-st-rename +26 -14
  35. data/bin/crab-st-rm +19 -11
  36. data/bin/crab-st-show +19 -11
  37. data/bin/crab-st-up +53 -39
  38. data/bin/crab-st-update +53 -39
  39. data/bin/crab-story +24 -11
  40. data/bin/crab-story-add +18 -10
  41. data/bin/crab-story-change +53 -39
  42. data/bin/crab-story-create +18 -10
  43. data/bin/crab-story-del +19 -11
  44. data/bin/crab-story-delete +19 -11
  45. data/bin/crab-story-diff +54 -0
  46. data/bin/crab-story-find +32 -21
  47. data/bin/crab-story-help +11 -2
  48. data/bin/crab-story-list +32 -21
  49. data/bin/crab-story-ls +32 -21
  50. data/bin/crab-story-move +26 -14
  51. data/bin/crab-story-mv +26 -14
  52. data/bin/crab-story-new +18 -10
  53. data/bin/crab-story-pull +28 -20
  54. data/bin/crab-story-ren +26 -14
  55. data/bin/crab-story-rename +26 -14
  56. data/bin/crab-story-rm +19 -11
  57. data/bin/crab-story-show +19 -11
  58. data/bin/crab-story-up +53 -39
  59. data/bin/crab-story-update +53 -39
  60. data/bin/crab-tc +24 -11
  61. data/bin/crab-tc-add +32 -20
  62. data/bin/crab-tc-change +18 -8
  63. data/bin/crab-tc-create +32 -20
  64. data/bin/crab-tc-del +18 -10
  65. data/bin/crab-tc-delete +18 -10
  66. data/bin/crab-tc-find +32 -21
  67. data/bin/crab-tc-help +11 -2
  68. data/bin/crab-tc-list +32 -21
  69. data/bin/crab-tc-ls +32 -21
  70. data/bin/crab-tc-new +32 -20
  71. data/bin/crab-tc-rm +18 -10
  72. data/bin/crab-tc-show +28 -15
  73. data/bin/crab-tc-up +18 -8
  74. data/bin/crab-tc-update +18 -8
  75. data/bin/crab-testcase +24 -11
  76. data/bin/crab-testcase-add +32 -20
  77. data/bin/crab-testcase-change +18 -8
  78. data/bin/crab-testcase-create +32 -20
  79. data/bin/crab-testcase-del +18 -10
  80. data/bin/crab-testcase-delete +18 -10
  81. data/bin/crab-testcase-find +32 -21
  82. data/bin/crab-testcase-help +11 -2
  83. data/bin/crab-testcase-list +32 -21
  84. data/bin/crab-testcase-ls +32 -21
  85. data/bin/crab-testcase-new +32 -20
  86. data/bin/crab-testcase-rm +18 -10
  87. data/bin/crab-testcase-show +28 -15
  88. data/bin/crab-testcase-up +18 -8
  89. data/bin/crab-testcase-update +18 -8
  90. data/bin/crab-truncate +1 -0
  91. data/bin/crab-version +2 -1
  92. data/features/subcommand-help.feature +1 -0
  93. data/lib/crab.rb +2 -0
  94. data/lib/crab/cucumber_to_rally_adapter.rb +48 -0
  95. data/lib/crab/rally.rb +21 -1
  96. data/lib/crab/utilities.rb +10 -2
  97. data/lib/crab/version.rb +1 -1
  98. metadata +7 -4
@@ -1,18 +1,32 @@
1
1
  #!/usr/bin/env ruby
2
2
  # vim: set ft=ruby:
3
+ require 'crab'
3
4
 
4
- cmd = ARGV.shift # get the subcommand
5
+ class Crab::ReleaseMain
5
6
 
6
- case cmd
7
- when "-h", "--help", NilClass
8
- system "crab-release-help"
9
- exit 0
10
- end
7
+ class << self
8
+
9
+ include Crab::Utilities
10
+
11
+ def run(args=ARGV)
11
12
 
12
- unless system("crab-release-#{cmd}", *ARGV)
13
- if $?.exitstatus == 127 # bash 'command not found'
14
- $stderr.puts "Unknown subcommand \"release #{cmd}\""
15
- system "crab-release-help"
16
- exit 127
13
+ cmd = args.shift # get the subcommand
14
+
15
+ case cmd
16
+ when "-h", "--help", NilClass
17
+ system "crab-release-help"
18
+ exit 0
19
+ end
20
+
21
+ unless system("crab-release-#{cmd}", *args)
22
+ if $?.exitstatus == 127 # bash 'command not found'
23
+ logger.error "Unknown subcommand \"release #{cmd}\""
24
+ system "crab-release-help"
25
+ exit 1
26
+ end
27
+ end
28
+ end
17
29
  end
18
30
  end
31
+
32
+ Crab::ReleaseMain.run
@@ -1,6 +1,11 @@
1
- # vim: set ft=ruby :
1
+ #!/usr/bin/env ruby
2
+ # vim: set ft=ruby:
3
+ require 'crab'
2
4
 
3
- puts <<-HELP
5
+ class Crab::ReleaseHelp
6
+
7
+ def self.run
8
+ puts <<-HELP
4
9
  Usage: crab release <command> [options*]
5
10
 
6
11
  Available commands:
@@ -9,4 +14,8 @@ Usage: crab release <command> [options*]
9
14
  help Show this help text
10
15
 
11
16
  --help, -h: Show this message
12
- HELP
17
+ HELP
18
+ end
19
+ end
20
+
21
+ Crab::ReleaseHelp.run
@@ -1,28 +1,36 @@
1
1
  #!/usr/bin/env ruby
2
2
  # vim: set ft=ruby:
3
-
4
3
  require 'crab'
5
4
 
6
- include Crab::Utilities
5
+ class Crab::ReleaseList
6
+
7
+ class << self
8
+ include Crab::Utilities
7
9
 
8
- opts = Trollop::options do
9
- banner <<-BANNER
10
+ def run(args=ARGV)
11
+ opts = Trollop::options(args) do
12
+ banner <<-BANNER
10
13
  crab release list: list releases available in the current project
11
14
 
12
15
  Usage: crab release list [options*]
13
- BANNER
14
- opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
15
- opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
16
- end
16
+ BANNER
17
+ opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
18
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
19
+ end
17
20
 
18
- pattern = ARGV.map(&:strip).reject(&:empty?)
19
- project_name = valid_project_name(opts)
21
+ pattern = args.map(&:strip).reject(&:empty?)
22
+ project_name = valid_project_name(opts)
20
23
 
21
- Crab::Rally.new(opts[:dry]) do |rally|
22
- project = rally.find_project(project_name)
23
- Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
24
+ Crab::Rally.new(opts[:dry]) do |rally|
25
+ project = rally.find_project(project_name)
26
+ Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
24
27
 
25
- rally.find_releases(project).each do |release|
26
- puts release.name
28
+ rally.find_releases(project).each do |release|
29
+ puts release.name
30
+ end
31
+ end
32
+ end
27
33
  end
28
34
  end
35
+
36
+ Crab::ReleaseList.run
@@ -1,18 +1,32 @@
1
1
  #!/usr/bin/env ruby
2
2
  # vim: set ft=ruby:
3
+ require 'crab'
3
4
 
4
- cmd = ARGV.shift # get the subcommand
5
+ class Crab::ReleaseMain
5
6
 
6
- case cmd
7
- when "-h", "--help", NilClass
8
- system "crab-release-help"
9
- exit 0
10
- end
7
+ class << self
8
+
9
+ include Crab::Utilities
10
+
11
+ def run(args=ARGV)
11
12
 
12
- unless system("crab-release-#{cmd}", *ARGV)
13
- if $?.exitstatus == 127 # bash 'command not found'
14
- $stderr.puts "Unknown subcommand \"release #{cmd}\""
15
- system "crab-release-help"
16
- exit 127
13
+ cmd = args.shift # get the subcommand
14
+
15
+ case cmd
16
+ when "-h", "--help", NilClass
17
+ system "crab-release-help"
18
+ exit 0
19
+ end
20
+
21
+ unless system("crab-release-#{cmd}", *args)
22
+ if $?.exitstatus == 127 # bash 'command not found'
23
+ logger.error "Unknown subcommand \"release #{cmd}\""
24
+ system "crab-release-help"
25
+ exit 1
26
+ end
27
+ end
28
+ end
17
29
  end
18
30
  end
31
+
32
+ Crab::ReleaseMain.run
@@ -1,6 +1,11 @@
1
- # vim: set ft=ruby :
1
+ #!/usr/bin/env ruby
2
+ # vim: set ft=ruby:
3
+ require 'crab'
2
4
 
3
- puts <<-HELP
5
+ class Crab::ReleaseHelp
6
+
7
+ def self.run
8
+ puts <<-HELP
4
9
  Usage: crab release <command> [options*]
5
10
 
6
11
  Available commands:
@@ -9,4 +14,8 @@ Usage: crab release <command> [options*]
9
14
  help Show this help text
10
15
 
11
16
  --help, -h: Show this message
12
- HELP
17
+ HELP
18
+ end
19
+ end
20
+
21
+ Crab::ReleaseHelp.run
@@ -1,28 +1,36 @@
1
1
  #!/usr/bin/env ruby
2
2
  # vim: set ft=ruby:
3
-
4
3
  require 'crab'
5
4
 
6
- include Crab::Utilities
5
+ class Crab::ReleaseList
6
+
7
+ class << self
8
+ include Crab::Utilities
7
9
 
8
- opts = Trollop::options do
9
- banner <<-BANNER
10
+ def run(args=ARGV)
11
+ opts = Trollop::options(args) do
12
+ banner <<-BANNER
10
13
  crab release list: list releases available in the current project
11
14
 
12
15
  Usage: crab release list [options*]
13
- BANNER
14
- opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
15
- opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
16
- end
16
+ BANNER
17
+ opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
18
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
19
+ end
17
20
 
18
- pattern = ARGV.map(&:strip).reject(&:empty?)
19
- project_name = valid_project_name(opts)
21
+ pattern = args.map(&:strip).reject(&:empty?)
22
+ project_name = valid_project_name(opts)
20
23
 
21
- Crab::Rally.new(opts[:dry]) do |rally|
22
- project = rally.find_project(project_name)
23
- Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
24
+ Crab::Rally.new(opts[:dry]) do |rally|
25
+ project = rally.find_project(project_name)
26
+ Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
24
27
 
25
- rally.find_releases(project).each do |release|
26
- puts release.name
28
+ rally.find_releases(project).each do |release|
29
+ puts release.name
30
+ end
31
+ end
32
+ end
27
33
  end
28
34
  end
35
+
36
+ Crab::ReleaseList.run
@@ -1,18 +1,31 @@
1
1
  #!/usr/bin/env ruby
2
2
  # vim: set ft=ruby:
3
+ require 'crab'
3
4
 
4
- cmd = ARGV.shift # get the subcommand
5
+ class Crab::StoryMain
5
6
 
6
- case cmd
7
- when "-h", "--help", NilClass
8
- system "crab-story-help"
9
- exit 0
10
- end
7
+ class << self
8
+
9
+ include Crab::Utilities
10
+
11
+ def run(args=ARGV)
12
+ cmd = args.shift # get the subcommand
11
13
 
12
- unless system("crab-story-#{cmd}", *ARGV)
13
- if $?.exitstatus == 127 # bash 'command not found'
14
- $stderr.puts "Unknown subcommand \"story #{cmd}\""
15
- system "crab-story-help"
16
- exit 127
14
+ case cmd
15
+ when "-h", "--help", NilClass
16
+ system "crab-story-help"
17
+ exit 0
18
+ end
19
+
20
+ unless system("crab-story-#{cmd}", *args)
21
+ if $?.exitstatus == 127 # bash 'command not found'
22
+ logger.error "Unknown subcommand \"story #{cmd}\""
23
+ system "crab-story-help"
24
+ exit 1
25
+ end
26
+ end
27
+ end
17
28
  end
18
29
  end
30
+
31
+ Crab::StoryMain.run
@@ -1,19 +1,27 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- opts = Trollop::options do
5
- banner <<-BANNER
5
+ class Crab::StoryCreate
6
+
7
+ def self.run(args=ARGV)
8
+ opts = Trollop::options(args) do
9
+ banner <<-BANNER
6
10
  crab story create: create a new story in Rally
7
11
 
8
12
  Usage: crab story create <name> [options*]
9
- BANNER
10
- opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
11
- end
13
+ BANNER
14
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
15
+ end
12
16
 
13
- name = ARGV.join(" ")
14
- Trollop::die "Please specify a name for the story" if name.blank?
17
+ name = args.join(" ")
18
+ Trollop::die "Please specify a name for the story" if name.blank?
15
19
 
16
- Crab::Rally.new(opts[:dry]) do |rally|
17
- story = rally.create_story :name => name
18
- puts "#{story.formatted_id}: #{story.name} (#{story.state})"
20
+ Crab::Rally.new(opts[:dry]) do |rally|
21
+ story = rally.create_story :name => name
22
+ puts "#{story.formatted_id}: #{story.name} (#{story.state})"
23
+ end
24
+ end
19
25
  end
26
+
27
+ Crab::StoryCreate.run
@@ -1,59 +1,73 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- include Crab::Utilities
5
+ class Crab::StoryUpdate
5
6
 
6
- cmd_opts = Trollop::options do
7
- banner <<-BANNER
7
+ class << self
8
+
9
+ include Crab::Utilities
10
+
11
+ def run(args=ARGV)
12
+
13
+ cmd_opts = Trollop::options(args) do
14
+ banner <<-BANNER
8
15
  crab story update: update a story in Rally
9
16
 
10
17
  Usage: crab story update <id> [options*]
11
- BANNER
12
- opt :name, "Name (title)", :type => String, :short => "-n"
13
- opt :state, "State (one of: #{Crab::Story::VALID_STATES.join(" ")})", :type => String, :short => "-t"
14
- opt :estimate, "Estimate", :type => :int, :short => "-e"
15
- opt :iteration, "Iteration", :type => String, :short => "-i"
16
- opt :release, "Release", :type => String, :short => "-r"
17
- opt :blocked, "Blocked", :short => "-b"
18
- opt :unblocked, "Unblocked", :short => "-u"
19
- opt :parent, "Parent", :type => String, :short => "-p"
20
- opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
21
- end
18
+ BANNER
19
+ opt :name, "Name (title)", :type => String, :short => "-n"
20
+ opt :description, "Description", :type => String, :short => "-d"
21
+ opt :state, "State (one of: #{Crab::Story::VALID_STATES.join(" ")})", :type => String, :short => "-t"
22
+ opt :estimate, "Estimate", :type => :int, :short => "-e"
23
+ opt :iteration, "Iteration", :type => String, :short => "-i"
24
+ opt :release, "Release", :type => String, :short => "-r"
25
+ opt :blocked, "Blocked", :short => "-b"
26
+ opt :unblocked, "Unblocked", :short => "-u"
27
+ opt :parent, "Parent", :type => String, :short => "-p"
28
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
29
+ end
22
30
 
23
- Trollop::die "No story given" if ARGV.empty?
24
- Trollop::die "Nothing to update. Please provide some options" unless cmd_opts.any? {|k, v| k.to_s =~ /_given$/ }
31
+ Trollop::die "No story given" if args.empty?
32
+ Trollop::die "Nothing to update. Please provide some options" unless cmd_opts.any? {|k, v| k.to_s =~ /_given$/ }
25
33
 
26
- opts = {}
27
- opts[:name] = cmd_opts[:name] if cmd_opts[:name_given]
28
- opts[:schedule_state] = state_from(cmd_opts[:state]) if cmd_opts[:state_given]
34
+ opts = {}
35
+ opts[:name] = cmd_opts[:name] if cmd_opts[:name_given]
36
+ opts[:description] = cmd_opts[:description] if cmd_opts[:description_given]
37
+ opts[:schedule_state] = state_from(cmd_opts[:state]) if cmd_opts[:state_given]
29
38
 
30
- if cmd_opts[:estimate_given]
31
- opts[:plan_estimate] = cmd_opts[:estimate] # nobody is going to remember "Plan Estimate", really
32
- end
39
+ if cmd_opts[:estimate_given]
40
+ opts[:plan_estimate] = cmd_opts[:estimate] # nobody is going to remember "Plan Estimate", really
41
+ end
33
42
 
34
- opts[:blocked] = cmd_opts[:blocked] if cmd_opts[:blocked_given]
35
- opts[:blocked] = !cmd_opts[:unblocked] if cmd_opts[:unblocked_given]
43
+ opts[:blocked] = cmd_opts[:blocked] if cmd_opts[:blocked_given]
44
+ opts[:blocked] = !cmd_opts[:unblocked] if cmd_opts[:unblocked_given]
36
45
 
37
- Crab::Rally.new(opts[:dry]) do |rally|
38
- rally.connect
46
+ Crab::Rally.new(opts[:dry]) do |rally|
39
47
 
40
- story = rally.find_story_with_id ARGV.first
48
+ story = rally.find_story_with_id args.first
41
49
 
42
- if cmd_opts[:iteration_given]
43
- opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration], story.rally_object.project
44
- end
50
+ if cmd_opts[:iteration_given]
51
+ opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration], story.rally_object.project
52
+ end
45
53
 
46
- if cmd_opts[:release_given]
47
- opts[:release] = rally.find_release_by_name cmd_opts[:release], story.rally_object.project
48
- end
54
+ if cmd_opts[:release_given]
55
+ opts[:release] = rally.find_release_by_name cmd_opts[:release], story.rally_object.project
56
+ end
49
57
 
50
- if cmd_opts[:parent_given]
51
- opts[:parent] = rally.find_story_with_id(cmd_opts[:parent]).rally_object
52
- end
58
+ if cmd_opts[:parent_given]
59
+ opts[:parent] = rally.find_story_with_id(cmd_opts[:parent]).rally_object
60
+ end
61
+
62
+ opts[:name] = story.name if opts[:name].blank?
53
63
 
54
- opts[:name] = story.name if opts[:name].blank?
64
+ story.update opts
55
65
 
56
- story.update opts
66
+ puts "#{story.formatted_id}: #{story.name} (#{story.state})"
67
+ end
57
68
 
58
- puts "#{story.formatted_id}: #{story.name} (#{story.state})"
69
+ end
70
+ end
59
71
  end
72
+
73
+ Crab::StoryUpdate.run
@@ -1,19 +1,27 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- opts = Trollop::options do
5
- banner <<-BANNER
5
+ class Crab::StoryCreate
6
+
7
+ def self.run(args=ARGV)
8
+ opts = Trollop::options(args) do
9
+ banner <<-BANNER
6
10
  crab story create: create a new story in Rally
7
11
 
8
12
  Usage: crab story create <name> [options*]
9
- BANNER
10
- opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
11
- end
13
+ BANNER
14
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
15
+ end
12
16
 
13
- name = ARGV.join(" ")
14
- Trollop::die "Please specify a name for the story" if name.blank?
17
+ name = args.join(" ")
18
+ Trollop::die "Please specify a name for the story" if name.blank?
15
19
 
16
- Crab::Rally.new(opts[:dry]) do |rally|
17
- story = rally.create_story :name => name
18
- puts "#{story.formatted_id}: #{story.name} (#{story.state})"
20
+ Crab::Rally.new(opts[:dry]) do |rally|
21
+ story = rally.create_story :name => name
22
+ puts "#{story.formatted_id}: #{story.name} (#{story.state})"
23
+ end
24
+ end
19
25
  end
26
+
27
+ Crab::StoryCreate.run