Functions that wrap Jira API.
Every Jira function in this namespace follows the same pattern and
accepts at least the following three parameters: send-fn,
receive-fn, and opts.
send-fn. A function of one argument, that accepts a Ring-style
request map, sends it to a Jira HTTP server and returns
a Ring-style response map.receive-fn. A function of one argument, that accepts a Ring-style
response map, transforms it and returns the transformed value.opts. A map (it is optional for some of the functions) that configures
a Jira query.The library doesn't send HTTP requests itself, delegating this job
to a caller via send-fn and receive-fn parameters instead. Each
function will invoke send-fn argument with a request map it
generated, then return a result of applying receive-fn to the
return value from send-fn:
(defn typical-function
[send-fn receive-fn opts]
(let [request (generate-request-map opts)]
(-> request
send-fn
receive-fn)))
This approach allows for zero dependencies library but it comes with
a price - users have to add a glue between HTTP library of their
choice and manenko/clj-jira.
This section explains how to use manenko/clj-jira and clj-http
libraries together.
First, require both libraries in your application:
(ns manenko.clj-jira.example
(:require [clj-http.client :as client]
[manenko.clj-jira.core :as jira]
[manenko.clj-jira.middleware :as middleware]))
Then, define a host, email, and API token for Jira communication:
(def host "example.atlassian.net")
(def email "user@example.com")
(def token "DN21KLJh298haishu8AUHIU3")
You can, of course, retrieve them from other sources instead of hardcoding.
Next step is to define a function that sends an HTTP request and
integrate it with Jira middleware provided by manenko/clj-jira:
(defn request
[m]
(client/with-middleware
(conj
client/default-middleware
(middleware/wrap-api host)
(middleware/wrap-token-auth email token))
(client/request m)))
Now you can use request function to make API calls:
(jira/get-current-user request identity)
Functions that wrap Jira API.
### Design
Every Jira function in this namespace follows the same pattern and
accepts at least the following three parameters: `send-fn`,
`receive-fn`, and `opts`.
* `send-fn`. A function of one argument, that accepts a [Ring-style]
*request* map, sends it to a Jira HTTP server and returns
a [Ring-style] *response* map.
* `receive-fn`. A function of one argument, that accepts a [Ring-style]
*response* map, transforms it and returns the *transformed* value.
* `opts`. A map (it is optional for some of the functions) that configures
a Jira query.
The library doesn't send HTTP requests itself, delegating this job
to a caller via `send-fn` and `receive-fn` parameters instead. Each
function will invoke `send-fn` argument with a request map it
generated, then return a result of applying `receive-fn` to the
return value from `send-fn`:
```clojure
(defn typical-function
[send-fn receive-fn opts]
(let [request (generate-request-map opts)]
(-> request
send-fn
receive-fn)))
```
This approach allows for zero dependencies library but it comes with
a price - users have to add a glue between HTTP library of their
choice and `manenko/clj-jira`.
### Quickstart
This section explains how to use `manenko/clj-jira` and [clj-http]
libraries together.
First, require both libraries in your application:
```clojure
(ns manenko.clj-jira.example
(:require [clj-http.client :as client]
[manenko.clj-jira.core :as jira]
[manenko.clj-jira.middleware :as middleware]))
```
Then, define a host, email, and [API token] for Jira communication:
```clojure
(def host "example.atlassian.net")
(def email "user@example.com")
(def token "DN21KLJh298haishu8AUHIU3")
```
You can, of course, retrieve them from other sources instead of hardcoding.
Next step is to define a function that sends an HTTP request and
integrate it with Jira middleware provided by `manenko/clj-jira`:
```clojure
(defn request
[m]
(client/with-middleware
(conj
client/default-middleware
(middleware/wrap-api host)
(middleware/wrap-token-auth email token))
(client/request m)))
```
Now you can use `request` function to make API calls:
```clojure
(jira/get-current-user request identity)
```
[clj-http]: https://github.com/dakrone/clj-http
[Ring-style]: https://github.com/ring-clojure/ring/blob/master/SPEC
[API token]: https://confluence.atlassian.com/cloud/api-tokens-938839638.html(get-current-user send-fn receive-fn)(get-current-user send-fn receive-fn options)Gets information about a current user.
Arguments:
send-fn. A function of one argument, that accepts a Ring-style request map,
sends it to a Jira HTTP server and returns a Ring-style response map.receive-fn. A function of one argument, that accepts a Ring-style response map,
transforms it and returns the transformed value.opts. An optional map that configures a Jira query and supports the following
keys:
:expand - A sequence of fields to include to the response. Supports
the following values: :group (returns all groups, including
nested groups, the user belongs to) and :applicationRoles
(returns the application roles the user is assigned to).The function uses Get current user Atlassian Jira API.
Gets information about a current user.
**Arguments:**
* `send-fn`. A function of one argument, that accepts a Ring-style request map,
sends it to a Jira HTTP server and returns a Ring-style response map.
* `receive-fn`. A function of one argument, that accepts a Ring-style response map,
transforms it and returns the transformed value.
* `opts`. An optional map that configures a Jira query and supports the following
keys:
* `:expand` - A sequence of fields to include to the response. Supports
the following values: `:group` (returns all groups, including
nested groups, the user belongs to) and `:applicationRoles`
(returns the application roles the user is assigned to).
The function uses [Get current user] Atlassian Jira API.
[Get current user]: https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-myself-get(get-projects send-fn receive-fn)(get-projects send-fn receive-fn opts)Gets projects visible to a current user.
send-fn
A function of one argument, that accepts a Ring-style request map, sends it to a Jira HTTP server and returns a Ring-style response map.
receive-fn
A function of one argument, that accepts a Ring-style response map, transforms it and returns the transformed value.
opts
An optional map that configures a Jira query and supports the following keys:
:startAt - A page offset. Integer. Default is 0.:maxResults - A page size. Integer. Default is 0. Maximum is 0.:orderBy - Orders results by a field. The following values
are supported: :category, :key, :name, :owner.
Default is :key, which sorts projects alpabetically
by project key. You can prepend value with + or -
to specify a sort direction, e.g. :+owner,
:-category, etc.:query - Searches for projects which key or name matches
the given string.:typeKey - Orders results by the project type. A sequence of the
following values: :business, :service_desk,
:software.:categoryId - An identifier of the project's category. Integer.:searchBy - Default is [:key, :name].:action - Filters results by projects for which user can view,
browse, or edit the project. Supports the following
values: :view, :browse, :edit. Default is view.:expand - A sequence of fields to include to the response. Supports
the following values: :description, :projectKeys,
:lead, :issueTypes, :url.The function uses Get projects paginated Atlassian Jira API.
Gets projects visible to a current user.
##### Arguments
---
**`send-fn`**
A function of one argument, that accepts a Ring-style request map,
sends it to a Jira HTTP server and returns a Ring-style response map.
**`receive-fn`**
A function of one argument, that accepts a Ring-style response map,
transforms it and returns the transformed value.
**`opts`**
An optional map that configures a Jira query and supports the following
keys:
* `:startAt` - A page offset. Integer. Default is `0`.
* `:maxResults` - A page size. Integer. Default is `0`. Maximum is `0`.
* `:orderBy` - Orders results by a field. The following values
are supported: `:category`, `:key`, `:name`, `:owner`.
Default is `:key`, which sorts projects alpabetically
by project key. You can prepend value with `+` or `-`
to specify a sort direction, e.g. `:+owner`,
`:-category`, etc.
* `:query` - Searches for projects which `key` or `name` matches
the given string.
* `:typeKey` - Orders results by the project type. A sequence of the
following values: `:business`, `:service_desk`,
`:software`.
* `:categoryId` - An identifier of the project's category. Integer.
* `:searchBy` - Default is `[:key, :name]`.
* `:action` - Filters results by projects for which user can view,
browse, or edit the project. Supports the following
values: `:view`, `:browse`, `:edit`. Default is `view`.
* `:expand` - A sequence of fields to include to the response. Supports
the following values: `:description`, `:projectKeys`,
`:lead`, `:issueTypes`, `:url`.
---
##### Jira API Reference
The function uses [Get projects paginated] Atlassian Jira API.
[Get projects paginated]: https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-project-search-getcljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |