lita-rally 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb69ad300e75b3048aa6b0941b3aed94f6fe3884
4
- data.tar.gz: 31e6aeafcdccea484d825760b80658a145d98c98
3
+ metadata.gz: f789be04a2bffa5e4e6273765edc7d967702721d
4
+ data.tar.gz: 67351f852ce4c271cd9d99694df3f06994ef39a5
5
5
  SHA512:
6
- metadata.gz: 98e8d665d81080f77633297dbd31ae92d2e7d23c27b0a6e352891a952d614587b53eaf0017a9e9138d45353916b5ff38c18b098beddc5055692973bf99391126
7
- data.tar.gz: b9beadf1b2cef34b315a50dadefffc966f773223f9e7dbb78117cfc9e937a2d3421dd80119fda77b0b4b019909f1651d18b6e891cf0471161851632f0f7754e4
6
+ metadata.gz: 5164b6d3de89f8e4640a6465b83d272b3922f53c31c7b58c9f4dcc1976e04ababcfb9e43ead1fb0e03d14225b24e399ecb6df34dc49b1fe87e852460b2c02df1
7
+ data.tar.gz: 7ce2deeedc11df2a31d816bd33acbeecfaf77b8551d8d2ab5f254e88c1c374302979901b9cfe843ed9c07e09c158f246e2d3cb59f15354638a2c8fb19dd50533
@@ -1,9 +1,13 @@
1
1
  require 'rest-client'
2
2
  require 'json'
3
+ require 'rally_api'
3
4
 
4
5
  module Lita
5
6
  module Handlers
6
7
  class Rally < Handler
8
+
9
+ RALLY = "https://rally1.rallydev.com/slm/webservice"
10
+
7
11
  @@key_map = {
8
12
  'de' => {
9
13
  name: 'defect',
@@ -71,9 +75,9 @@ module Lita
71
75
  }
72
76
  }
73
77
 
74
- config :username
75
- config :password
76
- config :api_version
78
+ config :username, type: String, required: true
79
+ config :password, type: String, required: true
80
+ config :api_version, type: String, default: 'v2.0'
77
81
 
78
82
  route(/^rally me ([[:alpha:]]+)(\d+)/, :rally_show, command: true, help: {
79
83
  'rally me <identifier>' => 'Show me that rally object'
@@ -90,153 +94,122 @@ module Lita
90
94
  })
91
95
 
92
96
  def rally_show(response)
93
- if config_validate
94
- get_rally_object(response)
95
- else
96
- response.reply('Configuration failed to validate, '\
97
- 'check your config')
98
- end
97
+ type = response.matches[0][0].downcase
98
+ id = response.matches[0][1]
99
+
100
+ response.reply(get_rally_object(type, id))
99
101
  end
100
102
 
101
103
  def rally_release_stats(response)
102
- if config_validate
103
- get_rally_release_stat(response)
104
- else
105
- response.reply('Configuration failed to validate, '\
106
- 'check your config')
107
- end
104
+ release = response.matches[0][0]
105
+ response.reply(get_rally_release_stat(release))
108
106
  end
109
107
 
110
108
  def rally_release_info(response)
111
- if config_validate
112
- get_rally_release_info(response)
113
- else
114
- response.reply('Configuration failed to validate, '\
115
- 'check your config')
116
- end
109
+ release = response.matches[0][0]
110
+ response.reply(get_rally_release_info(release))
117
111
  end
118
112
 
119
113
  private
120
114
 
121
- def config_validate
122
- (config.username && config.password) ? true : false
123
- end
124
-
125
- def get_rest
126
- api_version = config.api_version ? config.api_version : 'v2.0'
127
- RestClient::Resource.new(
128
- "https://rally1.rallydev.com/slm/webservice/#{api_version}/",
129
- user: config.username,
115
+ def get_rally_api
116
+ rally_api_config = {
117
+ base_url: 'https://rally1.rallydev.com/slm',
118
+ username: config.username,
130
119
  password: config.password,
131
- )
120
+ version: config.api_version
121
+ }
122
+
123
+ RallyAPI::RallyRestJson.new(rally_api_config)
132
124
  end
133
125
 
134
- def validate_release(rest, release)
135
- query = "(Name = \"#{release}\")"
136
- JSON.parse(
137
- rest['release'].get(params: {query: query})
138
- )['QueryResult']['TotalResultCount'] == 0
126
+ def validate_release(rally, release)
127
+ query = RallyAPI::RallyQuery.new()
128
+ query.type = 'release'
129
+ query.query_string = "(Name = \"#{release}\")"
130
+
131
+ rally.find(query).count > 0
139
132
  end
