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,24 +1,37 @@
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::TestCaseShow
6
+
7
+ class << self
8
+
9
+ include Crab::Utilities
10
+
11
+ def run(args=ARGV)
12
+ opts = Trollop::options(args) do
13
+ banner <<-BANNER
6
14
  crab testcase show: displays a testcase in Rally as a Cucumber scenario
7
15
 
8
16
  Usage: crab testcase show <id> [options*]"
9
- BANNER
10
- opt :language, "Language to display Cucumber features in (ISO code)", :default => "en", :short => "-l"
11
- opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
12
- end
17
+ BANNER
18
+ opt :language, "Language to display Cucumber features in (ISO code)", :default => "en", :short => "-l"
19
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
20
+ end
13
21
 
14
- id = ARGV.shift
15
- unless id
16
- $stderr.puts "Error: No test case ID provided."
17
- system "crab-testcase-help"
18
- exit 1
19
- end
22
+ id = args.shift
23
+ unless id
24
+ logger.error "Error: No test case ID provided."
25
+ system "crab-testcase-help"
26
+ exit 1
27
+ end
20
28
 
21
- Crab::Rally.new(opts[:dry]) do |rally|
22
- tc = rally.find_test_case id
23
- puts Crab::CucumberScenario.new(opts[:language]).generate_from(tc).strip
29
+ Crab::Rally.new(opts[:dry]) do |rally|
30
+ tc = rally.find_test_case id
31
+ puts Crab::CucumberScenario.new(opts[:language]).generate_from(tc).strip
32
+ end
33
+ end
34
+ end
24
35
  end
36
+
37
+ Crab::TestCaseShow.run
@@ -1,18 +1,28 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- include Crab::Utilities
5
+ class Crab::TestCaseUpdate
5
6
 
6
- opts = add_or_update_options <<-BANNER
7
+ class << self
8
+ include Crab::Utilities
9
+
10
+ def run(args=ARGV)
11
+ opts = add_or_update_options <<-BANNER, args
7
12
  crab testcase update: update a test case in Rally
8
13
 
9
14
  Usage: crab testcase update <id> [options*]
10
- BANNER
15
+ BANNER
11
16
 
12
- tc_id = ARGV.shift
17
+ tc_id = args.shift
13
18
 
14
- Crab::Rally.new(opts[:dry]) do |rally|
15
- tc = rally.find_test_case(tc_id)
16
- tc.update(sanitize_options(opts))
17
- puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
19
+ Crab::Rally.new(opts[:dry]) do |rally|
20
+ tc = rally.find_test_case(tc_id)
21
+ tc.update(sanitize_options(opts))
22
+ puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
23
+ end
24
+ end
25
+ end
18
26
  end
27
+
28
+ Crab::TestCaseUpdate.run
@@ -1,18 +1,28 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- include Crab::Utilities
5
+ class Crab::TestCaseUpdate
5
6
 
6
- opts = add_or_update_options <<-BANNER
7
+ class << self
8
+ include Crab::Utilities
9
+
10
+ def run(args=ARGV)
11
+ opts = add_or_update_options <<-BANNER, args
7
12
  crab testcase update: update a test case in Rally
8
13
 
9
14
  Usage: crab testcase update <id> [options*]
10
- BANNER
15
+ BANNER
11
16
 
12
- tc_id = ARGV.shift
17
+ tc_id = args.shift
13
18
 
14
- Crab::Rally.new(opts[:dry]) do |rally|
15
- tc = rally.find_test_case(tc_id)
16
- tc.update(sanitize_options(opts))
17
- puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
19
+ Crab::Rally.new(opts[:dry]) do |rally|
20
+ tc = rally.find_test_case(tc_id)
21
+ tc.update(sanitize_options(opts))
22
+ puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
23
+ end
24
+ end
25
+ end
18
26
  end
27
+
28
+ Crab::TestCaseUpdate.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::TestCaseMain
5
6
 
6
- case cmd
7
- when "-h", "--help", NilClass
8
- system "crab-testcase-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-testcase-#{cmd}", *ARGV)
13
- if $?.exitstatus == 127 # bash 'command not found'
14
- $stderr.puts "Unknown subcommand \"testcase #{cmd}\""
15
- system "crab-testcase-help"
16
- exit 127
14
+ case cmd
15
+ when "-h", "--help", NilClass
16
+ system "crab-testcase-help"
17
+ exit 0
18
+ end
19
+
20
+ unless system("crab-testcase-#{cmd}", *args)
21
+ if $?.exitstatus == 127 # bash 'command not found'
22
+ logger.error "Unknown subcommand \"testcase #{cmd}\""
23
+ system "crab-testcase-help"
24
+ exit 1
25
+ end
26
+ end
27
+ end
17
28
  end
18
29
  end
