crab 0.2.7 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
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