jiraby 0.0.1 → 0.0.2
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 +94 -4
- data/jiraby.gemspec +1 -1
- data/lib/jiraby/jira.rb +13 -34
- metadata +2 -2
data/README.md
CHANGED
@@ -1,11 +1,29 @@
|
|
1
1
|
Jiraby
|
2
2
|
======
|
3
|
+
[](http://travis-ci.org/a-e/jiraby)
|
3
4
|
|
4
5
|
Jiraby is a Ruby wrapper for the [JIRA](http://www.atlassian.com/JIRA)
|
5
6
|
[REST API](https://docs.atlassian.com/jira/REST/latest/), supporting Jira
|
6
|
-
versions 6.
|
7
|
+
versions 6.x onward.
|
7
8
|
|
8
|
-
[
|
9
|
+
- [Source](https://github.com/a-e/jiraby)
|
10
|
+
- [Documentation](http://rubydoc.info/github/a-e/jiraby/master/frames)
|
11
|
+
- [Gem](http://rubygems.org/gems/jiraby)
|
12
|
+
- [Status](https://travis-ci.org/a-e/jiraby)
|
13
|
+
|
14
|
+
|
15
|
+
Install
|
16
|
+
-------
|
17
|
+
|
18
|
+
Just do:
|
19
|
+
|
20
|
+
$ gem install jiraby
|
21
|
+
|
22
|
+
Or add:
|
23
|
+
|
24
|
+
gem 'cherby'
|
25
|
+
|
26
|
+
to your project's Gemfile or gemspec.
|
9
27
|
|
10
28
|
|
11
29
|
Connect to Jira
|
@@ -49,8 +67,8 @@ All REST methods return a `Jiraby::Entity` (a hash-like object built directly fr
|
|
49
67
|
the JSON response), or an `Array` of them (for those REST methods that return arrays).
|
50
68
|
|
51
69
|
|
52
|
-
|
53
|
-
|
70
|
+
Issue wrapper
|
71
|
+
-------------
|
54
72
|
|
55
73
|
You can look up a Jira issue using the `#issue` method:
|
56
74
|
|
@@ -104,6 +122,78 @@ Then save the updates back to Jira:
|
|
104
122
|
# => true
|
105
123
|
|
106
124
|
|
125
|
+
Enumerator wrapper
|
126
|
+
------------------
|
127
|
+
|
128
|
+
Several of Jira's REST API methods return their data in batches, based on the
|
129
|
+
value of `startAt` and `maxResults` parameters, effectively breaking larger
|
130
|
+
result sets into pages. Since it's likely you'll want to eventually fetch all
|
131
|
+
pages of results, the `Jiraby::Jira` class can wrap such methods in an
|
132
|
+
`Enumerator`, via the `#enumerator` method.
|
133
|
+
|
134
|
+
For example, using the issue `search` method to look up all issues in project
|
135
|
+
"FOO", then using `.each` to iterate over them:
|
136
|
+
|
137
|
+
query = 'project=FOO order by key'
|
138
|
+
jira.enumerator(
|
139
|
+
:post, 'search', {:jql => query}, 'issues'
|
140
|
+
).each do |issue|
|
141
|
+
puts "#{issue.key}: #{issue.fields.summary}"
|
142
|
+
end
|
143
|
+
|
144
|
+
The output might be:
|
145
|
+
|
146
|
+
FOO-1: First issue in Foo project
|
147
|
+
FOO-2: Another issue
|
148
|
+
(...)
|
149
|
+
FOO-149: Penultimate issue
|
150
|
+
FOO-150: Last issue
|
151
|
+
|
152
|
+
Because the `search` method is so useful, it includes a wrapper of its own; all
|
153
|
+
you need to provide is a JQL query:
|
154
|
+
|
155
|
+
issues = jira.search('project=FOO order by key')
|
156
|
+
# => #<Enumerator: ...>
|
157
|
+
|
158
|
+
This `Enumerator` spits out `Issue` instances. Simply iterate over the issues
|
159
|
+
using `.each`, `.map`, `.select` or their ilk, and each page will be fetched
|
160
|
+
as it's needed, transparently:
|
161
|
+
|
162
|
+
issues.each do |issue|
|
163
|
+
puts "#{issue.key}: #{issue['summary']}"
|
164
|
+
end
|
165
|
+
|
166
|
+
issue_keys = issues.map { |issue| issue.key }
|
167
|
+
|
168
|
+
unassigned_subtasks = issues.select do |issue|
|
169
|
+
!issue.is_assigned? && issue.is_subtask?
|
170
|
+
end
|
171
|
+
|
172
|
+
Using the `Enumerator` prevents having to load the entire list of issues into
|
173
|
+
memory at once, but can mean doing a lot of requests to Jira. If you plan to
|
174
|
+
iterate through the issues more than once and would like to avoid repeated
|
175
|
+
requests to the REST API, you could convert the `Enumerator` to an `Array`:
|
176
|
+
|
177
|
+
issues_array = issues.to_a
|
178
|
+
|
179
|
+
Below is a complete list of Jira REST API methods that accept `startAt`
|
180
|
+
and `maxResults`.
|
181
|
+
|
182
|
+
Returning `Jiraby::Entity`:
|
183
|
+
|
184
|
+
GET /dashboard => { 'dashboards' => [...], 'total' => N } (dashboards)
|
185
|
+
GET /search => { 'issues' => [...], 'total' => N } (issues)
|
186
|
+
POST /search => { 'issues' => [...], 'total' => N } (issues)
|
187
|
+
|
188
|
+
Returning `Array` of `Jiraby::Entity`:
|
189
|
+
|
190
|
+
GET /user/assignable/multiProjectSearch => [...] (users)
|
191
|
+
GET /user/assignable/search => [...] (users)
|
192
|
+
GET /user/permission/search => [...] (users)
|
193
|
+
GET /user/search => [...] (users)
|
194
|
+
GET /user/viewissue/search => [...] (users)
|
195
|
+
|
196
|
+
|
107
197
|
Copyright
|
108
198
|
---------
|
109
199
|
|
data/jiraby.gemspec
CHANGED
data/lib/jiraby/jira.rb
CHANGED
@@ -136,40 +136,19 @@ module Jiraby
|
|
136
136
|
|
137
137
|
# Return an Enumerator yielding items returned by a REST method that
|
138
138
|
# accepts `startAt` and `maxResults` parameters. This allows you to
|
139
|
-
# iterate through large data sets
|
140
|
-
#
|
141
|
-
#
|
142
|
-
#
|
143
|
-
#
|
144
|
-
#
|
145
|
-
#
|
146
|
-
#
|
147
|
-
#
|
148
|
-
#
|
149
|
-
#
|
150
|
-
#
|
151
|
-
#
|
152
|
-
#
|
153
|
-
# FOO-1: First issue in Foo project
|
154
|
-
# FOO-2: Another issue
|
155
|
-
# (...)
|
156
|
-
# FOO-149: Penultimate issue
|
157
|
-
# FOO-150: Last issue
|
158
|
-
#
|
159
|
-
# Below is a complete list of Jira REST API methods that accept `startAt`
|
160
|
-
# and `maxResults`.
|
161
|
-
#
|
162
|
-
# Returning Entity:
|
163
|
-
# GET /dashboard => { 'dashboards' => [...], 'total' => N } (dashboards)
|
164
|
-
# GET /search => { 'issues' => [...], 'total' => N } (issues)
|
165
|
-
# POST /search => { 'issues' => [...], 'total' => N } (issues)
|
166
|
-
#
|
167
|
-
# Returning Array of Entity:
|
168
|
-
# GET /user/assignable/multiProjectSearch => [...] (users)
|
169
|
-
# GET /user/assignable/search => [...] (users)
|
170
|
-
# GET /user/permission/search => [...] (users)
|
171
|
-
# GET /user/search => [...] (users)
|
172
|
-
# GET /user/viewissue/search => [...] (users)
|
139
|
+
# iterate through large data sets.
|
140
|
+
#
|
141
|
+
# @param [String,Symbol] method
|
142
|
+
# HTTP request method to use (`:get` or `:post`)
|
143
|
+
# @param [String] path
|
144
|
+
# Relative path to the REST method (such as `user/search`)
|
145
|
+
# @param [Hash] params
|
146
|
+
# GET or POST parameters to submit (depending on which method
|
147
|
+
# and path you're requesting)
|
148
|
+
# @param [String] list_key
|
149
|
+
# For REST methods returning an array embedded in an object
|
150
|
+
# (like `search` and `dashboard`), the attribute name where
|
151
|
+
# the array of things is stored.
|
173
152
|
#
|
174
153
|
def enumerator(method, path, params={}, list_key=nil)
|
175
154
|
max_results = @@max_results
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jiraby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-03-
|
12
|
+
date: 2014-03-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|