30
+
31
+ Crab::TestCaseMain.run
@@ -1,29 +1,41 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- include Crab::Utilities
5
+ class Crab::TestCaseCreate
5
6
 
6
- opts = add_or_update_options <<-BANNER
7
- crab testcase create: add a test case to a story in Rally
7
+ class << self
8
8
 
9
- Usage: crab testcase create <story> <name> [options*]
10
- BANNER
9
+ include Crab::Utilities
11
10
 
12
- story_id = ARGV.shift
13
- unless story_id
14
- $stderr.puts "Error: Story ID not provided."
15
- system "crab-testcase-help"
16
- exit 1
17
- end
11
+ def run(args=ARGV)
12
+ opts = add_or_update_options <<-BANNER, args
13
+ crab testcase create: add a test case to a story in Rally
18
14
 
19
- name = ARGV.join(" ")
20
- unless name
21
- $stderr.puts "Error: Test case name not provided."
22
- system "crab-testcase-help"
23
- exit 1
24
- end
15
+ Usage: crab testcase create <story> <name> [options*]
16
+ BANNER
17
+
18
+ story_id = args.shift
19
+ unless story_id
20
+ logger.error "Error: Story ID not provided."
21
+ system "crab-testcase-help"
22
+ exit 1
23
+ end
25
24
 
26
- Crab::Rally.new(opts[:dry]) do |rally|
27
- tc = rally.create_test_case(story_id, name, sanitize_options(opts))
28
- puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
25
+ name = args.join(" ")
26
+ unless name
27
+ logger.error "Error: Test case name not provided."
28
+ system "crab-testcase-help"
29
+ exit 1
30
+ end
31
+
32
+ Crab::Rally.new(opts[:dry]) do |rally|
33
+ tc = rally.create_test_case(story_id, name, sanitize_options(opts))
34
+ puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
35
+ end
36
+
37
+ end
38
+ end
29
39
  end
40
+
41
+ Crab::TestCaseCreate.run
@@ -1,18 +1,28 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- include Crab::Utilities
5
+ class Crab::TestCaseUpdate
5
6
 
6
- opts = add_or_update_options <<-BANNER
7
+ class << self
8
+ include Crab::Utilities
9
+
10
+ def run(args=ARGV)
11
+ opts = add_or_update_options <<-BANNER, args
7
12
  crab testcase update: update a test case in Rally
8
13
 
9
14
  Usage: crab testcase update <id> [options*]
10
- BANNER
15
+ BANNER
11
16
 
12
- tc_id = ARGV.shift
17
+ tc_id = args.shift
13
18
 
14
- Crab::Rally.new(opts[:dry]) do |rally|
15
- tc = rally.find_test_case(tc_id)
16
- tc.update(sanitize_options(opts))
17
- puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
19
+ Crab::Rally.new(opts[:dry]) do |rally|
20
+ tc = rally.find_test_case(tc_id)
21
+ tc.update(sanitize_options(opts))
22
+ puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
23
+ end
24
+ end
25
+ end
18
26
  end
27
+
28
+ Crab::TestCaseUpdate.run
@@ -1,29 +1,41 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- include Crab::Utilities
5
+ class Crab::TestCaseCreate
5
6
 
6
- opts = add_or_update_options <<-BANNER
7
- crab testcase create: add a test case to a story in Rally
7
+ class << self
8
8
 
9
- Usage: crab testcase create <story> <name> [options*]
10
- BANNER
9
+ include Crab::Utilities
11
10
 
12
- story_id = ARGV.shift
13
- unless story_id
14
- $stderr.puts "Error: Story ID not provided."
15
- system "crab-testcase-help"
16
- exit 1
17
- end
11
+ def run(args=ARGV)
12
+ opts = add_or_update_options <<-BANNER, args
13
+ crab testcase create: add a test case to a story in Rally
18
14
 
19
- name = ARGV.join(" ")
20
- unless name
21
- $stderr.puts "Error: Test case name not provided."
22
- system "crab-testcase-help"
23
- exit 1
24
- end
15
+ Usage: crab testcase create <story> <name> [options*]
16
+ BANNER
17
+
18
+ story_id = args.shift
19
+ unless story_id
20
+ logger.error "Error: Story ID not provided."
21
+ system "crab-testcase-help"
22
+ exit 1
23
+ end
25
24
 
26
- Crab::Rally.new(opts[:dry]) do |rally|
27
- tc = rally.create_test_case(story_id, name, sanitize_options(opts))
28
- puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
25
+ name = args.join(" ")
26
+ unless name
27
+ logger.error "Error: Test case name not provided."
28
+ system "crab-testcase-help"
29
+ exit 1
30
+ end
31
+
32
+ Crab::Rally.new(opts[:dry]) do |rally|
33
+ tc = rally.create_test_case(story_id, name, sanitize_options(opts))
34
+ puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
35
+ end
36
+
37
+ end
38
+ end
29
39
  end
40
+
41
+ Crab::TestCaseCreate.run
@@ -1,18 +1,26 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- Trollop::options do
5
- banner <<-BANNER
5
+ class Crab::TestCaseDelete
6
+
7
+ def self.run(args=ARGV)
8
+ Trollop::options(args) do
9
+ banner <<-BANNER
6
10
  crab testcase delete: delete a test case in Rally
7
11
 
8
12
  Usage: crab testcase delete <id> [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
- tc_id = ARGV.shift
14
- Crab::Rally.new(opts[:dry]) do |rally|
15
- tc = rally.find_test_case(tc_id)
16
- tc.delete
17
- puts "Test case #{tc_id} deleted."
17
+ tc_id = args.shift
18
+ Crab::Rally.new(opts[:dry]) do |rally|
19
+ tc = rally.find_test_case(tc_id)
20
+ tc.delete
21
+ puts "Test case #{tc_id} deleted."
22
+ end
23
+ end
18
24
  end
25
+
26
+ Crab::TestCaseDelete.run
@@ -1,18 +1,26 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- Trollop::options do
5
- banner <<-BANNER
5
+ class Crab::TestCaseDelete
6
+
7
+ def self.run(args=ARGV)
8
+ Trollop::options(args) do
9
+ banner <<-BANNER
6
10
  crab testcase delete: delete a test case in Rally
7
11
 
8
12
  Usage: crab testcase delete <id> [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
- tc_id = ARGV.shift
14
- Crab::Rally.new(opts[:dry]) do |rally|
15
- tc = rally.find_test_case(tc_id)
16
- tc.delete
17
- puts "Test case #{tc_id} deleted."
17
+ tc_id = args.shift
18
+ Crab::Rally.new(opts[:dry]) do |rally|
19
+ tc = rally.find_test_case(tc_id)
20
+ tc.delete
21
+ puts "Test case #{tc_id} deleted."
22
+ end
23
+ end
18
24
  end
25
+
26
+ Crab::TestCaseDelete.run
@@ -1,34 +1,45 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- include Crab::Utilities
5
+ class Crab::TestCaseFind
5
6
 
6
- opts = Trollop::options do
7
- banner <<-BANNER
7
+ class << self
8
+
9
+ include Crab::Utilities
10
+
11
+ def run(args=ARGV)
12
+ opts = Trollop::options(args) do
13
+ banner <<-BANNER
8
14
  crab testcase find: find a testcase in Rally
9
15
 
10
16
  Usage: crab testcase find [options*] [text]
11
- BANNER
12
- opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
13
- opt :story, "Limit search to testcases of this story", :short => "-s", :type => String
14
- opt :priority, "Priority (one of: #{Crab::TestCase::PRIORITIES.join(" ")}", :short => '-P', :type => String
15
- opt :risk, "Risk (one of: #{Crab::TestCase::RISKS.join(" ")})", :short => '-r', :type => String
16
- opt :method, "Method (one of: #{Crab::TestCase::METHODS.join(" ")})", :short => '-m', :type => String
17
- opt :type, "Type (one of: #{Crab::TestCase::TYPES.join(" ")})", :short => '-t', :type => String
18
- opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
19
- end
17
+ BANNER
18
+ opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
19
+ opt :story, "Limit search to testcases of this story", :short => "-s", :type => String
20
+ opt :priority, "Priority (one of: #{Crab::TestCase::PRIORITIES.join(" ")}", :short => '-P', :type => String
21
+ opt :risk, "Risk (one of: #{Crab::TestCase::RISKS.join(" ")})", :short => '-r', :type => String
22
+ opt :method, "Method (one of: #{Crab::TestCase::METHODS.join(" ")})", :short => '-m', :type => String
23
+ opt :type, "Type (one of: #{Crab::TestCase::TYPES.join(" ")})", :short => '-t', :type => String
24
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
25
+ end
20
26
 
21
- pattern = ARGV.map(&:strip).reject(&:empty?)
22
- project_name = valid_project_name(opts)
27
+ pattern = args.map(&:strip).reject(&:empty?)
28
+ project_name = valid_project_name(opts)
23
29
 
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?
30
+ Crab::Rally.new(opts[:dry]) do |rally|
31
+ project = rally.find_project(project_name)
32
+ Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
27
33
 
28
- find_opts = {}
29
- find_opts[:story] = rally.find_story_with_id opts[:story] if opts[:story_given]
34
+ find_opts = {}
35
+ find_opts[:story] = rally.find_story_with_id opts[:story] if opts[:story_given]
30
36
 
31
- rally.find_testcases(project, pattern, find_opts).each do |tc|
32
- puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
37
+ rally.find_testcases(project, pattern, find_opts).each do |tc|
38
+ puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
39
+ end
40
+ end
41
+ end
33
42
  end
34
43
  end
44
+
45
+ Crab::TestCaseFind.run