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.
- data/README.md +0 -1
- data/bin/crab +27 -14
- data/bin/crab-help +10 -2
- data/bin/crab-it +25 -11
- data/bin/crab-it-help +11 -2
- data/bin/crab-it-list +25 -15
- data/bin/crab-iteration +25 -11
- data/bin/crab-iteration-help +11 -2
- data/bin/crab-iteration-list +25 -15
- data/bin/crab-login +24 -13
- data/bin/crab-logout +22 -9
- data/bin/crab-project +42 -32
- data/bin/crab-rel +25 -11
- data/bin/crab-rel-help +12 -3
- data/bin/crab-rel-list +23 -15
- data/bin/crab-release +25 -11
- data/bin/crab-release-help +12 -3
- data/bin/crab-release-list +23 -15
- data/bin/crab-st +24 -11
- data/bin/crab-st-add +18 -10
- data/bin/crab-st-change +53 -39
- data/bin/crab-st-create +18 -10
- data/bin/crab-st-del +19 -11
- data/bin/crab-st-delete +19 -11
- data/bin/crab-st-find +32 -21
- data/bin/crab-st-help +11 -2
- data/bin/crab-st-list +32 -21
- data/bin/crab-st-ls +32 -21
- data/bin/crab-st-move +26 -14
- data/bin/crab-st-mv +26 -14
- data/bin/crab-st-new +18 -10
- data/bin/crab-st-pull +28 -20
- data/bin/crab-st-ren +26 -14
- data/bin/crab-st-rename +26 -14
- data/bin/crab-st-rm +19 -11
- data/bin/crab-st-show +19 -11
- data/bin/crab-st-up +53 -39
- data/bin/crab-st-update +53 -39
- data/bin/crab-story +24 -11
- data/bin/crab-story-add +18 -10
- data/bin/crab-story-change +53 -39
- data/bin/crab-story-create +18 -10
- data/bin/crab-story-del +19 -11
- data/bin/crab-story-delete +19 -11
- data/bin/crab-story-diff +54 -0
- data/bin/crab-story-find +32 -21
- data/bin/crab-story-help +11 -2
- data/bin/crab-story-list +32 -21
- data/bin/crab-story-ls +32 -21
- data/bin/crab-story-move +26 -14
- data/bin/crab-story-mv +26 -14
- data/bin/crab-story-new +18 -10
- data/bin/crab-story-pull +28 -20
- data/bin/crab-story-ren +26 -14
- data/bin/crab-story-rename +26 -14
- data/bin/crab-story-rm +19 -11
- data/bin/crab-story-show +19 -11
- data/bin/crab-story-up +53 -39
- data/bin/crab-story-update +53 -39
- data/bin/crab-tc +24 -11
- data/bin/crab-tc-add +32 -20
- data/bin/crab-tc-change +18 -8
- data/bin/crab-tc-create +32 -20
- data/bin/crab-tc-del +18 -10
- data/bin/crab-tc-delete +18 -10
- data/bin/crab-tc-find +32 -21
- data/bin/crab-tc-help +11 -2
- data/bin/crab-tc-list +32 -21
- data/bin/crab-tc-ls +32 -21
- data/bin/crab-tc-new +32 -20
- data/bin/crab-tc-rm +18 -10
- data/bin/crab-tc-show +28 -15
- data/bin/crab-tc-up +18 -8
- data/bin/crab-tc-update +18 -8
- data/bin/crab-testcase +24 -11
- data/bin/crab-testcase-add +32 -20
- data/bin/crab-testcase-change +18 -8
- data/bin/crab-testcase-create +32 -20
- data/bin/crab-testcase-del +18 -10
- data/bin/crab-testcase-delete +18 -10
- data/bin/crab-testcase-find +32 -21
- data/bin/crab-testcase-help +11 -2
- data/bin/crab-testcase-list +32 -21
- data/bin/crab-testcase-ls +32 -21
- data/bin/crab-testcase-new +32 -20
- data/bin/crab-testcase-rm +18 -10
- data/bin/crab-testcase-show +28 -15
- data/bin/crab-testcase-up +18 -8
- data/bin/crab-testcase-update +18 -8
- data/bin/crab-truncate +1 -0
- data/bin/crab-version +2 -1
- data/features/subcommand-help.feature +1 -0
- data/lib/crab.rb +2 -0
- data/lib/crab/cucumber_to_rally_adapter.rb +48 -0
- data/lib/crab/rally.rb +21 -1
- data/lib/crab/utilities.rb +10 -2
- data/lib/crab/version.rb +1 -1
- metadata +7 -4
data/bin/crab-story-rm
CHANGED
@@ -1,21 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
1
2
|
# vim: set ft=ruby :
|
2
3
|
require 'crab'
|
3
4
|
|
4
|
-
|
5
|
-
|
5
|
+
class Crab::StoryDelete
|
6
|
+
|
7
|
+
def self.run(args=ARGV)
|
8
|
+
opts = Trollop::options(args) do
|
9
|
+
banner <<-BANNER
|
6
10
|
crab story delete: delete an existing story in Rally
|
7
11
|
|
8
12
|
Usage: crab story delete <id> [options*]
|
9
|
-
|
10
|
-
|
11
|
-
end
|
13
|
+
BANNER
|
14
|
+
opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
|
15
|
+
end
|
12
16
|
|
13
|
-
id =
|
14
|
-
Trollop::die "Story ID must be specified" if id.blank?
|
17
|
+
id = args.join(" ")
|
18
|
+
Trollop::die "Story ID must be specified" if id.blank?
|
15
19
|
|
16
|
-
Crab::Rally.new(opts[:dry]) do |rally|
|
17
|
-
|
18
|
-
|
20
|
+
Crab::Rally.new(opts[:dry]) do |rally|
|
21
|
+
story = rally.find_story_with_id id
|
22
|
+
story.delete
|
19
23
|
|
20
|
-
|
24
|
+
puts "Story #{id} deleted."
|
25
|
+
end
|
26
|
+
end
|
21
27
|
end
|
28
|
+
|
29
|
+
Crab::StoryDelete.run
|
data/bin/crab-story-show
CHANGED
@@ -1,20 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
1
2
|
# vim: set ft=ruby :
|
2
3
|
require 'crab'
|
3
4
|
|
4
|
-
|
5
|
-
|
5
|
+
class Crab::StoryShow
|
6
|
+
|
7
|
+
def self.run(args=ARGV)
|
8
|
+
opts = Trollop::options(args) do
|
9
|
+
banner <<-BANNER
|
6
10
|
crab story show: displays a story in Rally as a Cucumber feature
|
7
11
|
|
8
12
|
Usage: crab story show <id> [options*]"
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
13
|
+
BANNER
|
14
|
+
opt :language, "Language to display Cucumber features in (ISO code)", :default => "en", :short => "-l"
|
15
|
+
opt :testcases, "Also convert test cases to scenarios (similar to crab testcase show)", :short => "-t", :default => true
|
16
|
+
opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
|
17
|
+
end
|
14
18
|
|
15
|
-
id =
|
16
|
-
Crab::Rally.new(opts[:dry]) do |rally|
|
17
|
-
|
19
|
+
id = args.first
|
20
|
+
Crab::Rally.new(opts[:dry]) do |rally|
|
21
|
+
story = rally.find_story_with_id(id)
|
18
22
|
|
19
|
-
|
23
|
+
puts Crab::CucumberFeature.new(opts[:language]).generate_from(story, opts[:testcases])
|
24
|
+
end
|
25
|
+
end
|
20
26
|
end
|
27
|
+
|
28
|
+
Crab::StoryShow.run
|
data/bin/crab-story-up
CHANGED
@@ -1,59 +1,73 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
1
2
|
# vim: set ft=ruby :
|
2
3
|
require 'crab'
|
3
4
|
|
4
|
-
|
5
|
+
class Crab::StoryUpdate
|
5
6
|
|
6
|
-
|
7
|
-
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
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[:
|
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
|
-
|
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
|
-
|
48
|
+
story = rally.find_story_with_id args.first
|
41
49
|
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
51
|
-
|
52
|
-
|
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
|
-
|
64
|
+
story.update opts
|
55
65
|
|
56
|
-
|
66
|
+
puts "#{story.formatted_id}: #{story.name} (#{story.state})"
|
67
|
+
end
|
57
68
|
|
58
|
-
|
69
|
+
end
|
70
|
+
end
|
59
71
|
end
|
72
|
+
|
73
|
+
Crab::StoryUpdate.run
|
data/bin/crab-story-update
CHANGED
@@ -1,59 +1,73 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
1
2
|
# vim: set ft=ruby :
|
2
3
|
require 'crab'
|
3
4
|
|
4
|
-
|
5
|
+
class Crab::StoryUpdate
|
5
6
|
|
6
|
-
|
7
|
-
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
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[:
|
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
|
-
|
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
|
-
|
48
|
+
story = rally.find_story_with_id args.first
|
41
49
|
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
51
|
-
|
52
|
-
|
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
|
-
|
64
|
+
story.update opts
|
55
65
|
|
56
|
-
|
66
|
+
puts "#{story.formatted_id}: #{story.name} (#{story.state})"
|
67
|
+
end
|
57
68
|
|
58
|
-
|
69
|
+
end
|
70
|
+
end
|
59
71
|
end
|
72
|
+
|
73
|
+
Crab::StoryUpdate.run
|
data/bin/crab-tc
CHANGED
@@ -1,18 +1,31 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# vim: set ft=ruby:
|
3
|
+
require 'crab'
|
3
4
|
|
4
|
-
|
5
|
+
class Crab::TestCaseMain
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
class << self
|
8
|
+
|
9
|
+
include Crab::Utilities
|
10
|
+
|
11
|
+
def run(args=ARGV)
|
12
|
+
cmd = args.shift # get the subcommand
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
data/bin/crab-tc-add
CHANGED
@@ -1,29 +1,41 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
1
2
|
# vim: set ft=ruby :
|
2
3
|
require 'crab'
|
3
4
|
|
4
|
-
|
5
|
+
class Crab::TestCaseCreate
|
5
6
|
|
6
|
-
|
7
|
-
crab testcase create: add a test case to a story in Rally
|
7
|
+
class << self
|
8
8
|
|
9
|
-
|
10
|
-
BANNER
|
9
|
+
include Crab::Utilities
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
-
|
27
|
-
|
28
|
-
|
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
|
data/bin/crab-tc-change
CHANGED
@@ -1,18 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
1
2
|
# vim: set ft=ruby :
|
2
3
|
require 'crab'
|
3
4
|
|
4
|
-
|
5
|
+
class Crab::TestCaseUpdate
|
5
6
|
|
6
|
-
|
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 =
|
17
|
+
tc_id = args.shift
|
13
18
|
|
14
|
-
Crab::Rally.new(opts[:dry]) do |rally|
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|