rallycat 0.4.0 → 0.4.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/Gemfile CHANGED
@@ -2,9 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in rallycat.gemspec
4
4
  gemspec
5
-
6
- group :development, :test do
7
- gem 'artifice'
8
- gem 'pry'
9
- gem 'rspec'
10
- end
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rallycat (0.4.0)
4
+ rallycat (0.4.1)
5
5
  builder
6
6
  nokogiri
7
7
  rally_rest_api
@@ -12,17 +12,12 @@ GEM
12
12
  artifice (0.6)
13
13
  rack-test
14
14
  builder (3.0.0)
15
- coderay (1.0.6)
16
15
  diff-lcs (1.1.3)
17
- method_source (0.7.1)
18
16
  nokogiri (1.5.5)
19
- pry (0.9.9.6)
20
- coderay (~> 1.0.5)
21
- method_source (~> 0.7.1)
22
- slop (>= 2.4.4, < 3)
23
17
  rack (1.4.1)
24
18
  rack-test (0.6.1)
25
19
  rack (>= 1.0)
20
+ rake (0.9.2.2)
26
21
  rally_rest_api (1.0.3)
27
22
  rspec (2.10.0)
28
23
  rspec-core (~> 2.10.0)
@@ -32,13 +27,12 @@ GEM
32
27
  rspec-expectations (2.10.0)
33
28
  diff-lcs (~> 1.1.3)
34
29
  rspec-mocks (2.10.1)
35
- slop (2.4.4)
36
30
 
37
31
  PLATFORMS
38
32
  ruby
39
33
 
40
34
  DEPENDENCIES
41
35
  artifice
42
- pry
36
+ rake
43
37
  rallycat!
44
38
  rspec
data/TODO CHANGED
@@ -8,11 +8,9 @@
8
8
  * Slow as balls? Make nice wait messages
9
9
  * Add man page
10
10
  * Create .rallycatrc file on first run?
11
- * Listing stories
12
- * Per iteration
13
- * Per project (project configured in rc or passed in?)
14
11
  * AC-only story view
15
12
  * consolidate spec styles
13
+ * rallycat list stories are colored based on schedule state
16
14
 
17
15
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
18
16
 
@@ -20,6 +18,8 @@
20
18
 
21
19
  rallycat list -s <search phrase> # do a contains lookup for an iteration
22
20
 
21
+ rallycat list -pdacb # Filter by schedule states
22
+
23
23
  Keep a log of last (n) stories typed into `cat` so the default action for
24
24
  `rallycat cat` will list the last (n) stories for the user.
25
25
 
@@ -10,7 +10,7 @@ module Rallycat
10
10
  def story(story_number)
11
11
  story_type = story_number.start_with?('US') ? :hierarchical_requirement : :defect
12
12
 
13
- results = @rally_api.find(story_type, fetch: true) do
13
+ results = @rally_api.find(story_type, :fetch => true) do
14
14
  equal :formatted_id, story_number
15
15
  end
16
16
 
@@ -57,7 +57,7 @@ TEXT
57
57
  # [TA12345] [C] The name of the task.
58
58
  #
59
59
  sorted_tasks.map do |task|
60
- state = task.state == 'In-Progress' ? 'P' : task.state[0]
60
+ state = task.state == 'In-Progress' ? 'P' : task.state.split('')[0]
61
61
  "[#{task.formatted_i_d}] [#{state}] #{task.name}"
62
62
  end.join("\n")
63
63
  end
@@ -16,10 +16,10 @@ module Rallycat
16
16
  logger = ENV['RALLY_DEBUG'] ? Logger.new(STDOUT) : Logger.new(nil)
17
17
 
18
18
  @api = RallyRestAPI.new \
19
- base_url: 'https://rally1.rallydev.com/slm',
20
- username: username,
21
- password: password,
22
- logger: logger
19
+ :base_url => 'https://rally1.rallydev.com/slm',
20
+ :username => username,
21
+ :password => password,
22
+ :logger => logger
23
23
 
24
24
  rescue Rally::NotAuthenticatedError
25
25
  raise InvalidCredentialsError.new('Your Rally credentials are invalid.')
@@ -14,9 +14,9 @@ module Rallycat
14
14
  project = find_project(project_name)
15
15
 
16
16
  iterations = @api.find_all(:iteration, {
17
- project: project,
18
- order: 'StartDate desc',
19
- pagesize: 10
17
+ :project => project,
18
+ :order => 'StartDate desc',
19
+ :pagesize => 10
20
20
  }).results
21
21
 
22
22
  if iterations.count == 0
@@ -43,15 +43,15 @@ module Rallycat
43
43
  iteration = find_iteration(iteration_name, project)
44
44
 
45
45
  stories = @api.find(:hierarchical_requirement, {
46
- project: project,
47
- pagesize: 100,
48
- fetch: true
46
+ :project => project,
47
+ :pagesize => 100,
48
+ :fetch => true
49
49
  }) { equal :iteration, iteration }.results
50
50
 
51
51
  stories += @api.find(:defect, {
52
- project: project,
53
- pagesize: 100,
54
- fetch: true
52
+ :project => project,
53
+ :pagesize => 100,
54
+ :fetch => true
55
55
  }) { equal :iteration, iteration }.results
56
56
 
57
57
  if stories.count == 0
@@ -61,7 +61,7 @@ module Rallycat
61
61
  list = %{# Stories for iteration "#{iteration_name}" - "#{project_name}"\n\n}
62
62
 
63
63
  stories.each do |story|
64
- state = story.schedule_state == 'In-Progress' ? 'P' : story.schedule_state[0]
64
+ state = story.schedule_state == 'In-Progress' ? 'P' : story.schedule_state.split('')[0]
65
65
  list += "* [#{story.formatted_i_d}] [#{state}] #{story.name}\n"
66
66
  end
67
67
 
@@ -1,3 +1,3 @@
1
1
  module Rallycat
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -20,4 +20,7 @@ Gem::Specification.new do |gem|
20
20
  gem.add_dependency 'rally_rest_api'
21
21
  gem.add_dependency 'nokogiri'
22
22
 
23
+ gem.add_development_dependency 'rake'
24
+ gem.add_development_dependency 'artifice'
25
+ gem.add_development_dependency 'rspec'
23
26
  end
@@ -4,12 +4,7 @@ require 'cgi'
4
4
  describe Rallycat::Cat, '#story' do
5
5
 
6
6
  before do
7
- responder = lambda do |env|
8
- # 'https://rally1.rallydev.com/slm/webservice/current/user'
9
- [200, {}, ['<foo>bar</foo>']]
10
- end
11
-
12
- Artifice.activate_with responder do
7
+ Artifice.activate_with RallyAuthResponder.new do
13
8
  @api = Rallycat::Connection.new('foo.bar@rallycat.com', 'password').api
14
9
  end
15
10
  end
@@ -127,22 +122,7 @@ STORY
127
122
  end
128
123
 
129
124
  it 'raises when the story does not exist' do
130
- responder = lambda do |env|
131
- [200, {}, [
132
- <<-XML
133
- <QueryResult rallyAPIMajor="1" rallyAPIMinor="17">
134
- <Errors/>
135
- <Warnings/>
136
- <TotalResultCount>0</TotalResultCount>
137
- <StartIndex>1</StartIndex>
138
- <PageSize>20</PageSize>
139
- <Results/>
140
- </QueryResult>
141
- XML
142
- ]]
143
- end
144
-
145
- Artifice.activate_with responder do
125
+ Artifice.activate_with RallyNoResultsResponder.new do
146
126
  story_num = "US9999"
147
127
  cat = Rallycat::Cat.new(@api)
148
128
 
@@ -27,8 +27,8 @@ describe Rallycat::CLI, '#options' do
27
27
  cli = Rallycat::CLI.new %w{ -u foo.bar@rallycat.com -p password help }, sout
28
28
 
29
29
  cli.options.should == {
30
- username: 'foo.bar@rallycat.com',
31
- password: 'password'
30
+ :username => 'foo.bar@rallycat.com',
31
+ :password => 'password'
32
32
  }
33
33
  end
34
34
 
@@ -45,10 +45,10 @@ describe Rallycat::CLI, '#options' do
45
45
  cli = Rallycat::CLI.new %w{ -u foo.bar@rallycat.com -p password update -p TA6666 -b }, sout
46
46
 
47
47
  cli.options.should == {
48
- username: 'foo.bar@rallycat.com',
49
- password: 'password',
50
- in_progress: true,
51
- blocked: true
48
+ :username => 'foo.bar@rallycat.com',
49
+ :password => 'password',
50
+ :in_progress => true,
51
+ :blocked => true
52
52
  }
53
53
  end
54
54
 
@@ -57,8 +57,8 @@ describe Rallycat::CLI, '#options' do
57
57
  cli = Rallycat::CLI.new %w{ update TA6666 -pb }, sout
58
58
 
59
59
  cli.options.should == {
60
- in_progress: true,
61
- blocked: true
60
+ :in_progress => true,
61
+ :blocked => true
62
62
  }
63
63
  end
64
64
  end
@@ -1,13 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Rallycat::Update do
4
- before do
5
- auth_responder = lambda do |env|
6
- # 'https://rally1.rallydev.com/slm/webservice/current/user'
7
- [200, {}, ['<foo>bar</foo>']]
8
- end
4
+ def get_post_request(responder)
5
+ responder.requests.detect {|request| request.post? }
6
+ end
9
7
 
10
- Artifice.activate_with auth_responder do
8
+ before do
9
+ Artifice.activate_with RallyAuthResponder.new do
11
10
  @api = Rallycat::Connection.new('foo.bar@rallycat.com', 'password').api
12
11
  end
13
12
  end
@@ -21,12 +20,12 @@ describe Rallycat::Update do
21
20
  Artifice.activate_with responder do
22
21
  task_num = "TA6666"
23
22
  update = Rallycat::Update.new(@api)
24
- update.task(task_num, state: "In-Progress")
23
+ update.task(task_num, :state => "In-Progress")
25
24
  end
26
25
 
27
- post_request = responder.requests[2] # this is the request that actually updates the task
28
- post_request.should be_post
29
- post_request.url.should == 'https://rally1.rallydev.com/slm/webservice/1.17/task/12345'
26
+ post_request = get_post_request(responder)
27
+
28
+ post_request.path.should == '/slm/webservice/1.17/task/12345'
30
29
 
31
30
  body = post_request.body.tap(&:rewind).read
32
31
  body.should include('<Blocked>false</Blocked>')
@@ -40,13 +39,13 @@ describe Rallycat::Update do
40
39
  Artifice.activate_with responder do
41
40
  task_num = "TA6666"
42
41
  update = Rallycat::Update.new(@api)
43
- message = update.task(task_num, state: "In-Progress", blocked: true)
42
+ message = update.task(task_num, :state => "In-Progress", :blocked => true)
44
43
  message.should include('Task (TA6666) was set to "In-Progress"')
45
44
  end
46
45
 
47
- post_request = responder.requests[2] # this is the request that actually updates the task
48
- post_request.should be_post
49
- post_request.url.should == 'https://rally1.rallydev.com/slm/webservice/1.17/task/12345'
46
+ post_request = get_post_request(responder)
47
+
48
+ post_request.path.should == '/slm/webservice/1.17/task/12345'
50
49
 
51
50
  body = post_request.body.tap(&:rewind).read
52
51
  body.should include('<Blocked>true</Blocked>')
@@ -59,12 +58,12 @@ describe Rallycat::Update do
59
58
  Artifice.activate_with responder do
60
59
  task_num = "TA6666"
61
60
  update = Rallycat::Update.new(@api)
62
- message = update.task(task_num, state: "Completed")
61
+ message = update.task(task_num, :state => "Completed")
63
62
  end
64
63
 
65
- post_request = responder.requests[2] # this is the request that actually updates the task
66
- post_request.should be_post
67
- post_request.url.should == 'https://rally1.rallydev.com/slm/webservice/1.17/task/12345'
64
+ post_request = get_post_request(responder)
65
+
66
+ post_request.path.should == '/slm/webservice/1.17/task/12345'
68
67
 
69
68
  body = post_request.body.tap(&:rewind).read
70
69
  body.should include('<State>Completed</State>')
@@ -78,13 +77,13 @@ describe Rallycat::Update do
78
77
  Artifice.activate_with responder do
79
78
  task_num = "TA6666"
80
79
  update = Rallycat::Update.new(@api)
81
- message = update.task(task_num, blocked: true)
80
+ message = update.task(task_num, :blocked => true)
82
81
  message.should include('Task (TA6666) was blocked.')
83
82
  end
84
83
 
85
- post_request = responder.requests[2] # this is the request that actually updates the task
86
- post_request.should be_post
87
- post_request.url.should == 'https://rally1.rallydev.com/slm/webservice/1.17/task/12345'
84
+ post_request = get_post_request(responder)
85
+
86
+ post_request.path.should == '/slm/webservice/1.17/task/12345'
88
87
 
89
88
  body = post_request.body.tap(&:rewind).read
90
89
  body.should include('<Blocked>true</Blocked>')
@@ -96,13 +95,13 @@ describe Rallycat::Update do
96
95
  Artifice.activate_with responder do
97
96
  task_num = "TA6666"
98
97
  update = Rallycat::Update.new(@api)
99
- message = update.task(task_num, state: 'Completed', owner: 'Freddy Fender')
98
+ message = update.task(task_num, :state => 'Completed', :owner => 'Freddy Fender')
100
99
  message.should include('Task (TA6666) was assigned to "Freddy Fender"')
101
100
  end
102
101
 
103
- post_request = responder.requests[4] # this is the request that actually updates the task
104
- post_request.should be_post
105
- post_request.url.should == 'https://rally1.rallydev.com/slm/webservice/1.17/task/12345'
102
+ post_request = get_post_request(responder)
103
+
104
+ post_request.path.should == '/slm/webservice/1.17/task/12345'
106
105
 
107
106
  body = post_request.body.tap(&:rewind).read
108
107
  body.should include('<State>Completed</State>')
@@ -118,7 +117,7 @@ describe Rallycat::Update do
118
117
  update = Rallycat::Update.new(@api)
119
118
 
120
119
  lambda {
121
- update.task(task_num, state: 'Completed', owner: 'Norman Notreal')
120
+ update.task(task_num, :state => 'Completed', :owner => 'Norman Notreal')
122
121
  }.should raise_error(Rallycat::UserNotFound, 'User (Norman Notreal) does not exist.')
123
122
  end
124
123
  end
@@ -131,9 +130,8 @@ describe Rallycat::Update do
131
130
  update = Rallycat::Update.new(@api)
132
131
 
133
132
  lambda {
134
- update.task(task_num, state: 'Completed')
133
+ update.task(task_num, :state => 'Completed')
135
134
  }.should raise_error(Rallycat::TaskNotFound, 'Task (TA6666) does not exist.')
136
135
  end
137
-
138
136
  end
139
137
  end
@@ -6,7 +6,6 @@
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
7
 
8
8
  require 'rallycat'
9
- require 'pry'
10
9
  require 'rally_rest_api'
11
10
  require 'artifice'
12
11
 
@@ -2,10 +2,12 @@ class RallyAuthResponder < GenericResponder
2
2
 
3
3
  def call(env)
4
4
  @requests << request = Rack::Request.new(env)
5
- if request.url == 'https://rally1.rallydev.com/slm/webservice/current/user'
5
+
6
+ case request.path
7
+ when '/slm/webservice/current/user'
6
8
  [200, {}, ['<User><DisplayName></DisplayName></User>']]
7
9
  else
8
- [500, {}, ['oh noes']]
10
+ [500, {}, ['No user was found']]
9
11
  end
10
12
  end
11
13
  end
@@ -3,8 +3,8 @@ class RallyDefectResponder < GenericResponder
3
3
  def call(env)
4
4
  @requests << request = Rack::Request.new(env)
5
5
 
6
- case request.url
7
- when "https://rally1.rallydev.com/slm/webservice/current/Defect?query=%28FormattedId+%3D+DE1234%29&fetch=true"
6
+ case request.path
7
+ when "/slm/webservice/current/Defect"
8
8
  [200, {}, [
9
9
  <<-XML
10
10
  <QueryResult>
@@ -25,6 +25,8 @@ class RallyDefectResponder < GenericResponder
25
25
  </QueryResult>
26
26
  XML
27
27
  ]]
28
+ else
29
+ RallyNoResultsResponder.new.call(env)
28
30
  end
29
31
  end
30
32
  end
@@ -3,72 +3,78 @@ class RallyIterationsResponder < GenericResponder
3
3
  def call(env)
4
4
  @requests << request = Rack::Request.new(env)
5
5
 
6
- case request.url
7
- when 'https://rally1.rallydev.com/slm/webservice/current/Project?query=%28Name+%3D+SuperBad%29'
8
- [200, {}, [
9
- <<-XML
10
- <QueryResult>
11
- <Results>
12
- <Object ref="https://rally1.rallydev.com/slm/webservice/1.36/project/777555" type="Project">
13
- <Name>SuperBad</Name>
14
- </Object>
15
- </Results>
16
- </QueryResult>
17
- XML
18
- ]]
19
- when 'https://rally1.rallydev.com/slm/webservice/current/Iteration?query=%28ObjectID+%3E+0%29&project=https%3A%2F%2Frally1.rallydev.com%2Fslm%2Fwebservice%2F1.36%2Fproject%2F777555&order=Startdate+desc&pagesize=10'
20
- [200, {}, [
21
- <<-XML
22
- <QueryResult>
23
- <Results>
24
- <Object type="Iteration">
25
- <Name>25 (2012-05-01 to 2012-05-05)</Name>
26
- </Object>
27
- <Object type="Iteration">
28
- <Name>25 (2012-05-01 to 2012-05-05)</Name>
29
- </Object>
30
- <Object type="Iteration">
31
- <Name>24 (2012-04-01 to 2012-04-05)</Name>
32
- </Object>
33
- <Object type="Iteration">
34
- <Name>24 (2012-04-01 to 2012-04-05)</Name>
35
- </Object>
36
- <Object type="Iteration">
37
- <Name>23 (2012-03-01 to 2012-03-05)</Name>
38
- </Object>
39
- <Object type="Iteration">
40
- <Name>23 (2012-03-01 to 2012-03-05)</Name>
41
- </Object>
42
- <Object type="Iteration">
43
- <Name>22 (2012-02-01 to 2012-02-05)</Name>
44
- </Object>
45
- <Object type="Iteration">
46
- <Name>22 (2012-02-01 to 2012-02-05)</Name>
47
- </Object>
48
- <Object type="Iteration">
49
- <Name>21 (2012-01-01 to 2012-01-05)</Name>
50
- </Object>
51
- <Object type="Iteration">
52
- <Name>21 (2012-01-01 to 2012-01-05)</Name>
53
- </Object>
54
- </Results>
55
- </QueryResult>
56
- XML
57
- ]]
58
- when 'https://rally1.rallydev.com/slm/webservice/current/Project?query=%28Name+%3D+SuperAwful%29'
59
- [200, {}, [
60
- <<-XML
61
- <QueryResult>
62
- <Results>
63
- <Object ref="https://rally1.rallydev.com/slm/webservice/1.36/project/888444" type="Project">
64
- <Name>SuperAwful</Name>
65
- </Object>
66
- </Results>
67
- </QueryResult>
68
- XML
69
- ]]
70
- when 'https://rally1.rallydev.com/slm/webservice/current/Iteration?query=%28ObjectID+%3E+0%29&project=https%3A%2F%2Frally1.rallydev.com%2Fslm%2Fwebservice%2F1.36%2Fproject%2F888444&order=Startdate+desc&pagesize=10'
71
- RallyNoResultsResponder.new.call(env)
6
+ case request.path
7
+ when '/slm/webservice/current/Project'
8
+ if request.params["query"].include? "SuperBad"
9
+ [200, {}, [
10
+ <<-XML
11
+ <QueryResult>
12
+ <Results>
13
+ <Object ref="/slm/webservice/1.36/project/777555" type="Project">
14
+ <Name>SuperBad</Name>
15
+ </Object>
16
+ </Results>
17
+ </QueryResult>
18
+ XML
19
+ ]]
20
+ elsif request.params["query"].include? "SuperAwful"
21
+ [200, {}, [
22
+ <<-XML
23
+ <QueryResult>
24
+ <Results>
25
+ <Object ref="/slm/webservice/1.36/project/888444" type="Project">
26
+ <Name>SuperAwful</Name>
27
+ </Object>
28
+ </Results>
29
+ </QueryResult>
30
+ XML
31
+ ]]
32
+ else
33
+ RallyNoResultsResponder.new.call(env)
34
+ end
35
+ when '/slm/webservice/current/Iteration'
36
+ if request.params["project"].include? "777555" # Project ID
37
+ [200, {}, [
38
+ <<-XML
39
+ <QueryResult>
40
+ <Results>
41
+ <Object type="Iteration">
42
+ <Name>25 (2012-05-01 to 2012-05-05)</Name>
43
+ </Object>
44
+ <Object type="Iteration">
45
+ <Name>25 (2012-05-01 to 2012-05-05)</Name>
46
+ </Object>
47
+ <Object type="Iteration">
48
+ <Name>24 (2012-04-01 to 2012-04-05)</Name>
49
+ </Object>
50
+ <Object type="Iteration">
51
+ <Name>24 (2012-04-01 to 2012-04-05)</Name>
52
+ </Object>
53
+ <Object type="Iteration">
54
+ <Name>23 (2012-03-01 to 2012-03-05)</Name>
55
+ </Object>
56
+ <Object type="Iteration">
57
+ <Name>23 (2012-03-01 to 2012-03-05)</Name>
58
+ </Object>
59
+ <Object type="Iteration">
60
+ <Name>22 (2012-02-01 to 2012-02-05)</Name>
61
+ </Object>
62
+ <Object type="Iteration">
63
+ <Name>22 (2012-02-01 to 2012-02-05)</Name>
64
+ </Object>
65
+ <Object type="Iteration">
66
+ <Name>21 (2012-01-01 to 2012-01-05)</Name>
67
+ </Object>
68
+ <Object type="Iteration">
69
+ <Name>21 (2012-01-01 to 2012-01-05)</Name>
70
+ </Object>
71
+ </Results>
72
+ </QueryResult>
73
+ XML
74
+ ]]
75
+ else
76
+ RallyNoResultsResponder.new.call(env)
77
+ end
72
78
  else
73
79
  RallyNoResultsResponder.new.call(env)
74
80
  end
@@ -3,18 +3,22 @@ class RallyStoriesResponder < GenericResponder
3
3
  def call(env)
4
4
  @requests << request = Rack::Request.new(env)
5
5
 
6
- case request.url
7
- when 'https://rally1.rallydev.com/slm/webservice/current/Project?query=%28Name+%3D+SuperBad%29'
8
- [200, {}, [
9
- <<-XML
10
- <QueryResult>
11
- <Results>
12
- <Object ref="https://rally1.rallydev.com/slm/webservice/1.17/project/777555" type="Project" />
13
- </Results>
14
- </QueryResult>
15
- XML
16
- ]]
17
- when 'https://rally1.rallydev.com/slm/webservice/1.17/project/777555'
6
+ case request.path
7
+ when '/slm/webservice/current/Project'
8
+ if request.params["query"].include? "SuperBad"
9
+ [200, {}, [
10
+ <<-XML
11
+ <QueryResult>
12
+ <Results>
13
+ <Object ref="https://rally1.rallydev.com/slm/webservice/1.17/project/777555" type="Project" />
14
+ </Results>
15
+ </QueryResult>
16
+ XML
17
+ ]]
18
+ else
19
+ RallyNoResultsResponder.new.call(env)
20
+ end
21
+ when '/slm/webservice/1.17/project/777555'
18
22
  [200, {}, [
19
23
  <<-XML
20
24
  <Project ref="https://rally1.rallydev.com/slm/webservice/1.17/project/777555">
@@ -22,77 +26,79 @@ class RallyStoriesResponder < GenericResponder
22
26
  </Project>
23
27
  XML
24
28
  ]]
25
- when 'https://rally1.rallydev.com/slm/webservice/current/Iteration?query=%28Name+%3D+%2225+%282012-05-01+to+2012-05-05%29%22%29&project=https%3A%2F%2Frally1.rallydev.com%2Fslm%2Fwebservice%2F1.17%2Fproject%2F777555'
26
- [200, {}, [
27
- # NOTE: Always getting two results back from Rally, not sure why.
28
- <<-XML
29
- <QueryResult>
30
- <Results>
31
- <Object ref="https://rally1.rallydev.com/slm/webservice/1.17/iteration/1234" type="Iteration" />
32
- <Object ref="https://rally1.rallydev.com/slm/webservice/1.17/iteration/4567" type="Iteration" />
33
- </Results>
34
- </QueryResult>
35
- XML
36
- ]]
37
- when 'https://rally1.rallydev.com/slm/webservice/1.17/iteration/1234'
29
+ when '/slm/webservice/current/Iteration'
30
+ if request.params["query"].include? '25 (2012-05-01 to 2012-05-05)'
31
+ [200, {}, [
32
+ <<-XML
33
+ <QueryResult>
34
+ <Results>
35
+ <Object ref="https://rally1.rallydev.com/slm/webservice/1.17/iteration/1234" type="Iteration" />
36
+ </Results>
37
+ </QueryResult>
38
+ XML
39
+ ]]
40
+ elsif request.params["query"].include? '26 (2012-06-01 to 2012-06-05)'
41
+ [200, {}, [
42
+ <<-XML
43
+ <QueryResult>
44
+ <Results>
45
+ <Object ref="https://rally1.rallydev.com/slm/webservice/1.17/iteration/7890" type="Iteration" />
46
+ </Results>
47
+ </QueryResult>
48
+ XML
49
+ ]]
50
+ else
51
+ RallyNoResultsResponder.new.call(env)
52
+ end
53
+ when '/slm/webservice/1.17/iteration/1234'
38
54
  [200, {}, [
39
55
  <<-XML
40
- <Iteration>
56
+ <Iteration ref="https://https://rally1.rallydev.com/slm/webservice/1.17/iteration/1234">
41
57
  <Name>25 (2012-05-01 to 2012-05-05)</Name>
42
58
  </Iteration>
43
59
  XML
44
60
  ]]
45
- when 'https://rally1.rallydev.com/slm/webservice/current/HierarchicalRequirement?query=%28Iteration+%3D+%29&project=https%3A%2F%2Frally1.rallydev.com%2Fslm%2Fwebservice%2F1.17%2Fproject%2F777555&pagesize=100&fetch=true'
46
- [200, {}, [
47
- <<-XML
48
- <QueryResult>
49
- <Results>
50
- <Object type="HierarchicalRequirement">
51
- <FormattedID>US123</FormattedID>
52
- <Name>This is story number one</Name>
53
- <ScheduleState>Completed</ScheduleState>
54
- </Object>
55
- <Object type="HierarchicalRequirement">
56
- <FormattedID>US456</FormattedID>
57
- <Name>This is story number two</Name>
58
- <ScheduleState>In-Progress</ScheduleState>
59
- </Object>
60
- </Results>
61
- </QueryResult>
62
- XML
63
- ]]
64
- when 'https://rally1.rallydev.com/slm/webservice/current/Defect?query=%28Iteration+%3D+%29&project=https%3A%2F%2Frally1.rallydev.com%2Fslm%2Fwebservice%2F1.17%2Fproject%2F777555&pagesize=100&fetch=true'
65
- [200, {}, [
66
- <<-XML
67
- <QueryResult>
68
- <Results>
69
- <Object type="Defect">
70
- <FormattedID>DE789</FormattedID>
71
- <Name>This is defect number one</Name>
72
- <ScheduleState>Defined</ScheduleState>
73
- </Object>
74
- </Results>
75
- </QueryResult>
76
- XML
77
- ]]
78
-
79
- # These are for testing the not so happy path.
80
- when 'https://rally1.rallydev.com/slm/webservice/current/Iteration?query=%28Name+%3D+%22Sprint+0%22%29&project=https%3A%2F%2Frally1.rallydev.com%2Fslm%2Fwebservice%2F1.17%2Fproject%2F777555'
81
- RallyNoResultsResponder.new.call(env)
82
- when 'https://rally1.rallydev.com/slm/webservice/current/Iteration?query=%28Name+%3D+%2226+%282012-06-01+to+2012-06-05%29%22%29&project=https%3A%2F%2Frally1.rallydev.com%2Fslm%2Fwebservice%2F1.17%2Fproject%2F777555'
83
- [200, {}, [
84
- <<-XML
85
- <QueryResult>
86
- <Results>
87
- <Object ref="https://rally1.rallydev.com/slm/webservice/1.17/iteration/7890" type="Iteration" />
88
- </Results>
89
- </QueryResult>
90
- XML
91
- ]]
92
- when 'https://rally1.rallydev.com/slm/webservice/1.17/iteration/7890'
93
- # does nothing WTF(but will make tests fail if not here)???
94
- when 'https://rally1.rallydev.com/slm/webservice/current/HierarchicalRequirement?query=%28Iteration+%3D+https%3A%2F%2Frally1.rallydev.com%2Fslm%2Fwebservice%2F1.17%2Fiteration%2F7890%29&project=https%3A%2F%2Frally1.rallydev.com%2Fslm%2Fwebservice%2F1.17%2Fproject%2F777555&pagesize=100&fetch=true'
95
- RallyNoResultsResponder.new.call(env)
61
+ when '/slm/webservice/current/HierarchicalRequirement'
62
+ if request.params["query"].include? '1234' # Iteration ID
63
+ [200, {}, [
64
+ <<-XML
65
+ <QueryResult>
66
+ <Results>
67
+ <Object type="HierarchicalRequirement">
68
+ <FormattedID>US123</FormattedID>
69
+ <Name>This is story number one</Name>
70
+ <ScheduleState>Completed</ScheduleState>
71
+ </Object>
72
+ <Object type="HierarchicalRequirement">
73
+ <FormattedID>US456</FormattedID>
74
+ <Name>This is story number two</Name>
75
+ <ScheduleState>In-Progress</ScheduleState>
76
+ </Object>
77
+ </Results>
78
+ </QueryResult>
79
+ XML
80
+ ]]
81
+ else
82
+ RallyNoResultsResponder.new.call(env)
83
+ end
84
+ when '/slm/webservice/current/Defect'
85
+ if request.params["query"].include? '1234' # Iteration ID
86
+ [200, {}, [
87
+ <<-XML
88
+ <QueryResult>
89
+ <Results>
90
+ <Object type="Defect">
91
+ <FormattedID>DE789</FormattedID>
92
+ <Name>This is defect number one</Name>
93
+ <ScheduleState>Defined</ScheduleState>
94
+ </Object>
95
+ </Results>
96
+ </QueryResult>
97
+ XML
98
+ ]]
99
+ else
100
+ RallyNoResultsResponder.new.call(env)
101
+ end
96
102
  else
97
103
  RallyNoResultsResponder.new.call(env)
98
104
  end
@@ -5,8 +5,8 @@ class RallyStoryResponder < GenericResponder
5
5
  def call(env)
6
6
  @requests << request = Rack::Request.new(env)
7
7
 
8
- case request.url
9
- when 'https://rally1.rallydev.com/slm/webservice/1.17/task/1'
8
+ case request.path
9
+ when '/slm/webservice/1.17/task/1'
10
10
  [200, {}, [
11
11
  <<-XML
12
12
  <Task refObjectName="Change link to button">
@@ -16,7 +16,7 @@ class RallyStoryResponder < GenericResponder
16
16
  </Task>
17
17
  XML
18
18
  ]]
19
- when 'https://rally1.rallydev.com/slm/webservice/1.17/task/2'
19
+ when '/slm/webservice/1.17/task/2'
20
20
  [200, {}, [
21
21
  <<-XML
22
22
  <Task refObjectName="Add confirmation">
@@ -26,7 +26,7 @@ XML
26
26
  </Task>
27
27
  XML
28
28
  ]]
29
- when 'https://rally1.rallydev.com/slm/webservice/1.17/task/3'
29
+ when '/slm/webservice/1.17/task/3'
30
30
  [200, {}, [
31
31
  <<-XML
32
32
  <Task refObjectName="Code Review">
@@ -36,7 +36,7 @@ XML
36
36
  </Task>
37
37
  XML
38
38
  ]]
39
- when 'https://rally1.rallydev.com/slm/webservice/1.17/task/4'
39
+ when '/slm/webservice/1.17/task/4'
40
40
  [200, {}, [
41
41
  <<-XML
42
42
  <Task refObjectName="QA Test">
@@ -46,8 +46,7 @@ XML
46
46
  </Task>
47
47
  XML
48
48
  ]]
49
- else
50
- # https://rally1.rallydev.com/slm/webservice/current/HierarchicalRequirement?query=%28FormattedId+%3D+US7176%29&fetch=true
49
+ when '/slm/webservice/current/HierarchicalRequirement'
51
50
  [200, {}, [
52
51
  <<-XML
53
52
  <QueryResult>
@@ -74,6 +73,8 @@ XML
74
73
  </QueryResult>
75
74
  XML
76
75
  ]]
76
+ else
77
+ RallyNoResultsResponder.new.call(env)
77
78
  end
78
79
  end
79
80
  end
@@ -3,7 +3,8 @@ class RallyTaskUpdateResponder < GenericResponder
3
3
  def call(env)
4
4
  @requests << request = Rack::Request.new(env)
5
5
 
6
- if request.url == 'https://rally1.rallydev.com/slm/webservice/current/Task?query=%28FormattedId+%3D+TA6666%29'
6
+ case request.path
7
+ when '/slm/webservice/current/Task'
7
8
  [200, {}, [
8
9
  <<-XML
9
10
  <?xml version="1.0" encoding="UTF-8"?>
@@ -17,47 +18,60 @@ class RallyTaskUpdateResponder < GenericResponder
17
18
  </QueryResult>
18
19
  XML
19
20
  ]]
20
- elsif request.get? && request.url == 'https://rally1.rallydev.com/slm/webservice/1.17/task/12345'
21
- [200, {}, [
22
- <<-XML
23
- <Task rallyAPIMajor="1" rallyAPIMinor="17" ref="https://rally1.rallydev.com/slm/webservice/1.17/task/12345" objectVersion="8" refObjectName="Tie your shoes!" CreatedAt="today at 8:31 pm">
24
- <CreationDate>2012-07-17T03:31:33.801Z</CreationDate>
25
- <ObjectID>12345</ObjectID>
26
- <Description />
27
- <Discussion />
28
- <FormattedID>TA6666</FormattedID>
29
- <LastUpdateDate>2012-07-17T04:00:35.888Z</LastUpdateDate>
30
- <Name>Tie your shoes!</Name>
31
- <Notes />
32
- <Owner>tester@testing.com</Owner>
33
- <Tags />
34
- <Attachments />
35
- <Blocked>false</Blocked>
36
- <Rank>4000</Rank>
37
- <State>Defined</State>
38
- <TaskIndex>2</TaskIndex>
39
- <ToDo>2.0</ToDo>
40
- </Task>
41
- XML
42
- ]]
43
- elsif request.post? && request.url == 'https://rally1.rallydev.com/slm/webservice/1.17/task/12345'
44
- [200, {}, ['<?xml version="1.0" encoding="UTF-8"?><OperationResult rallyAPIMajor="1" rallyAPIMinor="17"><Errors /><Warnings /></OperationResult>']]
45
- elsif request.url == 'https://rally1.rallydev.com/slm/webservice/current/User?query=%28DisplayName+%3D+%22Freddy+Fender%22%29'
46
- [200, {}, [
47
- <<-XML
48
- <QueryResult rallyAPIMajor="1" rallyAPIMinor="17">
49
- <Errors />
50
- <Warnings />
51
- <TotalResultCount>1</TotalResultCount>
52
- <StartIndex>1</StartIndex>
53
- <PageSize>20</PageSize>
54
- <Results>
55
- <Object rallyAPIMajor="1" rallyAPIMinor="17" ref="https://rally1.rallydev.com/slm/webservice/1.17/user/4567" refObjectName="Freddy Fender" type="User" />
56
- </Results>
57
- </QueryResult>
58
- XML
59
- ]]
60
- elsif request.url == 'https://rally1.rallydev.com/slm/webservice/1.17/user/4567'
21
+ when '/slm/webservice/1.17/task/12345'
22
+ if request.get?
23
+ [200, {}, [
24
+ <<-XML
25
+ <Task rallyAPIMajor="1" rallyAPIMinor="17" ref="https://rally1.rallydev.com/slm/webservice/1.17/task/12345" objectVersion="8" refObjectName="Tie your shoes!" CreatedAt="today at 8:31 pm">
26
+ <CreationDate>2012-07-17T03:31:33.801Z</CreationDate>
27
+ <ObjectID>12345</ObjectID>
28
+ <Description />
29
+ <Discussion />
30
+ <FormattedID>TA6666</FormattedID>
31
+ <LastUpdateDate>2012-07-17T04:00:35.888Z</LastUpdateDate>
32
+ <Name>Tie your shoes!</Name>
33
+ <Notes />
34
+ <Owner>tester@testing.com</Owner>
35
+ <Tags />
36
+ <Attachments />
37
+ <Blocked>false</Blocked>
38
+ <Rank>4000</Rank>
39
+ <State>Defined</State>
40
+ <TaskIndex>2</TaskIndex>
41
+ <ToDo>2.0</ToDo>
42
+ </Task>
43
+ XML
44
+ ]]
45
+ elsif request.post?
46
+ [200, {}, [
47
+ <<-XML
48
+ <OperationResult rallyAPIMajor="1" rallyAPIMinor="17">
49
+ <Errors />
50
+ <Warnings />
51
+ </OperationResult>
52
+ XML
53
+ ]]
54
+ end
55
+ when '/slm/webservice/current/User'
56
+ if request.params["query"].include? "Freddy Fender"
57
+ [200, {}, [
58
+ <<-XML
59
+ <QueryResult rallyAPIMajor="1" rallyAPIMinor="17">
60
+ <Errors />
61
+ <Warnings />
62
+ <TotalResultCount>1</TotalResultCount>
63
+ <StartIndex>1</StartIndex>
64
+ <PageSize>20</PageSize>
65
+ <Results>
66
+ <Object rallyAPIMajor="1" rallyAPIMinor="17" ref="https://rally1.rallydev.com/slm/webservice/1.17/user/4567" refObjectName="Freddy Fender" type="User" />
67
+ </Results>
68
+ </QueryResult>
69
+ XML
70
+ ]]
71
+ else
72
+ RallyNoResultsResponder.new.call(env)
73
+ end
74
+ when '/slm/webservice/1.17/user/4567'
61
75
  [200, {}, [
62
76
  <<-XML
63
77
  <User rallyAPIMajor="1" rallyAPIMinor="17" ref="https://rally1.rallydev.com/slm/webservice/1.17/user/4567" objectVersion="50" refObjectName="Freddy Fender">
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rallycat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-07-26 00:00:00.000000000 Z
13
+ date: 2012-07-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: builder
17
- requirement: &70357622298460 !ruby/object:Gem::Requirement
17
+ requirement: &70290592025020 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70357622298460
25
+ version_requirements: *70290592025020
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rally_rest_api
28
- requirement: &70357622297960 !ruby/object:Gem::Requirement
28
+ requirement: &70290592024300 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70357622297960
36
+ version_requirements: *70290592024300
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: nokogiri
39
- requirement: &70357622297540 !ruby/object:Gem::Requirement
39
+ requirement: &70290592023620 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,7 +44,40 @@ dependencies:
44
44
  version: '0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *70357622297540
47
+ version_requirements: *70290592023620
48
+ - !ruby/object:Gem::Dependency
49
+ name: rake
50
+ requirement: &70290592022780 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *70290592022780
59
+ - !ruby/object:Gem::Dependency
60
+ name: artifice
61
+ requirement: &70290592022000 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *70290592022000
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: &70290592020900 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *70290592020900
48
81
  description: The Rally website sucks. CLI is better.
49
82
  email:
50
83
  - adam@adamtanner.org
@@ -104,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
137
  version: '0'
105
138
  segments:
106
139
  - 0
107
- hash: -2821747029306890735
140
+ hash: 682521708574243756
108
141
  required_rubygems_version: !ruby/object:Gem::Requirement
109
142
  none: false
110
143
  requirements:
@@ -113,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
146
  version: '0'
114
147
  segments:
115
148
  - 0
116
- hash: -2821747029306890735
149
+ hash: 682521708574243756
117
150
  requirements: []
118
151
  rubyforge_project:
119
152
  rubygems_version: 1.8.7