lita-rally 0.1.1 → 0.2.0

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.
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: []