lita-rally 0.4.0 → 0.5.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: 3cd89121e0d94dbb82717bdf87a5d73bc5e30383
4
- data.tar.gz: f881f60bb78e08338e42f4f36cd95f7f17b2aa03
3
+ metadata.gz: ff72b0fbfa6e11ab442f696236e705c0429846e7
4
+ data.tar.gz: 363ebeef8d49d31c883ede14bae87e97e1061672
5
5
  SHA512:
6
- metadata.gz: cff30b41736dffc5f3b7a48c8aed21ae80607e914e2e0b0d9ec978bdd764245da589789a2fedde82e21b2823a02f182a0b03e1f7cc8e385c544e500a51cd4f31
7
- data.tar.gz: bfd3972bd78c16100b87a52a7ed0474621e682664c428bb343ffaa31d40bba05de5a83c7df8b1dd96a1bb4647b2f800f4a88c7f79776835d647c3d0c6a3d7ac6
6
+ metadata.gz: 0a56efa23c18ce9a1a850b6ab52ecd00858b1933dc47486cd8423be250690b7aed1d2c0a65a77cd1ee95176292f31e17ab2cbd7cd8162e483d5c1ffe878d073d
7
+ data.tar.gz: a984803b293ed835caa19e1f6126bdff29bd5b755207a4accac6abc81d480d8689d54debed9bfd6224d893d3f2fd2f6ebdb1069f0c6ec5d9682da3de6d906e86
data/README.md CHANGED
@@ -24,6 +24,7 @@ gem "lita-rally"
24
24
  **Optional:**
25
25
 
26
26
  ```config.handlers.rally.api_version``` - API version, default 'v2.0'
27
+ ```config.handlers.rally.read_only``` - disable commands that modifies objects
27
28
 
28
29
 
29
30
  ## Usage
@@ -49,6 +50,24 @@ term>" in <name|description>
49
50
  ```
50
51
  Find object with terms
51
52
 
53
+ ```
54
+ lita rally find defects <created|closed> between <date1> and <date2>
55
+ ```
56
+
57
+ Find rally defects created/closed in certain date range
58
+
59
+ ```
60
+ lita rally find defects <created|closed> in last <number> days
61
+ ```
62
+
63
+ Find rally defects created/closed in last few days
64
+
65
+ ```
66
+ lita rally query <type> <query_string>
67
+ ```
68
+
69
+ Execute raw Rally API query with <type> and <query_string>
70
+
52
71
  ```
53
72
  lita rally <start|pause|finish|accept|backlog> <FormattedID>
54
73
  ```
@@ -78,6 +78,7 @@ module Lita
78
78
  config :username, type: String, required: true
79
79
  config :password, type: String, required: true
80
80
  config :api_version, type: String, default: 'v2.0'
81
+ config :read_only, type: Object, default: false
81
82
 
82
83
  route(/^rally me ([[:alpha:]]+)(\d+)/, :rally_show, command: true, help: {
83
84
  'rally me <identifier>' => 'Show me that rally object'
@@ -105,7 +106,70 @@ module Lita
105
106
  'mark issue in-progress'
106
107
  })
107
108
 
109
+ route(/^rally query (\w+)\s+(.*)$/,
110
+ :rally_query_raw, command: true, help: { 'rally query <type> <query>' =>
111
+ 'execute raw query on rally on type of object'
112
+ })
113
+
114
+ route(/^rally find defect[s]{0,1} (created|closed) between (.+) and (.+)/,
115
+ :rally_find_defect_range, command: true, help: {
116
+ 'rally find defect <created|closed> between <date> and <date>' =>
117
+ 'Find defect objects in date range'
118
+ })
119
+
120
+ route(
121
+ /^rally find defect[s]{0,1} (created|closed) in last (\d+) day[s]{0,1}/,
122
+ :rally_find_defect_back, command: true, help: {
123
+ 'rally find defect <created|closed> in last <number> days' =>
124
+ 'Find defect objects in date range'
125
+ })
126
+
127
+ def rally_find_defect_back(response)
128
+ field =
129
+ response.matches[0][0] == 'created' ? 'CreationDate' : 'ClosedDate'
130
+ dt1 = (Time.now.to_date - response.matches[0][1].to_i).to_datetime
131
+ dt2 = Time.now.to_datetime.to_s
132
+
133
+ response.reply(rally_find_defect_by_date(field, dt1, dt2))
134
+ end
135
+
136
+ def rally_find_defect_range(response)
137
+ field =
138
+ response.matches[0][0] == 'created' ? 'CreationDate' : 'ClosedDate'
139
+ dt1 = Time.parse(response.matches[0][1]).to_datetime.to_s
140
+ dt2 = Time.parse(response.matches[0][2]).to_datetime.to_s
141
+
142
+ response.reply(rally_find_defect_by_date(field, dt1, dt2))
143
+ end
144
+
145
+ def rally_query_raw(response)
146
+ rally = get_rally_api
147
+
148
+ query = RallyAPI::RallyQuery.new()
149
+ query.type = response.matches[0][0]
150
+ query.query_string = response.matches[0][1]
151
+
152
+ result = rally.find(query)
153
+
154
+ if result.count < 1
155
+ response.reply("No object found")
156
+ else
157
+ response.reply(result.inject("") do |c,r|
158
+ r.read
159
+ "#{c}#{r['FormattedID']} - #{r['Name']}\n"
160
+ end)
161
+ end
162
+ rescue Exception => e
163
+ response.reply("Error executing query: #{e}")
164
+ end
165
+
108
166
  def rally_mark(response)
167
+ if config.read_only
168
+ response.reply('Rally plugin is operating in Read-Only mode, ' \
169
+ 'ask your chat-ops admin to disable it.')
170
+ return
171
+ end
172
+
109
173
  action = response.matches[0][0]
110
174
  type = response.matches[0][1].downcase
111
175
  id = response.matches[0][2]
@@ -237,6 +301,33 @@ module Lita
237
301
  end
238
302
  end
239
303
 
304
+ def rally_find_defect_by_date(field, dt1, dt2)
305
+ rally = get_rally_api
306
+
307
+ query = RallyAPI::RallyQuery.new()
308
+ query.type = 'defect'
309
+ query.query_string =
310
+ "((#{field} >= \"#{dt1}\") AND "\
311
+ "(#{field} <= \"#{dt2}\"))"
312
+
313
+ result = rally.find(query)
314
+
315
+ if result.count < 1
316
+ return "No defect found"
317
+ else
318
+ m_result =
319
+ result.map do |r|
320
+ r.read
321
+ [r['Project'].name,r['FormattedID'], r['Name']]
322
+ end
323
+ m_result.sort_by {|r| r[0]}.inject("") do |c,r|
324
+ "#{c}[#{r[0]}] #{r[1]} - #{r[2]}\n"
325
+ end
326
+ end
327
+ rescue Exception => e
328
+ "Error executing query: #{e}"
329
+ end
330
+
240
331
  def update_object(type, id, attribute, value, options = {})
241
332
  rally = get_rally_api
242
333
  return 'Object not found' unless obj = get_by_formatted_id(type, id)
data/lita-rally.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'lita-rally'
3
- spec.version = '0.4.0'
3
+ spec.version = '0.5.0'
4
4
  spec.authors = ['Richard Li']
5
5
  spec.email = ['evilcat@wisewolfsolutions.com']
6
6
  spec.description = %q{Rally plugin for lita bot}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-rally
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.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-09-24 00:00:00.000000000 Z
11
+ date: 2015-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita