embulk-input-zendesk 0.2.9 → 0.2.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 64f55acf87cf55a85fcb254b2f894dc1ff87df89
4
- data.tar.gz: 6212020f5b1b5e2b9b7bbc989eaad0cc45b275e7
3
+ metadata.gz: a0187b06702508e3aa734155601f2ac61bfa9456
4
+ data.tar.gz: 0978a2745e336986fc17c57796a77f271439ba4a
5
5
  SHA512:
6
- metadata.gz: c340a0cbda23f8ffdd7b2ea8c68cdc5c1db63d9b045b5b4fe034830e5fd2b020791075cea69f526b6c425ce73e338d4ad7267c1beeb30dbfb326ce3e36d09e9d
7
- data.tar.gz: 44fb974d6c961580ee72cba9baa3792a780719696ab72cf2980235944ba807f1ac16bd03e7a1b86d86ae9f3ec37fe1ec0f1996cb7f275fa7be54255866fd3697
6
+ metadata.gz: 5b19b4372816708a26d2110a823a3fba165fd066ab650f85002d3751ae9efb3f3b3e6eb9163f2a1eca976f9c31ccae00edf760da7216a6c017d8f78a775abb79
7
+ data.tar.gz: 374a88e38e1ab5469f66500aab6fd2be1f9fead2ea21358698ad8458d5ea26df88eea4ae4f7fdfffe9cedb4b7e8f0b7cedc91bbe930691ebc666414c559c902e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.2.10 - 2018-03-26
2
+ * [enhancement] Add Zendesk market place header
3
+
1
4
  ## 0.2.9 - 2017-08-03
2
5
  * [fixed] `start_time` is not merged to `query`, causing infinite loop [#42](https://github.com/treasure-data/embulk-input-zendesk/pull/42)
3
6
 
data/README.md CHANGED
@@ -32,7 +32,10 @@ Required Embulk version >= 0.8.1.
32
32
  - **retry_limit**: Try to retry this times (integer, default: 5)
33
33
  - **retry_initial_wait_sec**: Wait seconds for exponential backoff initial value (integer, default: 4)
34
34
  - **incremental**: If false, `start_time` in next.yml would not be updated that means you always fetch all of data from Zendesk with statically conditions. If true, `start_time` would be updated in next.yml. (bool, default: true)
35
-
35
+ - **app_marketplace_integration_name**: Invisible to user, only requires to be a part of the Zendesk Apps Marketplace. This should be used to name of the integration.
36
+ - **app_marketplace_org_id**: Invisible to user, only requires to be a part of the Zendesk Apps Marketplace. This should be the Organization ID for your organization from the new developer portal.
37
+ - **app_marketplace_app_id**: Invisible to user, only requires to be a part of the Zendesk Apps Marketplace. This is the “App ID” that will be assigned to you when you submit your app.
38
+
36
39
  ## Example
37
40
 
38
41
  ```yaml
@@ -1,7 +1,7 @@
1
1
 
2
2
  Gem::Specification.new do |spec|
3
3
  spec.name = "embulk-input-zendesk"
4
- spec.version = "0.2.9"
4
+ spec.version = "0.2.10"
5
5
  spec.authors = ["uu59", "muga", "sakama"]
6
6
  spec.summary = "Zendesk input plugin for Embulk"
7
7
  spec.description = "Loads records from Zendesk."
@@ -43,6 +43,7 @@ module Embulk
43
43
  def validate_config
44
44
  validate_credentials
45
45
  validate_target
46
+ validate_app_marketplace
46
47
  end
47
48
 
48
49
  def validate_credentials
@@ -68,6 +69,15 @@ module Embulk
68
69
  end
69
70
  end
70
71
 
72
+ def validate_app_marketplace
73
+ valid = config[:app_marketplace_integration_name] && config[:app_marketplace_org_id] && config[:app_marketplace_app_id]
74
+ valid = valid || (!config[:app_marketplace_integration_name] && !config[:app_marketplace_org_id] && !config[:app_marketplace_app_id])
75
+
76
+ unless valid
77
+ raise Embulk::ConfigError.new("All of app_marketplace_integration_name, app_marketplace_org_id, app_marketplace_app_id are required to fill out for Apps Marketplace API header")
78
+ end
79
+ end
80
+
71
81
  # they have both Incremental API and non-incremental API
72
82
  # 170717: `ticket_events` can use standard endpoint format now, ie. `<target>.json`
73
83
  %w(tickets ticket_events users organizations).each do |target|
@@ -255,9 +265,18 @@ module Embulk
255
265
  u = URI.parse(config[:login_url])
256
266
  u.path = path
257
267
 
268
+ # https://help.zendesk.com/hc/en-us/articles/115010249348-Announcing-Updated-Apps-Marketplace-API-Header-Requirementsmerg
269
+ extheader = {}
270
+
271
+ if config[:app_marketplace_integration_name] && config[:app_marketplace_org_id] && config[:app_marketplace_app_id]
272
+ extheader = {"X-Zendesk-Marketplace-Name" => config[:app_marketplace_integration_name],
273
+ "X-Zendesk-Marketplace-Organization-Id" => config[:app_marketplace_org_id],
274
+ "X-Zendesk-Marketplace-App-Id" => config[:app_marketplace_app_id]}
275
+ end
276
+
258
277
  retryer.with_retry do
259
278
  Embulk.logger.debug "Fetching #{u.to_s}"
260
- response = httpclient.get(u.to_s, query, follow_redirect: true)
279
+ response = httpclient.get(u.to_s, query, extheader)
261
280
 
262
281
  handle_response(response.status, response.headers, response.body)
263
282
  response
@@ -271,11 +290,20 @@ module Embulk
271
290
  u = URI.parse(config[:login_url])
272
291
  u.path = path
273
292
 
293
+ # https://help.zendesk.com/hc/en-us/articles/115010249348-Announcing-Updated-Apps-Marketplace-API-Header-Requirementsmerg
294
+ extheader = {}
295
+
296
+ if config[:app_marketplace_integration_name] && config[:app_marketplace_org_id] && config[:app_marketplace_app_id]
297
+ extheader = {"X-Zendesk-Marketplace-Name" => config[:app_marketplace_integration_name],
298
+ "X-Zendesk-Marketplace-Organization-Id" => config[:app_marketplace_org_id],
299
+ "X-Zendesk-Marketplace-App-Id" => config[:app_marketplace_app_id]}
300
+ end
301
+
274
302
  retryer.with_retry do
275
303
  Embulk.logger.debug "Fetching #{u.to_s}"
276
304
  buf = ""
277
305
  auth_retry = 0
278
- httpclient.get(u.to_s, query, follow_redirect: true) do |message, chunk|
306
+ httpclient.get(u.to_s, query, extheader) do |message, chunk|
279
307
  if message.status == 401
280
308
  # First request will fail by 401 because not included credentials.
281
309
  # HTTPClient will retry request with credentials.
@@ -96,6 +96,9 @@ module Embulk
96
96
  incremental: config.param("incremental", :bool, default: true),
97
97
  schema: config.param(:columns, :array, default: []),
98
98
  includes: config.param(:includes, :array, default: []),
99
+ app_marketplace_integration_name: config.param("app_marketplace_integration_name", :string, default: nil),
100
+ app_marketplace_org_id: config.param("app_marketplace_org_id", :string, default: nil),
101
+ app_marketplace_app_id: config.param("app_marketplace_app_id", :string, default: nil)
99
102
  }
100
103
  end
101
104
 
@@ -50,6 +50,26 @@ module Embulk
50
50
  run_with("invalid_lack_username.yml")
51
51
  end
52
52
  end
53
+
54
+ test "run with valid.yml (app_marketplace) contains three properties" do
55
+ assert_nothing_raised do
56
+ run_with("valid_app_marketplace.yml")
57
+ end
58
+ end
59
+
60
+ test "run with invalid lack one of app marketplace properties" do
61
+ # NOTE: will be raised Java::OrgEmbulkExec::PartialExecutionException, not ConfigError. It is Embulk internally exception handling matter.
62
+ assert_raise do
63
+ run_with("invalid_app_marketplace_lack_one_property.yml")
64
+ end
65
+ end
66
+
67
+ test "run with invalid lack two of app marketplace properties" do
68
+ # NOTE: will be raised Java::OrgEmbulkExec::PartialExecutionException, not ConfigError. It is Embulk internally exception handling matter.
69
+ assert_raise do
70
+ run_with("invalid_app_marketplace_lack_two_property.yml")
71
+ end
72
+ end
53
73
  end
54
74
 
55
75
  sub_test_case ".transaction" do
@@ -0,0 +1,13 @@
1
+ in:
2
+ type: zendesk
3
+ login_url: "https://example.zendesk.com/"
4
+ auth_method: basic
5
+ target: tickets
6
+ username: foo@example.com
7
+ password: password
8
+ app_marketplace_integration_name: App Name for Zendesk
9
+ app_marketplace_org_id: 12345
10
+ columns:
11
+ - {name: id, type: string}
12
+ out:
13
+ type: "null"
@@ -0,0 +1,12 @@
1
+ in:
2
+ type: zendesk
3
+ login_url: "https://example.zendesk.com/"
4
+ auth_method: basic
5
+ target: tickets
6
+ username: foo@example.com
7
+ password: password
8
+ app_marketplace_integration_name: App Name for Zendesk
9
+ columns:
10
+ - {name: id, type: string}
11
+ out:
12
+ type: "null"
@@ -0,0 +1,14 @@
1
+ in:
2
+ type: zendesk
3
+ login_url: "https://example.zendesk.com/"
4
+ auth_method: basic
5
+ target: tickets
6
+ username: foo@example.com
7
+ password: password
8
+ app_marketplace_integration_name: App Name for Zendesk
9
+ app_marketplace_org_id: 12345
10
+ app_marketplace_app_id: 99999
11
+ columns:
12
+ - {name: id, type: string}
13
+ out:
14
+ type: "null"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-input-zendesk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - uu59
@@ -224,9 +224,12 @@ files:
224
224
  - test/embulk/input/zendesk/test_client.rb
225
225
  - test/embulk/input/zendesk/test_plugin.rb
226
226
  - test/fixture_helper.rb
227
+ - test/fixtures/invalid_app_marketplace_lack_one_property.yml
228
+ - test/fixtures/invalid_app_marketplace_lack_two_property.yml
227
229
  - test/fixtures/invalid_lack_username.yml
228
230
  - test/fixtures/invalid_unknown_auth.yml
229
231
  - test/fixtures/tickets.json
232
+ - test/fixtures/valid_app_marketplace.yml
230
233
  - test/fixtures/valid_auth_basic.yml
231
234
  - test/fixtures/valid_auth_oauth.yml
232
235
  - test/fixtures/valid_auth_token.yml
@@ -261,9 +264,12 @@ test_files:
261
264
  - test/embulk/input/zendesk/test_client.rb
262
265
  - test/embulk/input/zendesk/test_plugin.rb
263
266
  - test/fixture_helper.rb
267
+ - test/fixtures/invalid_app_marketplace_lack_one_property.yml
268
+ - test/fixtures/invalid_app_marketplace_lack_two_property.yml
264
269
  - test/fixtures/invalid_lack_username.yml
265
270
  - test/fixtures/invalid_unknown_auth.yml
266
271
  - test/fixtures/tickets.json
272
+ - test/fixtures/valid_app_marketplace.yml
267
273
  - test/fixtures/valid_auth_basic.yml
268
274
  - test/fixtures/valid_auth_oauth.yml
269
275
  - test/fixtures/valid_auth_token.yml