crab 0.2.3 → 0.2.4
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/bin/crab-iteration-list +28 -0
- data/bin/crab-release-help +1 -0
- data/bin/crab-release-list +28 -0
- data/bin/crab-story-change +1 -1
- data/bin/crab-story-find +10 -2
- data/bin/crab-story-list +10 -2
- data/bin/crab-story-ls +10 -2
- data/bin/crab-story-up +1 -1
- data/bin/crab-story-update +1 -1
- data/bin/crab-testcase-find +34 -6
- data/bin/crab-testcase-ls +34 -6
- data/features/subcommand-help.feature +8 -1
- data/lib/crab/rally.rb +42 -7
- data/lib/crab/version.rb +1 -1
- metadata +7 -3
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# vim: set ft=ruby:
|
3
|
+
|
4
|
+
require 'crab'
|
5
|
+
|
6
|
+
include Crab::Utilities
|
7
|
+
|
8
|
+
opts = Trollop::options do
|
9
|
+
banner <<-BANNER
|
10
|
+
crab iteration list: list iterations available in the current project
|
11
|
+
|
12
|
+
Usage: crab iteration 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
|
17
|
+
|
18
|
+
pattern = ARGV.map(&:strip).reject(&:empty?)
|
19
|
+
project_name = valid_project_name(opts)
|
20
|
+
|
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
|
+
|
25
|
+
rally.find_iterations(project).each do |iteration|
|
26
|
+
puts iteration.name
|
27
|
+
end
|
28
|
+
end
|
data/bin/crab-release-help
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# vim: set ft=ruby:
|
3
|
+
|
4
|
+
require 'crab'
|
5
|
+
|
6
|
+
include Crab::Utilities
|
7
|
+
|
8
|
+
opts = Trollop::options do
|
9
|
+
banner <<-BANNER
|
10
|
+
crab release list: list releases available in the current project
|
11
|
+
|
12
|
+
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
|
17
|
+
|
18
|
+
pattern = ARGV.map(&:strip).reject(&:empty?)
|
19
|
+
project_name = valid_project_name(opts)
|
20
|
+
|
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
|
+
|
25
|
+
rally.find_releases(project).each do |release|
|
26
|
+
puts release.name
|
27
|
+
end
|
28
|
+
end
|
data/bin/crab-story-change
CHANGED
@@ -40,7 +40,7 @@ Crab::Rally.new(opts[:dry]) do |rally|
|
|
40
40
|
story = rally.find_story_with_id ARGV.first
|
41
41
|
|
42
42
|
if cmd_opts[:iteration_given]
|
43
|
-
opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration], story.project
|
43
|
+
opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration], story.rally_object.project
|
44
44
|
Trollop::die "Unknown iteration \"#{cmd_opts[:iteration]}\"" if opts[:iteration].nil?
|
45
45
|
end
|
46
46
|
|
data/bin/crab-story-find
CHANGED
@@ -10,7 +10,10 @@ crab story find: find a story in Rally
|
|
10
10
|
Usage: crab story find [options*] [text]
|
11
11
|
BANNER
|
12
12
|
opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
|
13
|
-
opt :
|
13
|
+
opt :iteration, "Limit search to this iteration", :short => "-i", :type => String
|
14
|
+
opt :release, "Limit search to this release", :short => "-r", :type => String
|
15
|
+
opt :parent, "Limit search to children of this story", :short => "-P", :type => String
|
16
|
+
opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
|
14
17
|
end
|
15
18
|
|
16
19
|
pattern = ARGV.map(&:strip).reject(&:empty?)
|
@@ -20,7 +23,12 @@ Crab::Rally.new(opts[:dry]) do |rally|
|
|
20
23
|
project = rally.find_project(project_name)
|
21
24
|
Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
|
22
25
|
|
23
|
-
|
26
|
+
find_opts = {}
|
27
|
+
find_opts[:iteration] = rally.find_iteration_by_name opts[:iteration], project if opts[:iteration_given]
|
28
|
+
find_opts[:release] = rally.find_release_by_name opts[:release], project if opts[:release_given]
|
29
|
+
find_opts[:parent] = rally.find_story_with_id opts[:parent] if opts[:parent_given]
|
30
|
+
|
31
|
+
rally.find_stories(project, pattern, find_opts).each do |story|
|
24
32
|
puts "#{story.formatted_id}: #{story.name} (#{story.state})"
|
25
33
|
end
|
26
34
|
end
|
data/bin/crab-story-list
CHANGED
@@ -10,7 +10,10 @@ crab story find: find a story in Rally
|
|
10
10
|
Usage: crab story find [options*] [text]
|
11
11
|
BANNER
|
12
12
|
opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
|
13
|
-
opt :
|
13
|
+
opt :iteration, "Limit search to this iteration", :short => "-i", :type => String
|
14
|
+
opt :release, "Limit search to this release", :short => "-r", :type => String
|
15
|
+
opt :parent, "Limit search to children of this story", :short => "-P", :type => String
|
16
|
+
opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
|
14
17
|
end
|
15
18
|
|
16
19
|
pattern = ARGV.map(&:strip).reject(&:empty?)
|
@@ -20,7 +23,12 @@ Crab::Rally.new(opts[:dry]) do |rally|
|
|
20
23
|
project = rally.find_project(project_name)
|
21
24
|
Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
|
22
25
|
|
23
|
-
|
26
|
+
find_opts = {}
|
27
|
+
find_opts[:iteration] = rally.find_iteration_by_name opts[:iteration], project if opts[:iteration_given]
|
28
|
+
find_opts[:release] = rally.find_release_by_name opts[:release], project if opts[:release_given]
|
29
|
+
find_opts[:parent] = rally.find_story_with_id opts[:parent] if opts[:parent_given]
|
30
|
+
|
31
|
+
rally.find_stories(project, pattern, find_opts).each do |story|
|
24
32
|
puts "#{story.formatted_id}: #{story.name} (#{story.state})"
|
25
33
|
end
|
26
34
|
end
|
data/bin/crab-story-ls
CHANGED
@@ -10,7 +10,10 @@ crab story find: find a story in Rally
|
|
10
10
|
Usage: crab story find [options*] [text]
|
11
11
|
BANNER
|
12
12
|
opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
|
13
|
-
opt :
|
13
|
+
opt :iteration, "Limit search to this iteration", :short => "-i", :type => String
|
14
|
+
opt :release, "Limit search to this release", :short => "-r", :type => String
|
15
|
+
opt :parent, "Limit search to children of this story", :short => "-P", :type => String
|
16
|
+
opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
|
14
17
|
end
|
15
18
|
|
16
19
|
pattern = ARGV.map(&:strip).reject(&:empty?)
|
@@ -20,7 +23,12 @@ Crab::Rally.new(opts[:dry]) do |rally|
|
|
20
23
|
project = rally.find_project(project_name)
|
21
24
|
Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
|
22
25
|
|
23
|
-
|
26
|
+
find_opts = {}
|
27
|
+
find_opts[:iteration] = rally.find_iteration_by_name opts[:iteration], project if opts[:iteration_given]
|
28
|
+
find_opts[:release] = rally.find_release_by_name opts[:release], project if opts[:release_given]
|
29
|
+
find_opts[:parent] = rally.find_story_with_id opts[:parent] if opts[:parent_given]
|
30
|
+
|
31
|
+
rally.find_stories(project, pattern, find_opts).each do |story|
|
24
32
|
puts "#{story.formatted_id}: #{story.name} (#{story.state})"
|
25
33
|
end
|
26
34
|
end
|
data/bin/crab-story-up
CHANGED
@@ -40,7 +40,7 @@ Crab::Rally.new(opts[:dry]) do |rally|
|
|
40
40
|
story = rally.find_story_with_id ARGV.first
|
41
41
|
|
42
42
|
if cmd_opts[:iteration_given]
|
43
|
-
opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration], story.project
|
43
|
+
opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration], story.rally_object.project
|
44
44
|
Trollop::die "Unknown iteration \"#{cmd_opts[:iteration]}\"" if opts[:iteration].nil?
|
45
45
|
end
|
46
46
|
|
data/bin/crab-story-update
CHANGED
@@ -40,7 +40,7 @@ Crab::Rally.new(opts[:dry]) do |rally|
|
|
40
40
|
story = rally.find_story_with_id ARGV.first
|
41
41
|
|
42
42
|
if cmd_opts[:iteration_given]
|
43
|
-
opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration], story.project
|
43
|
+
opts[:iteration] = rally.find_iteration_by_name cmd_opts[:iteration], story.rally_object.project
|
44
44
|
Trollop::die "Unknown iteration \"#{cmd_opts[:iteration]}\"" if opts[:iteration].nil?
|
45
45
|
end
|
46
46
|
|
data/bin/crab-testcase-find
CHANGED
@@ -1,10 +1,38 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
1
|
# vim: set ft=ruby :
|
3
|
-
|
4
2
|
require 'crab'
|
5
3
|
|
6
|
-
|
7
|
-
|
4
|
+
include Crab::Utilities
|
5
|
+
|
6
|
+
opts = Trollop::options do
|
7
|
+
banner <<-BANNER
|
8
|
+
crab testcase find: find a testcase in Rally
|
9
|
+
|
10
|
+
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
|
20
|
+
|
21
|
+
pattern = ARGV.map(&:strip).reject(&:empty?)
|
22
|
+
project_name = valid_project_name(opts)
|
23
|
+
|
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?
|
27
|
+
|
28
|
+
find_opts = {}
|
29
|
+
find_opts[:story] = rally.find_story_with_id opts[:story] if opts[:story_given]
|
8
30
|
|
9
|
-
|
10
|
-
|
31
|
+
rally.find_testcases(project, pattern, find_opts).each do |tc|
|
32
|
+
if tc.story
|
33
|
+
puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
|
34
|
+
else
|
35
|
+
puts "#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/bin/crab-testcase-ls
CHANGED
@@ -1,10 +1,38 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
1
|
# vim: set ft=ruby :
|
3
|
-
|
4
2
|
require 'crab'
|
5
3
|
|
6
|
-
|
7
|
-
|
4
|
+
include Crab::Utilities
|
5
|
+
|
6
|
+
opts = Trollop::options do
|
7
|
+
banner <<-BANNER
|
8
|
+
crab testcase find: find a testcase in Rally
|
9
|
+
|
10
|
+
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
|
20
|
+
|
21
|
+
pattern = ARGV.map(&:strip).reject(&:empty?)
|
22
|
+
project_name = valid_project_name(opts)
|
23
|
+
|
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?
|
27
|
+
|
28
|
+
find_opts = {}
|
29
|
+
find_opts[:story] = rally.find_story_with_id opts[:story] if opts[:story_given]
|
8
30
|
|
9
|
-
|
10
|
-
|
31
|
+
rally.find_testcases(project, pattern, find_opts).each do |tc|
|
32
|
+
if tc.story
|
33
|
+
puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
|
34
|
+
else
|
35
|
+
puts "#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -26,6 +26,7 @@ Feature: Subcommand Help
|
|
26
26
|
| release | Usage: crab release <command> [options*] |
|
27
27
|
| story | Usage: crab story <command> [options*] |
|
28
28
|
| testcase | Usage: crab testcase <command> [options*] |
|
29
|
+
|
29
30
|
| story create | Usage: crab story create <name> [options*] |
|
30
31
|
| story update | Usage: crab story update <id> [options*] |
|
31
32
|
| story delete | Usage: crab story delete <id> [options*] |
|
@@ -35,11 +36,17 @@ Feature: Subcommand Help
|
|
35
36
|
| story rename | Usage: crab story rename <id> <name> [options*] |
|
36
37
|
| story show | Usage: crab story show <id> [options*] |
|
37
38
|
| story help | Usage: crab story <command> [options*] |
|
39
|
+
|
38
40
|
| testcase create | Usage: crab testcase create <story> <name> [options*] |
|
39
41
|
| testcase update | Usage: crab testcase update <id> [options*] |
|
40
42
|
| testcase delete | Usage: crab testcase delete <id> [options*] |
|
41
|
-
| testcase find | Usage: crab testcase find
|
43
|
+
| testcase find | Usage: crab testcase find [options*] [text] |
|
42
44
|
| testcase show | Usage: crab testcase show <id> [options*] |
|
43
45
|
| testcase help | Usage: crab testcase <command> [options*] |
|
44
46
|
|
47
|
+
| release help | Usage: crab release <command> [options*] |
|
48
|
+
| release list | Usage: crab release list [options*] |
|
49
|
+
|
50
|
+
| iteration help | Usage: crab iteration <command> [options*] |
|
51
|
+
| iteration list | Usage: crab iteration list [options*] |
|
45
52
|
|
data/lib/crab/rally.rb
CHANGED
@@ -23,26 +23,53 @@ module Crab
|
|
23
23
|
|
24
24
|
def find_story_with_id story_id
|
25
25
|
story = @rally.find(:hierarchical_requirement) { equal :formatted_i_d, story_id }.first
|
26
|
+
Trollop::die "Story with ID #{story_id.inspect} not found" if story.nil?
|
26
27
|
Crab::Story.new(story, @dry_run)
|
27
28
|
end
|
28
29
|
|
29
|
-
def
|
30
|
-
|
31
|
-
Crab::
|
30
|
+
def find_testcases(project, pattern, opts)
|
31
|
+
if pattern.join.empty? && opts.empty?
|
32
|
+
return @rally.find_all(:test_case, :fetch => true, :project => project).map {|tc| Crab::TestCase.new(tc, @dry_run) }
|
32
33
|
end
|
34
|
+
|
35
|
+
rally_testcases = @rally.find(:test_case, :fetch => true, :project => project) do
|
36
|
+
_or_ do
|
37
|
+
(pattern.map(&:downcase) + pattern.map(&:capitalize)).each do |word|
|
38
|
+
contains :name, word
|
39
|
+
contains :description, word
|
40
|
+
contains :notes, word
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
equal :work_product, opts[:story].rally_object if opts[:story]
|
45
|
+
|
46
|
+
equal :risk, opts[:risk].capitalize if opts[:risk]
|
47
|
+
equal :method, opts[:method].capitalize if opts[:method]
|
48
|
+
equal :priority, opts[:priority].capitalize if opts[:priority]
|
49
|
+
equal :type, opts[:type].capitalize if opts[:type]
|
50
|
+
end
|
51
|
+
|
52
|
+
rally_testcases.map {|tc| Crab::TestCase.new(tc, @dry_run) }
|
33
53
|
end
|
34
54
|
|
35
|
-
def find_stories(project, pattern
|
36
|
-
|
55
|
+
def find_stories(project, pattern, opts)
|
56
|
+
if pattern.join.empty? && opts.empty?
|
57
|
+
return @rally.find_all(:hierarchical_requirement, :fetch => true, :project => project).map {|s| Crab::Story.new(s, @dry_run) }
|
58
|
+
end
|
59
|
+
|
60
|
+
p pattern
|
37
61
|
|
38
62
|
rally_stories = @rally.find(:hierarchical_requirement, :fetch => true, :project => project) do
|
39
|
-
|
40
|
-
|
63
|
+
_or_ do
|
64
|
+
(pattern.map(&:downcase) + pattern.map(&:capitalize)).each do |word|
|
41
65
|
contains :name, word
|
42
66
|
contains :description, word
|
43
67
|
contains :notes, word
|
44
68
|
end
|
45
69
|
end
|
70
|
+
equal :iteration, opts[:iteration] if opts[:iteration]
|
71
|
+
equal :release, opts[:release] if opts[:release]
|
72
|
+
equal :parent, opts[:parent].rally_object if opts[:parent]
|
46
73
|
end
|
47
74
|
|
48
75
|
rally_stories.map {|story| Crab::Story.new(story, @dry_run) }
|
@@ -52,10 +79,18 @@ module Crab
|
|
52
79
|
@rally.find(:project, :fetch => true) { equal :name, name }.first
|
53
80
|
end
|
54
81
|
|
82
|
+
def find_iterations(project)
|
83
|
+
@rally.find_all(:iteration, :project => project)
|
84
|
+
end
|
85
|
+
|
55
86
|
def find_iteration_by_name(name, project)
|
56
87
|
@rally.find(:iteration, :project => project) { equal :name, name }.first
|
57
88
|
end
|
58
89
|
|
90
|
+
def find_releases(project)
|
91
|
+
@rally.find_all(:release, :project => project, :fetch => true)
|
92
|
+
end
|
93
|
+
|
59
94
|
def find_release_by_name(name, project)
|
60
95
|
@rally.find(:release, :project => project) { equal :name, name }.first
|
61
96
|
end
|
data/lib/crab/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 4
|
10
|
+
version: 0.2.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Carlos Villela
|
@@ -152,11 +152,13 @@ executables:
|
|
152
152
|
- crab-help
|
153
153
|
- crab-iteration
|
154
154
|
- crab-iteration-help
|
155
|
+
- crab-iteration-list
|
155
156
|
- crab-login
|
156
157
|
- crab-logout
|
157
158
|
- crab-project
|
158
159
|
- crab-release
|
159
160
|
- crab-release-help
|
161
|
+
- crab-release-list
|
160
162
|
- crab-story
|
161
163
|
- crab-story-add
|
162
164
|
- crab-story-change
|
@@ -208,11 +210,13 @@ files:
|
|
208
210
|
- bin/crab-help
|
209
211
|
- bin/crab-iteration
|
210
212
|
- bin/crab-iteration-help
|
213
|
+
- bin/crab-iteration-list
|
211
214
|
- bin/crab-login
|
212
215
|
- bin/crab-logout
|
213
216
|
- bin/crab-project
|
214
217
|
- bin/crab-release
|
215
218
|
- bin/crab-release-help
|
219
|
+
- bin/crab-release-list
|
216
220
|
- bin/crab-story
|
217
221
|
- bin/crab-story-add
|
218
222
|
- bin/crab-story-change
|