140
133
 
141
- def get_rally_release_info(response)
142
- rest = get_rest
143
- release = response.matches[0][0]
144
- if validate_release(rest, release)
145
- response.reply("I can find anything about release: '#{release}'!")
146
- else
147
- query = "(Release.Name = \"#{release}\")"
148
- defects = JSON.parse(
149
- rest['defect'].get(
150
- params: {
151
- query: query,
152
- fetch: 'true',
153
- pagesize: '200',
154
- }
155
- )
156
- )['QueryResult']['Results'].map {|r| r['FormattedID']}.join(' ')
157
-
158
- us = JSON.parse(
159
- rest['hierarchicalrequirement'].get(
160
- params: {
161
- query: query,
162
- fetch: 'true',
163
- pagesize: '200',
164
- }
165
- )
166
- )['QueryResult']['Results'].map {|r| r['FormattedID']}.join(' ')
134
+ def get_rally_release_info(release)
135
+ rally = get_rally_api
136
+ if validate_release(rally, release)
137
+ query = RallyAPI::RallyQuery.new()
138
+ query.type = 'defect'
139
+ query.query_string = "(Release.Name = \"#{release}\")"
167
140
 
168
- output = "Release info for: #{release}\n" \
169
- "Defects: #{defects}\n" \
170
- "User Stories: #{us}\n"
171
- response.reply(output)
141
+ defects = rally.find(query).map {|r| r.read['FormattedID']}.join(' ')
142
+
143
+ query = RallyAPI::RallyQuery.new()
144
+ query.type = 'story'
145
+ query.query_string = "(Release.Name = \"#{release}\")"
146
+ us = rally.find(query).map {|r| r.read['FormattedID']}.join(' ')
147
+
148
+ "Release info for: #{release}\n" \
149
+ "Defects: #{defects}\n" \
150
+ "User Stories: #{us}\n"
151
+ else
152
+ "I can't find anything about release: '#{release}'!"
172
153
  end
173
154
  end
174
155
 
175
- def get_rally_release_stat(response)
176
- rest = get_rest
177
- release = response.matches[0][0]
178
- if validate_release(rest, release)
179
- response.reply("I can find anything about release: '#{release}'!")
156
+ def get_rally_release_stat(release)
157
+ rally = get_rally_api
158
+ if validate_release(rally, release)
159
+ query = RallyAPI::RallyQuery.new()
160
+ query.type = 'defect'
161
+ query.query_string = "(Release.Name = \"#{release}\")"
162
+
163
+ de_count = rally.find(query).count
164
+
165
+ query = RallyAPI::RallyQuery.new()
166
+ query.type = 'story'
167
+ query.query_string = "(Release.Name = \"#{release}\")"
168
+
169
+ us_count = rally.find(query).count
170
+
171
+ "Release stats for: #{release}\n" \
172
+ "Defects count: #{de_count}\n" \
173
+ "User Story count: #{us_count}\n"
180
174
  else
181
- query = "(Release.Name = \"#{release}\")"
182
- de_result = JSON.parse(
183
- rest['defect'].get(params: {query: query})
184
- )['QueryResult']
185
- de_count = de_result['TotalResultCount']
186
-
187
- us_result = JSON.parse(
188
- rest['hierarchicalrequirement'].get(params: {query: query})
189
- )['QueryResult']
190
- us_count = us_result['TotalResultCount']
191
-
192
- output = "Release stats for: #{release}\n" \
193
- "Defects count: #{de_count}\n" \
194
- "User Story count: #{us_count}\n"
195
- response.reply(output)
175
+ "I can find anything about release: '#{release}'!"
196
176
  end
197
177
  end
198
178
 
199
- def get_rally_object(response)
200
- rest = get_rest
201
- type = response.matches[0][0].downcase
202
- id = response.matches[0][1]
179
+ def get_rally_object(type, id)
180
+ rally = get_rally_api
181
+
203
182
  if @@key_map[type]
