crab 0.2.0 → 0.2.1
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-add +3 -2
 - data/bin/crab-change +2 -1
 - data/bin/crab-create +3 -2
 - data/bin/crab-del +3 -2
 - data/bin/crab-delete +3 -2
 - data/bin/crab-find +5 -4
 - data/bin/crab-help +0 -1
 - data/bin/crab-list +5 -4
 - data/bin/crab-ls +5 -4
 - data/bin/crab-move +4 -3
 - data/bin/crab-mv +4 -3
 - data/bin/crab-new +3 -2
 - data/bin/crab-project +13 -5
 - data/bin/crab-pull +15 -7
 - data/bin/crab-remove +3 -2
 - data/bin/crab-rm +3 -2
 - data/bin/crab-show +2 -1
 - data/bin/crab-testcase-add +1 -1
 - data/bin/crab-testcase-create +1 -1
 - data/bin/crab-testcase-delete +2 -1
 - data/bin/crab-testcase-list +2 -1
 - data/bin/crab-testcase-ls +2 -1
 - data/bin/crab-testcase-new +1 -1
 - data/bin/crab-testcase-rm +2 -1
 - data/bin/crab-testcase-show +2 -1
 - data/bin/crab-testcase-update +1 -1
 - data/bin/crab-truncate +0 -5
 - data/bin/crab-up +2 -1
 - data/bin/crab-update +2 -1
 - data/features/steps/rally_steps.rb +0 -1
 - data/lib/crab/rally.rb +28 -10
 - data/lib/crab/story.rb +44 -4
 - data/lib/crab/testcase.rb +13 -4
 - data/lib/crab/utilities.rb +2 -0
 - data/lib/crab/version.rb +1 -1
 - metadata +3 -3
 
    
        data/README.md
    CHANGED
    
    
    
        data/bin/crab-add
    CHANGED
    
    | 
         @@ -1,18 +1,19 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # vim: set ft=ruby :
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'crab'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       5 
5 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       6 
6 
     | 
    
         
             
            crab create: create a new story in Rally
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            Usage: crab create name [options]
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
      
 10 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       10 
11 
     | 
    
         
             
            end
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            name = ARGV.join(" ")
         
     | 
| 
       13 
14 
     | 
    
         
             
            Trollop::die "Please specify a name for the story" if name.blank?
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 16 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       16 
17 
     | 
    
         
             
              story = rally.create_story :name => name
         
     | 
| 
       17 
18 
     | 
    
         
             
              puts "#{story.formatted_id}: #{story.name} (#{story.state})"
         
     | 
| 
       18 
19 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-change
    CHANGED
    
    | 
         @@ -17,6 +17,7 @@ Usage: crab update story [options] 
     | 
|
| 
       17 
17 
     | 
    
         
             
              opt :blocked,   "Blocked",      :short => "-b"
         
     | 
| 
       18 
18 
     | 
    
         
             
              opt :unblocked, "Unblocked",    :short => "-u"
         
     | 
| 
       19 
19 
     | 
    
         
             
              opt :parent,    "Parent",       :type => String, :short => "-p"
         
     | 
| 
      
 20 
     | 
    
         
            +
              opt :dry,       "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       20 
21 
     | 
    
         
             
            end
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
            Trollop::die "No story given" if ARGV.empty?
         
     | 
| 
         @@ -33,7 +34,7 @@ end 
     | 
|
| 
       33 
34 
     | 
    
         
             
            opts[:blocked] = cmd_opts[:blocked] if cmd_opts[:blocked_given]
         
     | 
| 
       34 
35 
     | 
    
         
             
            opts[:blocked] = !cmd_opts[:unblocked] if cmd_opts[:unblocked_given]
         
     | 
| 
       35 
36 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 37 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       37 
38 
     | 
    
         
             
              rally.connect
         
     | 
| 
       38 
39 
     | 
    
         | 
| 
       39 
40 
     | 
    
         
             
              story = rally.find_story_with_id ARGV.first
         
     | 
    
        data/bin/crab-create
    CHANGED
    
    | 
         @@ -1,18 +1,19 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # vim: set ft=ruby :
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'crab'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       5 
5 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       6 
6 
     | 
    
         
             
            crab create: create a new story in Rally
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            Usage: crab create name [options]
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
      
 10 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       10 
11 
     | 
    
         
             
            end
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            name = ARGV.join(" ")
         
     | 
| 
       13 
14 
     | 
    
         
             
            Trollop::die "Please specify a name for the story" if name.blank?
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 16 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       16 
17 
     | 
    
         
             
              story = rally.create_story :name => name
         
     | 
| 
       17 
18 
     | 
    
         
             
              puts "#{story.formatted_id}: #{story.name} (#{story.state})"
         
     | 
| 
       18 
19 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-del
    CHANGED
    
    | 
         @@ -1,18 +1,19 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # vim: set ft=ruby :
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'crab'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       5 
5 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       6 
6 
     | 
    
         
             
            crab delete: delete an existing story in Rally
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            Usage: crab delete story [options]
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
      
 10 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       10 
11 
     | 
    
         
             
            end
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            id = ARGV.join(" ")
         
     | 
| 
       13 
14 
     | 
    
         
             
            Trollop::die "Story ID must be specified" if story_id.blank?
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 16 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       16 
17 
     | 
    
         
             
              story = rally.find_story_with_id id
         
     | 
| 
       17 
18 
     | 
    
         
             
              story.delete
         
     | 
| 
       18 
19 
     | 
    
         | 
    
        data/bin/crab-delete
    CHANGED
    
    | 
         @@ -1,18 +1,19 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # vim: set ft=ruby :
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'crab'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       5 
5 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       6 
6 
     | 
    
         
             
            crab delete: delete an existing story in Rally
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            Usage: crab delete story [options]
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
      
 10 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       10 
11 
     | 
    
         
             
            end
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            id = ARGV.join(" ")
         
     | 
| 
       13 
14 
     | 
    
         
             
            Trollop::die "Story ID must be specified" if story_id.blank?
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 16 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       16 
17 
     | 
    
         
             
              story = rally.find_story_with_id id
         
     | 
| 
       17 
18 
     | 
    
         
             
              story.delete
         
     | 
| 
       18 
19 
     | 
    
         | 
    
        data/bin/crab-find
    CHANGED
    
    | 
         @@ -3,21 +3,22 @@ require 'crab' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            include Crab::Utilities
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       7 
7 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       8 
8 
     | 
    
         
             
            crab find: find a story in Rally
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            Usage: crab 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 :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       13 
14 
     | 
    
         
             
            end
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
            pattern = ARGV.map(&:strip).reject(&:empty?)
         
     | 
| 
       16 
     | 
    
         
            -
            project_name = valid_project_name( 
     | 
| 
      
 17 
     | 
    
         
            +
            project_name = valid_project_name(opts)
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 19 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       19 
20 
     | 
    
         
             
              project = rally.find_project(project_name)
         
     | 
| 
       20 
     | 
    
         
            -
              Trollop::die "Project #{ 
     | 
| 
      
 21 
     | 
    
         
            +
              Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
              rally.find_stories(project, pattern).each do |story|
         
     | 
| 
       23 
24 
     | 
    
         
             
                puts "#{story.formatted_id}: #{story.name} (#{story.state})"
         
     | 
    
        data/bin/crab-help
    CHANGED
    
    | 
         @@ -17,7 +17,6 @@ crab version #{Crab::VERSION}: A Cucumber-Rally bridge 
     | 
|
| 
       17 
17 
     | 
    
         
             
                  pull  Downloads stories (and its test cases) as Cucumber feature files
         
     | 
| 
       18 
18 
     | 
    
         
             
                  show  Show a story (and its test cases) as a Cucumber feature
         
     | 
| 
       19 
19 
     | 
    
         
             
              testcase  Manage test cases in a story (add, update, delete)
         
     | 
| 
       20 
     | 
    
         
            -
              truncate  Make sphor happy!
         
     | 
| 
       21 
20 
     | 
    
         
             
                update  Update a story (name, estimate, etc)
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
       23 
22 
     | 
    
         | 
    
        data/bin/crab-list
    CHANGED
    
    | 
         @@ -3,21 +3,22 @@ require 'crab' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            include Crab::Utilities
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       7 
7 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       8 
8 
     | 
    
         
             
            crab find: find a story in Rally
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            Usage: crab 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 :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       13 
14 
     | 
    
         
             
            end
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
            pattern = ARGV.map(&:strip).reject(&:empty?)
         
     | 
| 
       16 
     | 
    
         
            -
            project_name = valid_project_name( 
     | 
| 
      
 17 
     | 
    
         
            +
            project_name = valid_project_name(opts)
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 19 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       19 
20 
     | 
    
         
             
              project = rally.find_project(project_name)
         
     | 
| 
       20 
     | 
    
         
            -
              Trollop::die "Project #{ 
     | 
| 
      
 21 
     | 
    
         
            +
              Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
              rally.find_stories(project, pattern).each do |story|
         
     | 
| 
       23 
24 
     | 
    
         
             
                puts "#{story.formatted_id}: #{story.name} (#{story.state})"
         
     | 
    
        data/bin/crab-ls
    CHANGED
    
    | 
         @@ -3,21 +3,22 @@ require 'crab' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            include Crab::Utilities
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       7 
7 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       8 
8 
     | 
    
         
             
            crab find: find a story in Rally
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            Usage: crab 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 :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       13 
14 
     | 
    
         
             
            end
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
            pattern = ARGV.map(&:strip).reject(&:empty?)
         
     | 
| 
       16 
     | 
    
         
            -
            project_name = valid_project_name( 
     | 
| 
      
 17 
     | 
    
         
            +
            project_name = valid_project_name(opts)
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 19 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       19 
20 
     | 
    
         
             
              project = rally.find_project(project_name)
         
     | 
| 
       20 
     | 
    
         
            -
              Trollop::die "Project #{ 
     | 
| 
      
 21 
     | 
    
         
            +
              Trollop::die "Project #{opts[:project].inspect} not found" if project.nil?
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
              rally.find_stories(project, pattern).each do |story|
         
     | 
| 
       23 
24 
     | 
    
         
             
                puts "#{story.formatted_id}: #{story.name} (#{story.state})"
         
     | 
    
        data/bin/crab-move
    CHANGED
    
    | 
         @@ -3,23 +3,24 @@ require 'crab' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            include Crab::Utilities
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       7 
7 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       8 
8 
     | 
    
         
             
            crab move: move a story from one status to the next (or previous)
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            Usage: crab move story [options]
         
     | 
| 
       11 
11 
     | 
    
         
             
              BANNER
         
     | 
| 
       12 
12 
     | 
    
         
             
              opt :back, "Move story backwards (from accepted to completed, for example)"
         
     | 
| 
      
 13 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       13 
14 
     | 
    
         
             
            end
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
            id = ARGV.join(" ")
         
     | 
| 
       16 
17 
     | 
    
         
             
            Trollop::die "No story given" if id.empty?
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 19 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       19 
20 
     | 
    
         
             
              story = rally.find_story_with_id id
         
     | 
| 
       20 
21 
     | 
    
         
             
              state = state_from(story.state)
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
              story.update :schedule_state => ( 
     | 
| 
      
 23 
     | 
    
         
            +
              story.update :schedule_state => (opts[:back] ? state_before(state) : state_after(state))
         
     | 
| 
       23 
24 
     | 
    
         | 
| 
       24 
25 
     | 
    
         
             
              puts "#{story.formatted_id}: #{story.name} (#{story.state})"
         
     | 
| 
       25 
26 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-mv
    CHANGED
    
    | 
         @@ -3,23 +3,24 @@ require 'crab' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            include Crab::Utilities
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       7 
7 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       8 
8 
     | 
    
         
             
            crab move: move a story from one status to the next (or previous)
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            Usage: crab move story [options]
         
     | 
| 
       11 
11 
     | 
    
         
             
              BANNER
         
     | 
| 
       12 
12 
     | 
    
         
             
              opt :back, "Move story backwards (from accepted to completed, for example)"
         
     | 
| 
      
 13 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       13 
14 
     | 
    
         
             
            end
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
            id = ARGV.join(" ")
         
     | 
| 
       16 
17 
     | 
    
         
             
            Trollop::die "No story given" if id.empty?
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 19 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       19 
20 
     | 
    
         
             
              story = rally.find_story_with_id id
         
     | 
| 
       20 
21 
     | 
    
         
             
              state = state_from(story.state)
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
              story.update :schedule_state => ( 
     | 
| 
      
 23 
     | 
    
         
            +
              story.update :schedule_state => (opts[:back] ? state_before(state) : state_after(state))
         
     | 
| 
       23 
24 
     | 
    
         | 
| 
       24 
25 
     | 
    
         
             
              puts "#{story.formatted_id}: #{story.name} (#{story.state})"
         
     | 
| 
       25 
26 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-new
    CHANGED
    
    | 
         @@ -1,18 +1,19 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # vim: set ft=ruby :
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'crab'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       5 
5 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       6 
6 
     | 
    
         
             
            crab create: create a new story in Rally
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            Usage: crab create name [options]
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
      
 10 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       10 
11 
     | 
    
         
             
            end
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            name = ARGV.join(" ")
         
     | 
| 
       13 
14 
     | 
    
         
             
            Trollop::die "Please specify a name for the story" if name.blank?
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 16 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       16 
17 
     | 
    
         
             
              story = rally.create_story :name => name
         
     | 
| 
       17 
18 
     | 
    
         
             
              puts "#{story.formatted_id}: #{story.name} (#{story.state})"
         
     | 
| 
       18 
19 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-project
    CHANGED
    
    | 
         @@ -3,12 +3,13 @@ require 'crab' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            include Crab::Utilities
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       7 
7 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       8 
8 
     | 
    
         
             
            crab project: show or persistently select project to work with in Rally
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            Usage: crab project [name]
         
     | 
| 
       11 
11 
     | 
    
         
             
              BANNER
         
     | 
| 
      
 12 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       12 
13 
     | 
    
         
             
            end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
            current_project_name = self.class.current_project_name
         
     | 
| 
         @@ -23,12 +24,19 @@ end 
     | 
|
| 
       23 
24 
     | 
    
         | 
| 
       24 
25 
     | 
    
         
             
            name = ARGV.join(" ").strip
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 27 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       27 
28 
     | 
    
         
             
              project = rally.find_project name
         
     | 
| 
       28 
29 
     | 
    
         
             
              Trollop::die "#{name.inspect} is not a valid project" if project.nil?
         
     | 
| 
       29 
30 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
              FileUtils.mkdir_p ".crab"
         
     | 
| 
       31 
     | 
    
         
            -
               
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 31 
     | 
    
         
            +
              FileUtils.mkdir_p ".crab", opts[:dry] ? { :noop => true, :verbose => true } : {}
         
     | 
| 
      
 32 
     | 
    
         
            +
              file = ".crab/project"
         
     | 
| 
      
 33 
     | 
    
         
            +
              output = project.name
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 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
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
       33 
41 
     | 
    
         
             
              end
         
     | 
| 
       34 
42 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-pull
    CHANGED
    
    | 
         @@ -1,16 +1,17 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # vim: set ft=ruby :
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'crab'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       5 
5 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       6 
6 
     | 
    
         
             
            crab pull: pulls stories from Rally and writes them out as Cucumber features
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            Usage: crab pull [options] story1 [story2 ...]
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
       10 
10 
     | 
    
         
             
              opt :language, "Language to generate Cucumber features in (ISO code)", :default => "en", :short => "-l"
         
     | 
| 
      
 11 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       11 
12 
     | 
    
         
             
            end
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 14 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
              ARGV.each do |story_number|
         
     | 
| 
       16 
17 
     | 
    
         
             
                story = rally.find_story_with_id story_number
         
     | 
| 
         @@ -18,12 +19,19 @@ Crab::Rally.new do |rally| 
     | 
|
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
                puts "#{story.formatted_id}: #{story.full_file_name}"
         
     | 
| 
       20 
21 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                 
     | 
| 
       22 
     | 
    
         
            -
                FileUtils.touch story.full_file_name
         
     | 
| 
      
 22 
     | 
    
         
            +
                fileutils_opts = opts[:dry] ? { :noop => true, :verbose => true } : {}
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                File. 
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
      
 24 
     | 
    
         
            +
                FileUtils.mkdir_p File.dirname(story.full_file_name), fileutils_opts
         
     | 
| 
      
 25 
     | 
    
         
            +
                FileUtils.touch story.full_file_name, fileutils_opts
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                output = Crab::CucumberFeature.new(opts[:language]).generate_from story
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                if opts[:dry]
         
     | 
| 
      
 30 
     | 
    
         
            +
                  puts "Would write to #{story.full_file_name}:\n\n#{output}"
         
     | 
| 
      
 31 
     | 
    
         
            +
                else
         
     | 
| 
      
 32 
     | 
    
         
            +
                  File.open(story.full_file_name, "w") do |file|
         
     | 
| 
      
 33 
     | 
    
         
            +
                    file.write output
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
       26 
35 
     | 
    
         
             
                end
         
     | 
| 
       27 
36 
     | 
    
         
             
              end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
37 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-remove
    CHANGED
    
    | 
         @@ -1,18 +1,19 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # vim: set ft=ruby :
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'crab'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       5 
5 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       6 
6 
     | 
    
         
             
            crab delete: delete an existing story in Rally
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            Usage: crab delete story [options]
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
      
 10 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       10 
11 
     | 
    
         
             
            end
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            id = ARGV.join(" ")
         
     | 
| 
       13 
14 
     | 
    
         
             
            Trollop::die "Story ID must be specified" if story_id.blank?
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 16 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       16 
17 
     | 
    
         
             
              story = rally.find_story_with_id id
         
     | 
| 
       17 
18 
     | 
    
         
             
              story.delete
         
     | 
| 
       18 
19 
     | 
    
         | 
    
        data/bin/crab-rm
    CHANGED
    
    | 
         @@ -1,18 +1,19 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # vim: set ft=ruby :
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'crab'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
            opts = Trollop::options do
         
     | 
| 
       5 
5 
     | 
    
         
             
              banner <<-BANNER
         
     | 
| 
       6 
6 
     | 
    
         
             
            crab delete: delete an existing story in Rally
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            Usage: crab delete story [options]
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
      
 10 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       10 
11 
     | 
    
         
             
            end
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            id = ARGV.join(" ")
         
     | 
| 
       13 
14 
     | 
    
         
             
            Trollop::die "Story ID must be specified" if story_id.blank?
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 16 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       16 
17 
     | 
    
         
             
              story = rally.find_story_with_id id
         
     | 
| 
       17 
18 
     | 
    
         
             
              story.delete
         
     | 
| 
       18 
19 
     | 
    
         | 
    
        data/bin/crab-show
    CHANGED
    
    | 
         @@ -8,10 +8,11 @@ crab show: displays a story in Rally as a Cucumber feature 
     | 
|
| 
       8 
8 
     | 
    
         
             
            Usage: crab show story"
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
       10 
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
         
     | 
| 
       11 
12 
     | 
    
         
             
            end
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
            id = ARGV.first
         
     | 
| 
       14 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 15 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       15 
16 
     | 
    
         
             
              story = rally.find_story_with_id(id)
         
     | 
| 
       16 
17 
     | 
    
         | 
| 
       17 
18 
     | 
    
         
             
              puts Crab::CucumberFeature.new(opts[:language]).generate_from story
         
     | 
    
        data/bin/crab-testcase-add
    CHANGED
    
    | 
         @@ -19,7 +19,7 @@ unless name 
     | 
|
| 
       19 
19 
     | 
    
         
             
              exit 1
         
     | 
| 
       20 
20 
     | 
    
         
             
            end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 22 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       23 
23 
     | 
    
         
             
              tc = rally.create_test_case(story_id, name, sanitize_options(opts))
         
     | 
| 
       24 
24 
     | 
    
         
             
              puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
         
     | 
| 
       25 
25 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-testcase-create
    CHANGED
    
    | 
         @@ -19,7 +19,7 @@ unless name 
     | 
|
| 
       19 
19 
     | 
    
         
             
              exit 1
         
     | 
| 
       20 
20 
     | 
    
         
             
            end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 22 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       23 
23 
     | 
    
         
             
              tc = rally.create_test_case(story_id, name, sanitize_options(opts))
         
     | 
| 
       24 
24 
     | 
    
         
             
              puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
         
     | 
| 
       25 
25 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-testcase-delete
    CHANGED
    
    | 
         @@ -3,10 +3,11 @@ require 'crab' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            Trollop::options do
         
     | 
| 
       5 
5 
     | 
    
         
             
              banner "crab testcase delete: delete a test case in Rally"
         
     | 
| 
      
 6 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       6 
7 
     | 
    
         
             
            end
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
9 
     | 
    
         
             
            tc_id = ARGV.shift
         
     | 
| 
       9 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 10 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       10 
11 
     | 
    
         
             
              tc = rally.find_test_case(tc_id)
         
     | 
| 
       11 
12 
     | 
    
         
             
              tc.delete
         
     | 
| 
       12 
13 
     | 
    
         
             
              puts "Test case #{tc_id} deleted."
         
     | 
    
        data/bin/crab-testcase-list
    CHANGED
    
    | 
         @@ -8,6 +8,7 @@ crab testcase list: displays all testcases in Rally in a story as Cucumber scena 
     | 
|
| 
       8 
8 
     | 
    
         
             
            Usage: crab testcase list <story> [options]"
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
       10 
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
         
     | 
| 
       11 
12 
     | 
    
         
             
            end
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
            id = ARGV.shift
         
     | 
| 
         @@ -17,7 +18,7 @@ unless id 
     | 
|
| 
       17 
18 
     | 
    
         
             
              exit 1
         
     | 
| 
       18 
19 
     | 
    
         
             
            end
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 21 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       21 
22 
     | 
    
         
             
              story = rally.find_story_with_id id
         
     | 
| 
       22 
23 
     | 
    
         | 
| 
       23 
24 
     | 
    
         
             
              puts Array(story.scenarios).map {|scenario| Crab::CucumberScenario.new(opts[:language]).generate_from scenario }.join.strip
         
     | 
    
        data/bin/crab-testcase-ls
    CHANGED
    
    | 
         @@ -8,6 +8,7 @@ crab testcase list: displays all testcases in Rally in a story as Cucumber scena 
     | 
|
| 
       8 
8 
     | 
    
         
             
            Usage: crab testcase list <story> [options]"
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
       10 
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
         
     | 
| 
       11 
12 
     | 
    
         
             
            end
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
            id = ARGV.shift
         
     | 
| 
         @@ -17,7 +18,7 @@ unless id 
     | 
|
| 
       17 
18 
     | 
    
         
             
              exit 1
         
     | 
| 
       18 
19 
     | 
    
         
             
            end
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 21 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       21 
22 
     | 
    
         
             
              story = rally.find_story_with_id id
         
     | 
| 
       22 
23 
     | 
    
         | 
| 
       23 
24 
     | 
    
         
             
              puts Array(story.scenarios).map {|scenario| Crab::CucumberScenario.new(opts[:language]).generate_from scenario }.join.strip
         
     | 
    
        data/bin/crab-testcase-new
    CHANGED
    
    | 
         @@ -19,7 +19,7 @@ unless name 
     | 
|
| 
       19 
19 
     | 
    
         
             
              exit 1
         
     | 
| 
       20 
20 
     | 
    
         
             
            end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 22 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       23 
23 
     | 
    
         
             
              tc = rally.create_test_case(story_id, name, sanitize_options(opts))
         
     | 
| 
       24 
24 
     | 
    
         
             
              puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
         
     | 
| 
       25 
25 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-testcase-rm
    CHANGED
    
    | 
         @@ -3,10 +3,11 @@ require 'crab' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            Trollop::options do
         
     | 
| 
       5 
5 
     | 
    
         
             
              banner "crab testcase delete: delete a test case in Rally"
         
     | 
| 
      
 6 
     | 
    
         
            +
              opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       6 
7 
     | 
    
         
             
            end
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
9 
     | 
    
         
             
            tc_id = ARGV.shift
         
     | 
| 
       9 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 10 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       10 
11 
     | 
    
         
             
              tc = rally.find_test_case(tc_id)
         
     | 
| 
       11 
12 
     | 
    
         
             
              tc.delete
         
     | 
| 
       12 
13 
     | 
    
         
             
              puts "Test case #{tc_id} deleted."
         
     | 
    
        data/bin/crab-testcase-show
    CHANGED
    
    | 
         @@ -8,6 +8,7 @@ crab testcase show: displays a testcase in Rally as a Cucumber scenario 
     | 
|
| 
       8 
8 
     | 
    
         
             
            Usage: crab testcase show <testcase> [options]"
         
     | 
| 
       9 
9 
     | 
    
         
             
              BANNER
         
     | 
| 
       10 
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
         
     | 
| 
       11 
12 
     | 
    
         
             
            end
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
            id = ARGV.shift
         
     | 
| 
         @@ -17,7 +18,7 @@ unless id 
     | 
|
| 
       17 
18 
     | 
    
         
             
              exit 1
         
     | 
| 
       18 
19 
     | 
    
         
             
            end
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 21 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       21 
22 
     | 
    
         
             
              tc = rally.find_test_case id
         
     | 
| 
       22 
23 
     | 
    
         
             
              puts Crab::CucumberScenario.new(opts[:language]).generate_from(tc).strip
         
     | 
| 
       23 
24 
     | 
    
         
             
            end
         
     | 
    
        data/bin/crab-testcase-update
    CHANGED
    
    | 
         @@ -7,7 +7,7 @@ opts = add_or_update_options "crab testcase update: update a test case in Rally" 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            tc_id = ARGV.shift
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 10 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       11 
11 
     | 
    
         
             
              tc = rally.find_test_case(tc_id)
         
     | 
| 
       12 
12 
     | 
    
         
             
              tc.update(sanitize_options(opts))
         
     | 
| 
       13 
13 
     | 
    
         
             
              puts "#{tc.story.formatted_id}/#{tc.formatted_id}: #{tc.name} (#{tc.tags.join(" ")})"
         
     | 
    
        data/bin/crab-truncate
    CHANGED
    
    
    
        data/bin/crab-up
    CHANGED
    
    | 
         @@ -17,6 +17,7 @@ Usage: crab update story [options] 
     | 
|
| 
       17 
17 
     | 
    
         
             
              opt :blocked,   "Blocked",      :short => "-b"
         
     | 
| 
       18 
18 
     | 
    
         
             
              opt :unblocked, "Unblocked",    :short => "-u"
         
     | 
| 
       19 
19 
     | 
    
         
             
              opt :parent,    "Parent",       :type => String, :short => "-p"
         
     | 
| 
      
 20 
     | 
    
         
            +
              opt :dry,       "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       20 
21 
     | 
    
         
             
            end
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
            Trollop::die "No story given" if ARGV.empty?
         
     | 
| 
         @@ -33,7 +34,7 @@ end 
     | 
|
| 
       33 
34 
     | 
    
         
             
            opts[:blocked] = cmd_opts[:blocked] if cmd_opts[:blocked_given]
         
     | 
| 
       34 
35 
     | 
    
         
             
            opts[:blocked] = !cmd_opts[:unblocked] if cmd_opts[:unblocked_given]
         
     | 
| 
       35 
36 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 37 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       37 
38 
     | 
    
         
             
              rally.connect
         
     | 
| 
       38 
39 
     | 
    
         | 
| 
       39 
40 
     | 
    
         
             
              story = rally.find_story_with_id ARGV.first
         
     | 
    
        data/bin/crab-update
    CHANGED
    
    | 
         @@ -17,6 +17,7 @@ Usage: crab update story [options] 
     | 
|
| 
       17 
17 
     | 
    
         
             
              opt :blocked,   "Blocked",      :short => "-b"
         
     | 
| 
       18 
18 
     | 
    
         
             
              opt :unblocked, "Unblocked",    :short => "-u"
         
     | 
| 
       19 
19 
     | 
    
         
             
              opt :parent,    "Parent",       :type => String, :short => "-p"
         
     | 
| 
      
 20 
     | 
    
         
            +
              opt :dry,       "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       20 
21 
     | 
    
         
             
            end
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
            Trollop::die "No story given" if ARGV.empty?
         
     | 
| 
         @@ -33,7 +34,7 @@ end 
     | 
|
| 
       33 
34 
     | 
    
         
             
            opts[:blocked] = cmd_opts[:blocked] if cmd_opts[:blocked_given]
         
     | 
| 
       34 
35 
     | 
    
         
             
            opts[:blocked] = !cmd_opts[:unblocked] if cmd_opts[:unblocked_given]
         
     | 
| 
       35 
36 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
            Crab::Rally.new do |rally|
         
     | 
| 
      
 37 
     | 
    
         
            +
            Crab::Rally.new(opts[:dry]) do |rally|
         
     | 
| 
       37 
38 
     | 
    
         
             
              rally.connect
         
     | 
| 
       38 
39 
     | 
    
         | 
| 
       39 
40 
     | 
    
         
             
              story = rally.find_story_with_id ARGV.first
         
     | 
| 
         @@ -17,7 +17,6 @@ crab version #{Crab::VERSION}: A Cucumber-Rally bridge 
     | 
|
| 
       17 
17 
     | 
    
         
             
                  pull  Downloads stories (and its test cases) as Cucumber feature files
         
     | 
| 
       18 
18 
     | 
    
         
             
                  show  Show a story (and its test cases) as a Cucumber feature
         
     | 
| 
       19 
19 
     | 
    
         
             
              testcase  Manage test cases in a story (add, update, delete)
         
     | 
| 
       20 
     | 
    
         
            -
              truncate  Make sphor happy!
         
     | 
| 
       21 
20 
     | 
    
         
             
                update  Update a story (name, estimate, etc)
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
       23 
22 
     | 
    
         | 
    
        data/lib/crab/rally.rb
    CHANGED
    
    | 
         @@ -3,7 +3,9 @@ module Crab 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
                include Crab::Utilities
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
                def initialize
         
     | 
| 
      
 6 
     | 
    
         
            +
                def initialize(dry_run)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @dry_run = dry_run
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       7 
9 
     | 
    
         
             
                  if block_given?
         
     | 
| 
       8 
10 
     | 
    
         
             
                    connect
         
     | 
| 
       9 
11 
     | 
    
         
             
                    yield self
         
     | 
| 
         @@ -20,25 +22,30 @@ module Crab 
     | 
|
| 
       20 
22 
     | 
    
         
             
                end
         
     | 
| 
       21 
23 
     | 
    
         | 
| 
       22 
24 
     | 
    
         
             
                def find_story_with_id story_id
         
     | 
| 
       23 
     | 
    
         
            -
                   
     | 
| 
      
 25 
     | 
    
         
            +
                  story = @rally.find(:hierarchical_requirement) { equal :formatted_i_d, story_id }.first
         
     | 
| 
      
 26 
     | 
    
         
            +
                  Crab::Story.new(story, @dry_run)
         
     | 
| 
       24 
27 
     | 
    
         
             
                end
         
     | 
| 
       25 
28 
     | 
    
         | 
| 
       26 
29 
     | 
    
         
             
                def find_all_stories(opts={})
         
     | 
| 
       27 
     | 
    
         
            -
                  @rally.find_all(:hierarchical_requirement, {:fetch => true}.merge(opts)).map  
     | 
| 
      
 30 
     | 
    
         
            +
                  @rally.find_all(:hierarchical_requirement, {:fetch => true}.merge(opts)).map do |story|
         
     | 
| 
      
 31 
     | 
    
         
            +
                    Crab::Story.new(story, @dry_run)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
       28 
33 
     | 
    
         
             
                end
         
     | 
| 
       29 
34 
     | 
    
         | 
| 
       30 
35 
     | 
    
         
             
                def find_stories(project, pattern=[])
         
     | 
| 
       31 
36 
     | 
    
         
             
                  return find_all_stories :project => project if pattern.empty?
         
     | 
| 
       32 
37 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                  @rally.find(:hierarchical_requirement, :fetch => true, :project => project)  
     | 
| 
      
 38 
     | 
    
         
            +
                  rally_stories = @rally.find(:hierarchical_requirement, :fetch => true, :project => project) do
         
     | 
| 
       34 
39 
     | 
    
         
             
                    pattern.each do |word|
         
     | 
| 
       35 
     | 
    
         
            -
                      _or_  
     | 
| 
      
 40 
     | 
    
         
            +
                      _or_ do
         
     | 
| 
       36 
41 
     | 
    
         
             
                        contains :name, word
         
     | 
| 
       37 
42 
     | 
    
         
             
                        contains :description, word
         
     | 
| 
       38 
43 
     | 
    
         
             
                        contains :notes, word
         
     | 
| 
       39 
     | 
    
         
            -
                       
     | 
| 
      
 44 
     | 
    
         
            +
                      end
         
     | 
| 
       40 
45 
     | 
    
         
             
                    end
         
     | 
| 
       41 
     | 
    
         
            -
                   
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  rally_stories.map {|story| Crab::Story.new(story, @dry_run) }
         
     | 
| 
       42 
49 
     | 
    
         
             
                end
         
     | 
| 
       43 
50 
     | 
    
         | 
| 
       44 
51 
     | 
    
         
             
                def find_project(name)
         
     | 
| 
         @@ -54,16 +61,27 @@ module Crab 
     | 
|
| 
       54 
61 
     | 
    
         
             
                end
         
     | 
| 
       55 
62 
     | 
    
         | 
| 
       56 
63 
     | 
    
         
             
                def create_story(opts)
         
     | 
| 
       57 
     | 
    
         
            -
                   
     | 
| 
      
 64 
     | 
    
         
            +
                  if @dry_run
         
     | 
| 
      
 65 
     | 
    
         
            +
                    Crab::DryRun::Story.new opts
         
     | 
| 
      
 66 
     | 
    
         
            +
                  else
         
     | 
| 
      
 67 
     | 
    
         
            +
                    Crab::Story.new(@rally.create(:hierarchical_requirement, opts), @dry_run)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  end
         
     | 
| 
       58 
69 
     | 
    
         
             
                end
         
     | 
| 
       59 
70 
     | 
    
         | 
| 
       60 
71 
     | 
    
         
             
                def create_test_case(story_id, name, opts)
         
     | 
| 
       61 
72 
     | 
    
         
             
                  story = find_story_with_id story_id
         
     | 
| 
       62 
     | 
    
         
            -
                   
     | 
| 
      
 73 
     | 
    
         
            +
                  opts = {:name => name, :work_product => story.rally_object, :project => story.rally_object.project}.merge(opts)
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  if @dry_run
         
     | 
| 
      
 76 
     | 
    
         
            +
                    puts "Would create test case for story with ID #{story_id} with #{opts.inspect}"
         
     | 
| 
      
 77 
     | 
    
         
            +
                  else
         
     | 
| 
      
 78 
     | 
    
         
            +
                    tc = @rally.create(:test_case, opts)
         
     | 
| 
      
 79 
     | 
    
         
            +
                    Crab::TestCase.new(tc, @dry_run)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
       63 
81 
     | 
    
         
             
                end
         
     | 
| 
       64 
82 
     | 
    
         | 
| 
       65 
83 
     | 
    
         
             
                def find_test_case(tc_id)
         
     | 
| 
       66 
     | 
    
         
            -
                  Crab::TestCase.new 
     | 
| 
      
 84 
     | 
    
         
            +
                  Crab::TestCase.new(@rally.find(:test_case) { equal :formatted_i_d, tc_id }.first, @dry_run)
         
     | 
| 
       67 
85 
     | 
    
         
             
                end
         
     | 
| 
       68 
86 
     | 
    
         | 
| 
       69 
87 
     | 
    
         
             
              end
         
     | 
    
        data/lib/crab/story.rb
    CHANGED
    
    | 
         @@ -4,8 +4,9 @@ module Crab 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
                VALID_STATES = %w{Grooming Defined In-Progress Completed Accepted Released}
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
                def initialize(rally_story)
         
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(rally_story, dry_run)
         
     | 
| 
       8 
8 
     | 
    
         
             
                  @rally_story = rally_story
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @dry_run = dry_run
         
     | 
| 
       9 
10 
     | 
    
         
             
                end
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
                def name
         
     | 
| 
         @@ -37,15 +38,23 @@ module Crab 
     | 
|
| 
       37 
38 
     | 
    
         
             
                end
         
     | 
| 
       38 
39 
     | 
    
         | 
| 
       39 
40 
     | 
    
         
             
                def scenarios
         
     | 
| 
       40 
     | 
    
         
            -
                  Array(@rally_story.test_cases).map {|tc| Crab::TestCase.new 
     | 
| 
      
 41 
     | 
    
         
            +
                  Array(@rally_story.test_cases).map {|tc| Crab::TestCase.new(tc, @dry_run) }
         
     | 
| 
       41 
42 
     | 
    
         
             
                end
         
     | 
| 
       42 
43 
     | 
    
         | 
| 
       43 
44 
     | 
    
         
             
                def update(opts)
         
     | 
| 
       44 
     | 
    
         
            -
                  @ 
     | 
| 
      
 45 
     | 
    
         
            +
                  if @dry_run
         
     | 
| 
      
 46 
     | 
    
         
            +
                    puts "Would update story #{formatted_id} with #{opts.inspect}"
         
     | 
| 
      
 47 
     | 
    
         
            +
                  else
         
     | 
| 
      
 48 
     | 
    
         
            +
                    @rally_story.update opts
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
       45 
50 
     | 
    
         
             
                end
         
     | 
| 
       46 
51 
     | 
    
         | 
| 
       47 
52 
     | 
    
         
             
                def delete
         
     | 
| 
       48 
     | 
    
         
            -
                  @ 
     | 
| 
      
 53 
     | 
    
         
            +
                  if @dry_run
         
     | 
| 
      
 54 
     | 
    
         
            +
                    puts "Would delete story #{formatted_id}"
         
     | 
| 
      
 55 
     | 
    
         
            +
                  else
         
     | 
| 
      
 56 
     | 
    
         
            +
                    @rally_story.delete
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
       49 
58 
     | 
    
         
             
                end
         
     | 
| 
       50 
59 
     | 
    
         | 
| 
       51 
60 
     | 
    
         
             
                def rally_object
         
     | 
| 
         @@ -62,4 +71,35 @@ module Crab 
     | 
|
| 
       62 
71 
     | 
    
         | 
| 
       63 
72 
     | 
    
         
             
              end
         
     | 
| 
       64 
73 
     | 
    
         | 
| 
      
 74 
     | 
    
         
            +
              module DryRun
         
     | 
| 
      
 75 
     | 
    
         
            +
                class Story
         
     | 
| 
      
 76 
     | 
    
         
            +
                  def initialize(opts)
         
     | 
| 
      
 77 
     | 
    
         
            +
                    puts "Would create story with #{opts.inspect}"
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                    @name = opts[:name]
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  def name
         
     | 
| 
      
 83 
     | 
    
         
            +
                    @name
         
     | 
| 
      
 84 
     | 
    
         
            +
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                  def formatted_id
         
     | 
| 
      
 87 
     | 
    
         
            +
                    "USXXXX"
         
     | 
| 
      
 88 
     | 
    
         
            +
                  end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                  def state
         
     | 
| 
      
 91 
     | 
    
         
            +
                    "grooming"
         
     | 
| 
      
 92 
     | 
    
         
            +
                  end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                  def description
         
     | 
| 
      
 95 
     | 
    
         
            +
                    ""
         
     | 
| 
      
 96 
     | 
    
         
            +
                  end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                  def scenarios
         
     | 
| 
      
 99 
     | 
    
         
            +
                    []
         
     | 
| 
      
 100 
     | 
    
         
            +
                  end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
              end
         
     | 
| 
       65 
104 
     | 
    
         
             
            end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
    
        data/lib/crab/testcase.rb
    CHANGED
    
    | 
         @@ -7,8 +7,9 @@ module Crab 
     | 
|
| 
       7 
7 
     | 
    
         
             
                METHODS = %w{automated manual}
         
     | 
| 
       8 
8 
     | 
    
         
             
                TYPES = %w{acceptance functional non-functional performance regression usability}
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
                def initialize(rally_test_case)
         
     | 
| 
      
 10 
     | 
    
         
            +
                def initialize(rally_test_case, dry_run)
         
     | 
| 
       11 
11 
     | 
    
         
             
                  @rally_test_case = rally_test_case
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @dry_run
         
     | 
| 
       12 
13 
     | 
    
         
             
                end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
                def formatted_id
         
     | 
| 
         @@ -40,15 +41,23 @@ module Crab 
     | 
|
| 
       40 
41 
     | 
    
         
             
                end
         
     | 
| 
       41 
42 
     | 
    
         | 
| 
       42 
43 
     | 
    
         
             
                def story
         
     | 
| 
       43 
     | 
    
         
            -
                  Crab::Story.new 
     | 
| 
      
 44 
     | 
    
         
            +
                  Crab::Story.new(@rally_test_case.work_product, @dry_run)
         
     | 
| 
       44 
45 
     | 
    
         
             
                end
         
     | 
| 
       45 
46 
     | 
    
         | 
| 
       46 
47 
     | 
    
         
             
                def delete
         
     | 
| 
       47 
     | 
    
         
            -
                  @ 
     | 
| 
      
 48 
     | 
    
         
            +
                  if @dry_run
         
     | 
| 
      
 49 
     | 
    
         
            +
                    puts "Would delete test case #{formatted_id}"
         
     | 
| 
      
 50 
     | 
    
         
            +
                  else
         
     | 
| 
      
 51 
     | 
    
         
            +
                    @rally_test_case.delete
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
       48 
53 
     | 
    
         
             
                end
         
     | 
| 
       49 
54 
     | 
    
         | 
| 
       50 
55 
     | 
    
         
             
                def update(options)
         
     | 
| 
       51 
     | 
    
         
            -
                  @ 
     | 
| 
      
 56 
     | 
    
         
            +
                  if @dry_run
         
     | 
| 
      
 57 
     | 
    
         
            +
                    puts "Would update test case #{formatted_id} with #{options.inspect}"
         
     | 
| 
      
 58 
     | 
    
         
            +
                  else
         
     | 
| 
      
 59 
     | 
    
         
            +
                    @rally_test_case.update options
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
       52 
61 
     | 
    
         
             
                end
         
     | 
| 
       53 
62 
     | 
    
         | 
| 
       54 
63 
     | 
    
         
             
                def steps
         
     | 
    
        data/lib/crab/utilities.rb
    CHANGED
    
    | 
         @@ -51,6 +51,8 @@ module Crab 
     | 
|
| 
       51 
51 
     | 
    
         
             
                    opt :pre,      "Pre-conditions", :default => "N/A"
         
     | 
| 
       52 
52 
     | 
    
         
             
                    opt :post,     "Post-conditions", :default => "N/A"
         
     | 
| 
       53 
53 
     | 
    
         
             
                    opt :desc,     "Description", :default => "N/A", :short => '-d'
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    opt :dry, "Dry-run (don't change anything)", :short => "-D", :default => false
         
     | 
| 
       54 
56 
     | 
    
         
             
                  end
         
     | 
| 
       55 
57 
     | 
    
         
             
                end
         
     | 
| 
       56 
58 
     | 
    
         | 
    
        data/lib/crab/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED