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
data/README.md CHANGED
@@ -146,7 +146,6 @@ To do / Roadmap
146
146
 
147
147
  - `pull` is not very smart and could detect feature files being moved from one dir to another
148
148
  - Recursively look for a `.crab` directory like Git does with `.git`
149
- - Verbose logging (especially before any change or destructive operations in Rally)
150
149
  - Figure out how to stub or simulate Rally (tests are taking way too long already)
151
150
 
152
151
  ### 0.3.0
data/bin/crab CHANGED
@@ -1,21 +1,34 @@
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::Main
5
6
 
6
- case cmd
7
- when "-h", "--help", NilClass
8
- system "crab-help"
9
- exit 0
10
- when "-v", "--version"
11
- system "crab-version"
12
- exit 0
13
- end
7
+ class << self
8
+
9
+ include Crab::Utilities
10
+
11
+ def run(args=ARGV)
12
+ cmd = args.shift # get the subcommand
14
13
 
15
- unless system("crab-#{cmd}", *ARGV)
16
- if $?.exitstatus == 127 # bash 'command not found'
17
- $stderr.puts "Unknown subcommand #{cmd.inspect}"
18
- system "crab-help"
19
- exit 127
14
+ case cmd
15
+ when "-h", "--help", NilClass
16
+ system "crab-help"
17
+ exit 0
18
+ when "-v", "--version"
19
+ system "crab-version"
20
+ exit 0
21
+ end
22
+
23
+ unless system("crab-#{cmd}", *args)
24
+ if $?.exitstatus == 127 # bash 'command not found'
25
+ logger.error "Unknown subcommand #{cmd.inspect}"
26
+ system "crab-help"
27
+ exit 127
28
+ end
29
+ end
30
+ end
20
31
  end
21
32
  end
33
+
34
+ Crab::Main.run
@@ -1,7 +1,11 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab/version'
3
4
 
4
- puts <<-HELP
5
+ class Crab::Help
6
+
7
+ def self.run
8
+ puts <<-HELP
5
9
  Usage: crab <command> [options*]
6
10
 
7
11
  crab version #{Crab::VERSION}: A Cucumber-Rally bridge
@@ -19,4 +23,8 @@ crab version #{Crab::VERSION}: A Cucumber-Rally bridge
19
23
 
20
24
  --version, -v: Print version and exit
21
25
  --help, -h: Show this message
22
- HELP
26
+ HELP
27
+ end
28
+ end
29
+
30
+ Crab::Help.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::IterationMain
5
6
 
6
- case cmd
7
- when "-h", "--help", NilClass
8
- system "crab-iteration-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-iteration-#{cmd}", *ARGV)
13
- if $?.exitstatus == 127 # bash 'command not found'
14
- $stderr.puts "Unknown subcommand \"iteration #{cmd}\""
15
- system "crab-iteration-help"
16
- exit 127
13
+ cmd = args.shift # get the subcommand
14
+
15
+ case cmd
16
+ when "-h", "--help", NilClass
17
+ system "crab-iteration-help"
18
+ exit 0
19
+ end
20
+
21
+ unless system("crab-iteration-#{cmd}", *args)
22
+ if $?.exitstatus == 127 # bash 'command not found'
23
+ logger.error "Unknown subcommand \"iteration #{cmd}\""
24
+ system "crab-iteration-help"
25
+ exit 1
26
+ end
27
+ end
28
+ end
17
29
  end
18
30
  end
31
+
32
+ Crab::IterationMain.run
@@ -1,6 +1,11 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
3
+ require 'crab'
2
4
 
3
- puts <<-HELP
5
+ class Crab::IterationHelp
6
+
7
+ def self.run
8
+ puts <<-HELP
4
9
  Usage: crab iteration <command> [options*]
5
10
 
6
11
  Available commands:
@@ -9,4 +14,8 @@ Usage: crab iteration <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::IterationHelp.run
@@ -1,28 +1,38 @@
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::IterationList
6
+
7
+ class << self
8
+
9
+ include Crab::Utilities
7
10
 
8
- opts = Trollop::options do
9
- banner <<-BANNER
11
+ def run(args=ARGV)
12
+
13
+ opts = Trollop::options(args) do
14
+ banner <<-BANNER
10
15
  crab iteration list: list iterations available in the current project
11
16
 
12
17
  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
18
+ BANNER
19
+ opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
20
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
21
+ end
17
22
 
18
- pattern = ARGV.map(&:strip).reject(&:empty?)
19
- project_name = valid_project_name(opts)
23
+ pattern = args.map(&:strip).reject(&:empty?)
24
+ project_name = valid_project_name(opts)
20
25
 
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?
26
+ Crab::Rally.new(opts[:dry]) do |rally|
27
+ project = rally.find_project(project_name)
28
+ Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
24
29
 
25
- rally.find_iterations(project).each do |iteration|
26
- puts iteration.name
30
+ rally.find_iterations(project).each do |iteration|
31
+ puts iteration.name
32
+ end
33
+ end
34
+ end
27
35
  end
28
36
  end
37
+
38
+ Crab::IterationList.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::IterationMain
5
6
 
6
- case cmd
7
- when "-h", "--help", NilClass
8
- system "crab-iteration-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-iteration-#{cmd}", *ARGV)
13
- if $?.exitstatus == 127 # bash 'command not found'
14
- $stderr.puts "Unknown subcommand \"iteration #{cmd}\""
15
- system "crab-iteration-help"
16
- exit 127
13
+ cmd = args.shift # get the subcommand
14
+
15
+ case cmd
16
+ when "-h", "--help", NilClass
17
+ system "crab-iteration-help"
18
+ exit 0
19
+ end
20
+
21
+ unless system("crab-iteration-#{cmd}", *args)
22
+ if $?.exitstatus == 127 # bash 'command not found'
23
+ logger.error "Unknown subcommand \"iteration #{cmd}\""
24
+ system "crab-iteration-help"
25
+ exit 1
26
+ end
27
+ end
28
+ end
17
29
  end
18
30
  end
31
+
32
+ Crab::IterationMain.run
@@ -1,6 +1,11 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
3
+ require 'crab'
2
4
 
3
- puts <<-HELP
5
+ class Crab::IterationHelp
6
+
7
+ def self.run
8
+ puts <<-HELP
4
9
  Usage: crab iteration <command> [options*]
5
10
 
6
11
  Available commands:
@@ -9,4 +14,8 @@ Usage: crab iteration <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::IterationHelp.run
@@ -1,28 +1,38 @@
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::IterationList
6
+
7
+ class << self
8
+
9
+ include Crab::Utilities
7
10
 
8
- opts = Trollop::options do
9
- banner <<-BANNER
11
+ def run(args=ARGV)
12
+
13
+ opts = Trollop::options(args) do
14
+ banner <<-BANNER
10
15
  crab iteration list: list iterations available in the current project
11
16
 
12
17
  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
18
+ BANNER
19
+ opt :project, "Project to use (required unless set by 'crab project')", :short => "-p", :type => String
20
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
21
+ end
17
22
 
18
- pattern = ARGV.map(&:strip).reject(&:empty?)
19
- project_name = valid_project_name(opts)
23
+ pattern = args.map(&:strip).reject(&:empty?)
24
+ project_name = valid_project_name(opts)
20
25
 
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?
26
+ Crab::Rally.new(opts[:dry]) do |rally|
27
+ project = rally.find_project(project_name)
28
+ Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
24
29
 
25
- rally.find_iterations(project).each do |iteration|
26
- puts iteration.name
30
+ rally.find_iterations(project).each do |iteration|
31
+ puts iteration.name
32
+ end
33
+ end
34
+ end
27
35
  end
28
36
  end
37
+
38
+ Crab::IterationList.run
@@ -1,25 +1,36 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- include Crab::Utilities
5
+ class Crab::Login
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
  Usage: crab login [options*]
9
15
 
10
16
  Log into Rally. Your credentials will be written to ~/.crab/credentials.
11
- BANNER
17
+ BANNER
12
18
 
13
- opt :username, "Username", :type => String, :short => "-u"
14
- opt :password, "Password", :type => String, :short => "-p"
15
- end
19
+ opt :username, "Username", :type => String, :short => "-u"
20
+ opt :password, "Password", :type => String, :short => "-p"
21
+ end
22
+
23
+ username = opts[:username_given] ? opts[:username] : ask("Username: ")
24
+ password = opts[:password_given] ? opts[:password] : ask("Password: ") {|q| q.echo = false }
16
25
 
17
- username = opts[:username_given] ? opts[:username] : ask("Username: ")
18
- password = opts[:password_given] ? opts[:password] : ask("Password: ") {|q| q.echo = false }
26
+ File.open(credentials_file, 'w') do |file|
27
+ file.puts username
28
+ file.puts password
29
+ end
19
30
 
20
- File.open(credentials_file, 'w') do |file|
21
- file.puts username
22
- file.puts password
31
+ puts "Credentials stored for #{username}"
32
+ end
33
+ end
23
34
  end
24
35
 
25
- puts "Credentials stored for #{username}"
36
+ Crab::Login.run
@@ -1,18 +1,31 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- include Crab::Utilities
5
+ class Crab::Logout
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
+
13
+ opts = Trollop::options(args) do
14
+ banner <<-BANNER
8
15
  Usage: crab logout [options*]
9
16
 
10
17
  Log out of Rally. Your credentials will be removed from ~/.crab/credentials.
11
- BANNER
12
- opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
13
- end
18
+ BANNER
19
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
20
+ end
14
21
 
15
- fileutils_opts = opts[:dry] ? {:noop => true, :verbose => true} : {}
16
- FileUtils.rm_rf(credentials_file, fileutils_opts)
22
+ fileutils_opts = opts[:dry] ? {:noop => true, :verbose => true} : {}
23
+ FileUtils.rm_rf(credentials_file, fileutils_opts)
24
+
25
+ puts "Credentials removed for #{username}"
26
+
27
+ end
28
+ end
29
+ end
17
30
 
18
- puts "Credentials removed for #{username}"
31
+ Crab::Logout.run
@@ -1,42 +1,52 @@
1
+ #!/usr/bin/env ruby
1
2
  # vim: set ft=ruby :
2
3
  require 'crab'
3
4
 
4
- include Crab::Utilities
5
+ class Crab::ProjectMain
5
6
 
6
- opts = Trollop::options do
7
- banner <<-BANNER
8
- crab project: show or persistently select project to work with in Rally
9
-
10
- Usage: crab project [name] [options*]
11
- BANNER
12
- opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
13
- end
14
-
15
- current_project_name = self.class.current_project_name
16
- if current_project_name.present?
17
- puts current_project_name
18
- exit 0
7
+ class << self
19
8
 
20
- elsif ARGV.reject {|arg| arg.blank? }.empty?
21
- puts "No project currently selected."
22
- exit 1
23
- end
9
+ include Crab::Utilities
24
10
 
25
- name = ARGV.join(" ").strip
26
-
27
- Crab::Rally.new(opts[:dry]) do |rally|
28
- project = rally.find_project name
29
- Trollop::die "#{name.inspect} is not a valid project" if project.nil?
30
-
31
- FileUtils.mkdir_p ".crab", opts[:dry] ? { :noop => true, :verbose => true } : {}
32
- file = ".crab/project"
33
- output = project.name
11
+ def run(args=ARGV)
12
+ opts = Trollop::options(args) do
13
+ banner <<-BANNER
14
+ crab project: show or persistently select project to work with in Rally
34
15
 
35
- if opts[:dry]
36
- puts "Would write to #{file}:\n\n#{output}"
37
- else
38
- File.open(file, "w") do |file|
39
- file.puts project.name
16
+ Usage: crab project [name] [options*]
17
+ BANNER
18
+ opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
19
+ end
20
+
21
+ if current_project_name.present?
22
+ puts current_project_name
23
+ exit 0
24
+
25
+ elsif args.reject {|arg| arg.blank? }.empty?
26
+ puts "No project currently selected."
27
+ exit 1
28
+ end
29
+
30
+ name = args.join(" ").strip
31
+
32
+ Crab::Rally.new(opts[:dry]) do |rally|
33
+ project = rally.find_project name
34
+ Trollop::die "#{name.inspect} is not a valid project" if project.nil?
35
+
36
+ FileUtils.mkdir_p ".crab", opts[:dry] ? { :noop => true, :verbose => true } : {}
37
+ file = ".crab/project"
38
+ output = project.name
39
+
40
+ if opts[:dry]
41
+ puts "Would write to #{file}:\n\n#{output}"
42
+ else
43
+ File.open(file, "w") do |file|
44
+ file.puts project.name
45
+ end
46
+ end
47
+ end
40
48
  end
41
49
  end
42
50
  end
51
+
52
+ Crab::ProjectMain.run