204
- query_path = (@@key_map[type][:query_path] || @@key_map[type][:name])
205
- link_path = (@@key_map[type][:link_path] || query_path)
206
- query_result = JSON.parse(
207
- rest[query_path].get(
208
- params: {
209
- query: "(FormattedId = #{id})",
210
- fetch: 'true'
211
- }
183
+ query = RallyAPI::RallyQuery.new()
184
+ query.type = @@key_map[type][:name]
185
+ query.query_string = "(FormattedID = \"#{type}#{id}\")"
186
+
187
+ result = rally.find(query)
188
+
189
+ if result.count < 1
190
+ response.reply(
191
+ "Can't find your so called #{@@key_map[type][:name]} " \
192
+ "#{type}#{id}"
212
193
  )
213
- )['QueryResult']
214
- if query_result['TotalResultCount'] == 0
215
- response.reply("Can't find your so called #{type}#{id} in Rally!")
216
194
  else
217
- result = query_result['Results'][0]
218
- link = link_to_item(result, link_path)
219
- output = ''
220
- output += link + "\n" if link
221
- output += "#{result['FormattedID']} - #{result['Name']}\n" \
222
- "Owner: #{result['Owner']['_refObjectName']}\n" \
223
- "Project: #{result['Project']['_refObjectName']}\n"
195
+ out = result[0].read
196
+ output = "#{link_to_item(out, @@key_map[type][:link_path])}\n" \
197
+ "Owner: #{out['Owner']['_refObjectName']}\n" \
198
+ "Project: #{out['Project']['_refObjectName']}\n"
224
199
  @@key_map[type][:extra_output].each do |field|
225
- output += "#{field}: #{result[field]}\n" if
226
- field.is_a?(String) && result[field]
227
- output += "#{field[0]}: #{result[field[0]][field[1]]}\n" if
228
- field.is_a?(Array) && result[field[0]]
200
+ output += "#{field}: #{out[field]}\n" if
201
+ field.is_a?(String) && out[field]
202
+ output += "#{field[0]}: #{out[field[0]][field[1]]}\n" if
203
+ field.is_a?(Array) && out[field[0]]
229
204
  end
230
- output += "Description: #{strip_html(result['Description'])}\n"
231
- response.reply(output)
205
+ output += "Description: #{strip_html(out['Description'])}\n"
232
206
  end
233
207
  else
234
- response.reply("I don't know the type #{type}")
208
+ "I don't know the type #{type}"
235
209
  end
236
210
  end
237
211
 
238
212
  def link_to_item(result, type)
239
- return false unless result['Project'] && result['ObjectID']
240
213
  project_id = result['Project']['_ref'].split('/')[-1]
241
214
  object_id = result['ObjectID']
242
215
  "https://rally1.rallydev.com/#/#{project_id}/detail/#{type}/#{object_id}"
data/lita-rally.gemspec CHANGED
@@ -1,9 +1,9 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-rally"
3
- spec.version = "0.1.1"
3
+ spec.version = "0.2.0"
4
4
  spec.authors = ['Richard Li']
5
5
  spec.email = ['evilcat@wisewolfsolutions.com']
6
- spec.description = %q{lita bot Rally plugin}
6
+ spec.description = %q{Rally plugin for lita bot}
7
7
  spec.summary = %q{lita bot Rally plugin}
8
8
  spec.homepage = "https://github.com/ecwws/lita-rally"
9
9
  spec.license = "MIT"
@@ -14,12 +14,12 @@ Gem::Specification.new do |spec|
14
14
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
15
  spec.require_paths = ["lib"]
16
16
 
17
- spec.add_runtime_dependency "lita", ">= 4.1"
18
- spec.add_runtime_dependency "rest-client"
19
- spec.add_runtime_dependency "json"
17
+ spec.add_runtime_dependency "lita", "~> 4.1"
18
+ spec.add_runtime_dependency "rest-client", "~> 0"
19
+ spec.add_runtime_dependency "json", "~> 0"
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rack-test"
24
- spec.add_development_dependency "rspec", ">= 3.0.0"
22
+ spec.add_development_dependency "rake", "~> 0"
23
+ spec.add_development_dependency "rack-test", "~> 0"
24
+ spec.add_development_dependency "rspec", '~> 3.0', '>= 3.0.0'
25
25
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-rally
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Li
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-07 00:00:00.000000000 Z
11
+ date: 2015-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rest-client
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: json
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
@@ -70,34 +70,37 @@ dependencies:
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rack-test
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.0'
101
104
  - - ">="
102
105
  - !ruby/object:Gem::Version
103
106
  version: 3.0.0
@@ -105,10 +108,13 @@ dependencies:
105
108
  prerelease: false
106
109
  version_requirements: !ruby/object:Gem::Requirement
107
110
  requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '3.0'
108
114
  - - ">="
109
115
  - !ruby/object:Gem::Version
110
116
  version: 3.0.0
111
- description: lita bot Rally plugin
117
+ description: Rally plugin for lita bot
112
118
  email:
113
119
  - evilcat@wisewolfsolutions.com
114
120
  executables: []