embulk-input-jira 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/embulk-input-jira.gemspec +2 -1
- data/lib/embulk/input/jira.rb +21 -23
- data/lib/embulk/input/jira_api/client.rb +6 -1
- data/spec/embulk/input/jira_api/client_spec.rb +4 -3
- data/spec/embulk/input/jira_spec.rb +23 -23
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fb29dc47926d5c193b6b8b08f4a824cd2a83872
|
4
|
+
data.tar.gz: 2ebccda2aa31109d07021be6a1bdcdd052376f64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc399cfc63fd0adc78b46f4824a0ee12d45d0acfbb7dc249d43888c63b5e9c466a6ab08c5bdedcfcf9727448605084ff3646d0d31c4732f61723c002e18a22dc
|
7
|
+
data.tar.gz: 90475bce6b6d0572d51e52cea7c36345bc5c2a52b93c4dc7da488bd32eca991eb4745de7853a244930843b9d3f4034aecfb808e4633c57aa8ba36759cd36e64d
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 0.0.6 - 2015-06-24
|
2
|
+
* [maintenance] String keys to symbols [#35](https://github.com/treasure-data/embulk-input-jira/pull/35)
|
3
|
+
* [enhancement] Faster fetching with parallel API request [#34](https://github.com/treasure-data/embulk-input-jira/pull/34)
|
4
|
+
|
1
5
|
## 0.0.5 - 2015-06-24
|
2
6
|
|
3
7
|
**Embulk 0.6.12+ is required since this version**
|
data/embulk-input-jira.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "embulk-input-jira"
|
3
|
-
spec.version = "0.0.
|
3
|
+
spec.version = "0.0.6"
|
4
4
|
spec.authors = ["uu59", "yoshihara"]
|
5
5
|
spec.summary = "Jira input plugin for Embulk"
|
6
6
|
spec.description = "Loads records from Jira."
|
@@ -13,6 +13,7 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.require_paths = ["lib"]
|
14
14
|
|
15
15
|
spec.add_dependency 'jiralicious', ['~> 0.5.0']
|
16
|
+
spec.add_dependency 'parallel', ['~> 1.6.0']
|
16
17
|
spec.add_development_dependency 'bundler', ['~> 1.0']
|
17
18
|
spec.add_development_dependency 'rake', ['>= 10.0']
|
18
19
|
spec.add_development_dependency 'rspec', "~> 3.2.0"
|
data/lib/embulk/input/jira.rb
CHANGED
@@ -12,21 +12,21 @@ module Embulk
|
|
12
12
|
|
13
13
|
def self.transaction(config, &control)
|
14
14
|
task = {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
username: config.param(:username, :string),
|
16
|
+
password: config.param(:password, :string),
|
17
|
+
uri: config.param(:uri, :string),
|
18
|
+
jql: config.param(:jql, :string),
|
19
19
|
}
|
20
20
|
|
21
21
|
attributes = {}
|
22
|
-
columns = config.param(
|
22
|
+
columns = config.param(:columns, :array).map do |column|
|
23
23
|
name = column["name"]
|
24
24
|
type = column["type"].to_sym
|
25
25
|
attributes[name] = type
|
26
26
|
Column.new(nil, name, type, column["format"])
|
27
27
|
end
|
28
28
|
|
29
|
-
task[
|
29
|
+
task[:attributes] = attributes
|
30
30
|
|
31
31
|
resume(task, columns, 1, &control)
|
32
32
|
end
|
@@ -39,22 +39,20 @@ module Embulk
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.guess(config)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
password = config.param("password", :string)
|
47
|
-
uri = config.param("uri", :string)
|
48
|
-
api_version = "latest"
|
49
|
-
auth_type = "basic"
|
50
|
-
jql = config.param("jql", :string)
|
42
|
+
username = config.param(:username, :string)
|
43
|
+
password = config.param(:password, :string)
|
44
|
+
uri = config.param(:uri, :string)
|
45
|
+
jql = config.param(:jql, :string)
|
51
46
|
|
52
47
|
jira = JiraApi::Client.setup do |jira_config|
|
48
|
+
# TODO: api_version should be 2 (the latest version)
|
49
|
+
# auth_type should be specified from config. (The future task)
|
50
|
+
|
53
51
|
jira_config.username = username
|
54
52
|
jira_config.password = password
|
55
53
|
jira_config.uri = uri
|
56
|
-
jira_config.api_version =
|
57
|
-
jira_config.auth_type =
|
54
|
+
jira_config.api_version = "latest"
|
55
|
+
jira_config.auth_type = "basic"
|
58
56
|
end
|
59
57
|
|
60
58
|
# TODO: we use 0..10 issues to guess config?
|
@@ -72,15 +70,15 @@ module Embulk
|
|
72
70
|
end
|
73
71
|
|
74
72
|
def init
|
75
|
-
@attributes = task[
|
73
|
+
@attributes = task[:attributes]
|
76
74
|
@jira = JiraApi::Client.setup do |config|
|
77
|
-
config.username = task[
|
78
|
-
config.password = task[
|
79
|
-
config.uri = task[
|
75
|
+
config.username = task[:username]
|
76
|
+
config.password = task[:password]
|
77
|
+
config.uri = task[:uri]
|
80
78
|
config.api_version = "latest"
|
81
|
-
config.auth_type =
|
79
|
+
config.auth_type = "basic"
|
82
80
|
end
|
83
|
-
@jql = task[
|
81
|
+
@jql = task[:jql]
|
84
82
|
end
|
85
83
|
|
86
84
|
def run
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "jiralicious"
|
2
|
+
require "parallel"
|
2
3
|
require "embulk/input/jira_api/issue"
|
3
4
|
require "timeout"
|
4
5
|
|
@@ -6,6 +7,7 @@ module Embulk
|
|
6
7
|
module Input
|
7
8
|
module JiraApi
|
8
9
|
class Client
|
10
|
+
PARALLEL_THREAD_COUNT = 50
|
9
11
|
SEARCH_TIMEOUT_SECONDS = 5
|
10
12
|
SEARCH_ISSUES_TIMEOUT_SECONDS = 60
|
11
13
|
DEFAULT_SEARCH_RETRY_TIMES = 10
|
@@ -17,7 +19,10 @@ module Embulk
|
|
17
19
|
|
18
20
|
def search_issues(jql, options={})
|
19
21
|
timeout_and_retry(SEARCH_ISSUES_TIMEOUT_SECONDS) do
|
20
|
-
search(jql, options).
|
22
|
+
issues_raw = search(jql, options).issues_raw
|
23
|
+
Parallel.map(issues_raw, in_threads: PARALLEL_THREAD_COUNT) do |issue_raw|
|
24
|
+
# https://github.com/dorack/jiralicious/blob/v0.4.0/lib/jiralicious/search_result.rb#L32-34
|
25
|
+
issue = Jiralicious::Issue.find(issue_raw["key"])
|
21
26
|
JiraApi::Issue.new(issue)
|
22
27
|
end
|
23
28
|
end
|
@@ -48,7 +48,7 @@ describe Embulk::Input::JiraApi::Client do
|
|
48
48
|
"summary" => "issue summary",
|
49
49
|
"project" =>
|
50
50
|
{
|
51
|
-
"key" => "
|
51
|
+
"key" => "FO1"
|
52
52
|
}
|
53
53
|
}
|
54
54
|
},
|
@@ -60,7 +60,7 @@ describe Embulk::Input::JiraApi::Client do
|
|
60
60
|
"summary" => "jira issue",
|
61
61
|
"project" =>
|
62
62
|
{
|
63
|
-
"key" => "
|
63
|
+
"key" => "FO2"
|
64
64
|
}
|
65
65
|
}
|
66
66
|
}
|
@@ -70,7 +70,8 @@ describe Embulk::Input::JiraApi::Client do
|
|
70
70
|
subject { Embulk::Input::JiraApi::Client.new.search_issues(jql) }
|
71
71
|
|
72
72
|
it do
|
73
|
-
allow(Jiralicious).to receive_message_chain(:search, :
|
73
|
+
allow(Jiralicious).to receive_message_chain(:search, :issues_raw).and_return(results)
|
74
|
+
allow(Jiralicious::Issue).to receive(:find).and_return(results.first)
|
74
75
|
|
75
76
|
expect(subject).to be_kind_of Array
|
76
77
|
expect(subject.map(&:class)).to match_array [Embulk::Input::JiraApi::Issue, Embulk::Input::JiraApi::Issue]
|
@@ -15,11 +15,11 @@ describe Embulk::Input::Jira do
|
|
15
15
|
|
16
16
|
let(:task) do
|
17
17
|
{
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
username: username,
|
19
|
+
password: password,
|
20
|
+
uri: uri,
|
21
|
+
jql: jql,
|
22
|
+
attributes: {
|
23
23
|
"project.key" => :string,
|
24
24
|
"comment.total" => :long
|
25
25
|
}
|
@@ -41,11 +41,11 @@ describe Embulk::Input::Jira do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
before do
|
44
|
-
allow(config).to receive(:param).with(
|
45
|
-
allow(config).to receive(:param).with(
|
46
|
-
allow(config).to receive(:param).with(
|
47
|
-
allow(config).to receive(:param).with(
|
48
|
-
allow(config).to receive(:param).with(
|
44
|
+
allow(config).to receive(:param).with(:username, :string).and_return(username)
|
45
|
+
allow(config).to receive(:param).with(:password, :string).and_return(password)
|
46
|
+
allow(config).to receive(:param).with(:uri, :string).and_return(uri)
|
47
|
+
allow(config).to receive(:param).with(:jql, :string).and_return(jql)
|
48
|
+
allow(config).to receive(:param).with(:columns, :array).and_return(columns)
|
49
49
|
end
|
50
50
|
|
51
51
|
# NOTE: I should check other factor, but i don't know it...
|
@@ -60,11 +60,11 @@ describe Embulk::Input::Jira do
|
|
60
60
|
|
61
61
|
let(:task) do
|
62
62
|
{
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
username: username,
|
64
|
+
password: password,
|
65
|
+
uri: uri,
|
66
|
+
jql: jql,
|
67
|
+
attributes: {
|
68
68
|
"project.key" => :string,
|
69
69
|
"comment.total" => :long
|
70
70
|
}
|
@@ -129,10 +129,10 @@ describe Embulk::Input::Jira do
|
|
129
129
|
before do
|
130
130
|
allow(jira_api).to receive(:search_issues).with(jql, max_results: described_class::GUESS_RECORDS_COUNT).and_return(jira_issues)
|
131
131
|
|
132
|
-
allow(config).to receive(:param).with(
|
133
|
-
allow(config).to receive(:param).with(
|
134
|
-
allow(config).to receive(:param).with(
|
135
|
-
allow(config).to receive(:param).with(
|
132
|
+
allow(config).to receive(:param).with(:username, :string).and_return(username)
|
133
|
+
allow(config).to receive(:param).with(:password, :string).and_return(password)
|
134
|
+
allow(config).to receive(:param).with(:uri, :string).and_return(uri)
|
135
|
+
allow(config).to receive(:param).with(:jql, :string).and_return(jql)
|
136
136
|
end
|
137
137
|
|
138
138
|
it "setup Embulk::Input::JiraApi::Client" do
|
@@ -188,8 +188,8 @@ describe Embulk::Input::Jira do
|
|
188
188
|
let(:page_builder) { Object.new } # add mock later
|
189
189
|
let(:task) do
|
190
190
|
{
|
191
|
-
|
192
|
-
|
191
|
+
jql: jql,
|
192
|
+
attributes: {"project.key" => "string"}
|
193
193
|
}
|
194
194
|
end
|
195
195
|
|
@@ -243,8 +243,8 @@ describe Embulk::Input::Jira do
|
|
243
243
|
let(:plugin) { described_class.new(task, nil, nil, page_builder) }
|
244
244
|
let(:task) do
|
245
245
|
{
|
246
|
-
|
247
|
-
|
246
|
+
jql: jql,
|
247
|
+
attributes: {"project.key" => "string"}
|
248
248
|
}
|
249
249
|
end
|
250
250
|
let(:page_builder) { double("page_builder") }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-input-jira
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- uu59
|
@@ -25,6 +25,20 @@ dependencies:
|
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: 0.5.0
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.6.0
|
34
|
+
name: parallel
|
35
|
+
prerelease: false
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 1.6.0
|
28
42
|
- !ruby/object:Gem::Dependency
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|