jira-issues 0.0.1
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 +7 -0
- data/lib/jira_issues/jira_adapter.rb +32 -0
- data/lib/jira_issues/jira_issue_mapper.rb +31 -0
- data/lib/jira_issues/jira_issues_navigator.rb +52 -0
- data/lib/jira_issues/jira_query.rb +18 -0
- data/lib/jira_issues/jira_workflow.rb +24 -0
- data/lib/jira_issues.rb +6 -0
- metadata +134 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d5679b5e732288e730d878e483d9084f6c564175
|
4
|
+
data.tar.gz: 1728a9a75a5cfacdca88d148d617a8998d277cd5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bfcd63bd76f446c49c10e73152f6b1d300f86afd8c4daf40f7f8b2fd83b5b4baa69d7c977c8de3de31f66830224a7a42142eab755102a5cca2242daf5eeee60b
|
7
|
+
data.tar.gz: f98fc6d4172a97cf893da82d5c28e61cef031b3c823251fa4d10cb541843767e23658ac4b393303846a5621eff21b4b8951053e34854d3bc481ee122755d595b
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'jira-ruby'
|
2
|
+
|
3
|
+
module JiraIssues
|
4
|
+
class JiraAdapter
|
5
|
+
def create_task(task)
|
6
|
+
issue = client.Issue.build
|
7
|
+
issue.save(task.print)
|
8
|
+
end
|
9
|
+
|
10
|
+
def available?
|
11
|
+
response = client.get('/')
|
12
|
+
response.code == '200'
|
13
|
+
end
|
14
|
+
|
15
|
+
def jql(jql_query, fields)
|
16
|
+
client.Issue.jql(jql_query, fields)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def client
|
22
|
+
@client = JIRA::Client.new(
|
23
|
+
username: ENV['JIRA_USERNAME'],
|
24
|
+
password: ENV['JIRA_PASSWORD'],
|
25
|
+
site: ENV['JIRA_URL'],
|
26
|
+
context_path: '',
|
27
|
+
auth_type: :basic,
|
28
|
+
read_timeout: 120
|
29
|
+
)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module JiraIssues
|
2
|
+
class JiraIssueMapper
|
3
|
+
# WIP
|
4
|
+
# ATM mapper serialises issue to JSON
|
5
|
+
# We might consider using objects
|
6
|
+
|
7
|
+
def call(issue)
|
8
|
+
status = decode_status(issue)
|
9
|
+
{
|
10
|
+
key: issue.key,
|
11
|
+
type: issue.issuetype.name,
|
12
|
+
priority: issue.priority.name,
|
13
|
+
status: status,
|
14
|
+
#description: i.description,
|
15
|
+
summary: issue.summary,
|
16
|
+
created_date: issue.created,
|
17
|
+
closed_date: issue.resolutiondate
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def decode_status(issue)
|
24
|
+
JiraIssues::JiraWorkflow.issue_status_for_name(project_key(issue),issue.status.name)
|
25
|
+
end
|
26
|
+
|
27
|
+
def project_key(issue)
|
28
|
+
issue.key.split('-').first
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module JiraIssues
|
2
|
+
class JiraIssuesNavigator
|
3
|
+
def initialize(issues)
|
4
|
+
@issues = issues
|
5
|
+
end
|
6
|
+
|
7
|
+
def all
|
8
|
+
@issues
|
9
|
+
end
|
10
|
+
|
11
|
+
def open
|
12
|
+
@issues.select {|i| i[:status] == JiraWorkflow::OPEN}
|
13
|
+
end
|
14
|
+
|
15
|
+
def blocked
|
16
|
+
@issues.select {|i| i[:status] == JiraWorkflow::BLOCKED}
|
17
|
+
end
|
18
|
+
|
19
|
+
def in_progress
|
20
|
+
@issues.select {|i| i[:status] == JiraWorkflow::IN_PROGRESS}
|
21
|
+
end
|
22
|
+
|
23
|
+
def closed
|
24
|
+
@issues.select {|i| i[:status] == JiraWorkflow::CLOSED}
|
25
|
+
end
|
26
|
+
|
27
|
+
def with_status(status: selected_status)
|
28
|
+
@issues.select {|i| i[:status] == @issue_states[selected_status]}
|
29
|
+
end
|
30
|
+
|
31
|
+
def created_by_week
|
32
|
+
@issues.map { |i| { key: i[:key], week_created: Date.parse(i[:created_date]).beginning_of_week}}.group_by { |x| x[:week_created]}.map{ |k,v| [k, v.count] }.to_h.sort
|
33
|
+
end
|
34
|
+
|
35
|
+
def closed_by_week
|
36
|
+
@issues.select{|i| !i[:closed_date].nil? }.map { |i| { key: i[:key], week_closed: Date.parse(i[:closed_date]).beginning_of_week}}.group_by { |x| x[:week_closed]}.map{ |k,v| [k, v.count] }.to_h.sort
|
37
|
+
end
|
38
|
+
|
39
|
+
#aliases
|
40
|
+
def todo
|
41
|
+
open
|
42
|
+
end
|
43
|
+
|
44
|
+
def done
|
45
|
+
closed
|
46
|
+
end
|
47
|
+
|
48
|
+
def ip
|
49
|
+
in_progress
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module JiraIssues
|
2
|
+
class JiraQuery
|
3
|
+
def initialize(max_results = 1000)
|
4
|
+
@query_max_results = max_results
|
5
|
+
end
|
6
|
+
|
7
|
+
def jql_query(query)
|
8
|
+
result = adapter.jql(query, fields:[:description, :summary, :created, :status, :issuetype, :priority, :resolutiondate], max_results: @query_max_results)
|
9
|
+
JiraIssuesNavigator.new(result.map{|i| JiraIssueMapper.new.call(i) })
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def adapter
|
14
|
+
@adapter ||= JiraIssues::JiraAdapter.new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module JiraIssues
|
2
|
+
class JiraWorkflow
|
3
|
+
OPEN = 'Open'
|
4
|
+
IN_PROGRESS = 'InProgress'
|
5
|
+
BLOCKED = 'Blocked'
|
6
|
+
CLOSED = 'Closed'
|
7
|
+
# This is WIP
|
8
|
+
# This class should be able to map and unify:
|
9
|
+
# - statuses
|
10
|
+
# - workflows
|
11
|
+
# - transitions
|
12
|
+
# ATM - we will work onlu on defailt issue names
|
13
|
+
|
14
|
+
def self.issue_status_for_name(project_key, status_name)
|
15
|
+
{
|
16
|
+
'Backlog' => OPEN,
|
17
|
+
'Open' => OPEN,
|
18
|
+
'Blocked' => BLOCKED,
|
19
|
+
'In Progress' => IN_PROGRESS,
|
20
|
+
'Done' => CLOSED
|
21
|
+
}.fetch(status_name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/jira_issues.rb
ADDED
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jira-issues
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Filip Jakubowski-Drzrwiecki
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-12-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jira-ruby
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: byebug
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: fakeweb
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: Jira Issues gem that supports quering and filtering data for external
|
98
|
+
reporting and integrations.
|
99
|
+
email:
|
100
|
+
- don.o.phelippe@gmail.com
|
101
|
+
executables: []
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- lib/jira_issues.rb
|
106
|
+
- lib/jira_issues/jira_adapter.rb
|
107
|
+
- lib/jira_issues/jira_issue_mapper.rb
|
108
|
+
- lib/jira_issues/jira_issues_navigator.rb
|
109
|
+
- lib/jira_issues/jira_query.rb
|
110
|
+
- lib/jira_issues/jira_workflow.rb
|
111
|
+
homepage: https://github.com/filipjakubowski
|
112
|
+
licenses: []
|
113
|
+
metadata: {}
|
114
|
+
post_install_message:
|
115
|
+
rdoc_options: []
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
requirements: []
|
129
|
+
rubyforge_project:
|
130
|
+
rubygems_version: 2.6.14
|
131
|
+
signing_key:
|
132
|
+
specification_version: 4
|
133
|
+
summary: Jira Issues
|
134
|
+
test_files: []
|