embulk-output-zendesk_users 0.0.4 → 0.0.5
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 +5 -5
- data/.ruby-version +1 -1
- data/CHANGELOG.md +3 -0
- data/README.md +42 -2
- data/embulk-output-zendesk_users.gemspec +1 -1
- data/lib/embulk/output/zendesk_users.rb +59 -19
- metadata +11 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ddb25855cc9023d896bd2b08d884c58eb1de28f55cf9c9deb9bbf4b04eb1c6ac
|
4
|
+
data.tar.gz: de73d44634aa174733b1f9b042938c0ec336d7df08458d1bb75b7337d8e1e2ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32c1447aeddf68642eed0da165451fddd061cab05ff1d5462801a4b8cbcbc93c47665bd344e1fff32d06c36ac35a7951e55c12e06f343e85c23d1cd48c472632
|
7
|
+
data.tar.gz: 6ea42ef98d5bbc219436f58e531d9d02ade48e2cb8f4bb1f7cc4973c9d1f2c9a5f777384479ab748d4353c4b2b7de2219c4ccd2d4eb8ded1387acf706d103532
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.7.1
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -18,10 +18,18 @@ This plugin's feature is limited, which allows you to update Zendesk User's tags
|
|
18
18
|
- **username**: Zendesk Username (string, required)
|
19
19
|
- **token**: Zendesk API Token (string, required if auth_method is token)
|
20
20
|
- **method**: control whether to update the existing user or create new user(not supported) (string, default: `update`)
|
21
|
-
- **id_column**: column name for user's
|
21
|
+
- **id_column**: column name for user's id (long, default: `id`)
|
22
22
|
- **tags_column**: column name for tags. Each tag is separated by comma (`string`, optional, default: `null`, overwrote)
|
23
23
|
- **user_fields_column**: column name for Values of custom fields in the user's profile. (json, optional, default: `null`)
|
24
24
|
|
25
|
+
The following fields are supported at only `upsert` method
|
26
|
+
|
27
|
+
- **name_column**: column name for user's name (`string`, default: `""`)
|
28
|
+
- **phone_column**: column name for user's phone number (string, default: `null`)
|
29
|
+
- **email_column**: column name for user's email (`string`, default: `null`)
|
30
|
+
- **external_id_column**: column name for external_id (`long`, default: `null`)
|
31
|
+
- **role_column**: column name for user's role (`long`, default: `null`)
|
32
|
+
|
25
33
|
## Example
|
26
34
|
|
27
35
|
### Config
|
@@ -40,7 +48,7 @@ out:
|
|
40
48
|
type: zendesk_users
|
41
49
|
login_url: https://obscura.zendesk.com
|
42
50
|
auth_method: token
|
43
|
-
username: test@
|
51
|
+
username: test@example.com
|
44
52
|
token: xxxxxxxxxx
|
45
53
|
method: update
|
46
54
|
id_column: id
|
@@ -48,6 +56,38 @@ out:
|
|
48
56
|
user_fields_column: user_fields
|
49
57
|
```
|
50
58
|
|
59
|
+
``` yaml
|
60
|
+
in:
|
61
|
+
type: config
|
62
|
+
columns:
|
63
|
+
- {name: id, type: long}
|
64
|
+
- {name: tags, type: json}
|
65
|
+
- {name: user_fields, type: json}
|
66
|
+
- {name: name, type: string}
|
67
|
+
- {name: phone, type: string}
|
68
|
+
- {name: email, type: string }
|
69
|
+
- {name: external_id, type: long}
|
70
|
+
- {name: role, type: long}
|
71
|
+
values:
|
72
|
+
- - [ 9811482788, ["tag1", "tag2"], { "xxxx": "Support description", "date": "2013-02-27T20:35:55Z" }, 'name testing', '000-000-000', 'toru+3@xxxxx-data.com', 111, 2859697]
|
73
|
+
- [ 0001010, ["tag3"], { "xxxx": "Support description" }, 'name testing2', '000-0000001', 'toru+4@xxxxx-data.com', 113, 2859707]
|
74
|
+
out:
|
75
|
+
type: zendesk_users
|
76
|
+
login_url: https://xxxx.zendesk.com
|
77
|
+
auth_method: token
|
78
|
+
username: xxxx
|
79
|
+
token: xxxxx
|
80
|
+
method: upsert
|
81
|
+
id_column: id
|
82
|
+
tags_column: tags
|
83
|
+
user_fields_column: user_fields
|
84
|
+
name_column: name
|
85
|
+
phone_column: phone
|
86
|
+
email_column: email
|
87
|
+
external_id_column: external_id
|
88
|
+
role_column: role
|
89
|
+
```
|
90
|
+
|
51
91
|
### Data
|
52
92
|
|
53
93
|
- tags_column requires string data containing terms which separated by comma; Ex. `attention,attack,test`
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
Gem::Specification.new do |spec|
|
3
3
|
spec.name = "embulk-output-zendesk_users"
|
4
|
-
spec.version = "0.0.
|
4
|
+
spec.version = "0.0.5"
|
5
5
|
spec.authors = ["Toru Takahashi"]
|
6
6
|
spec.summary = "Zendesk Users output plugin for Embulk"
|
7
7
|
spec.description = "Update Zendesk User's segments"
|
@@ -17,6 +17,11 @@ module Embulk
|
|
17
17
|
"id_column" => config.param("id_column", :string, default: "id"),
|
18
18
|
"tags_column" => config.param("tags_column", :string, default: nil),
|
19
19
|
"user_fields_column" => config.param("user_fields_column", :string, default: nil),
|
20
|
+
"name_column" => config.param("name_column", :string, default: ""),
|
21
|
+
"phone_column" => config.param("phone_column", :string, default: nil),
|
22
|
+
"email_column" => config.param("email_column", :string, default: nil),
|
23
|
+
"external_id_column" => config.param("external_id_column", :string, default: nil),
|
24
|
+
"role_column" => config.param("role_column", :string, default: nil),
|
20
25
|
"timeout" => config.param("timeout", :integer, default: 5),
|
21
26
|
"open_timeout" => config.param("open_timeout", :integer, default: 2)
|
22
27
|
}
|
@@ -56,12 +61,17 @@ module Embulk
|
|
56
61
|
raise "'token' is required"
|
57
62
|
end
|
58
63
|
@method = task["method"]
|
59
|
-
unless
|
60
|
-
raise "
|
64
|
+
unless ["update", "upsert"].include?(@method)
|
65
|
+
raise "Supports 'update' and 'upert' methods."
|
61
66
|
end
|
62
67
|
@id_column = task["id_column"]
|
63
68
|
@tags_column = task["tags_column"]
|
64
69
|
@user_fields_column = task["user_fields_column"]
|
70
|
+
@name_column = task["name_column"]
|
71
|
+
@phone_column = task["phone_column"]
|
72
|
+
@email_column = task["email_column"]
|
73
|
+
@external_id_column = task["external_id_column"]
|
74
|
+
@role_column = task["role_column"]
|
65
75
|
@timeout = task["timeout"]
|
66
76
|
@open_timeout = task["open_timeout"]
|
67
77
|
|
@@ -90,30 +100,24 @@ module Embulk
|
|
90
100
|
Embulk.logger.info { "Uploading #{records.size} records" }
|
91
101
|
update_users(records)
|
92
102
|
end
|
103
|
+
elsif @method == "upsert" then
|
104
|
+
# Batch Update updates up to 100 users.
|
105
|
+
page.each_slice(100).with_index do |records, index|
|
106
|
+
Embulk.logger.info { "Uploading #{records.size} records" }
|
107
|
+
upsert_users(records)
|
108
|
+
end
|
93
109
|
end
|
94
110
|
end
|
95
111
|
|
96
|
-
def
|
97
|
-
requests = Array.new
|
98
|
-
records.each do |record|
|
99
|
-
data = Hash[schema.names.zip(record)]
|
100
|
-
# Choose only target columns
|
101
|
-
temp = {}
|
102
|
-
temp.store("id", data["#{@id_column}"])
|
103
|
-
temp.store("tags", data["#{@tags_column}"]) if @tags_column
|
104
|
-
temp.store("user_fields", data["#{@user_fields_column}"]) if @user_fields_column
|
105
|
-
Embulk.logger.debug {"Uploading data: #{temp}"}
|
106
|
-
requests << temp
|
107
|
-
end
|
108
|
-
|
112
|
+
def call_many_api(&block)
|
109
113
|
begin
|
110
|
-
job_status =
|
114
|
+
job_status = block.call
|
111
115
|
rescue ZendeskAPI::Error::NetworkError => e
|
112
116
|
Embulk.logger.warn {"#{e}"}
|
113
117
|
Embulk.logger.warn {"Retrying..."}
|
114
|
-
retry
|
118
|
+
retry
|
115
119
|
end
|
116
|
-
|
120
|
+
|
117
121
|
# https://github.com/zendesk/zendesk_api_client_rb#apps-api
|
118
122
|
# Note: job statuses are currently not supported, so you must manually poll the job status API for app creation.
|
119
123
|
body = {}
|
@@ -123,7 +127,7 @@ module Embulk
|
|
123
127
|
rescue ZendeskAPI::Error::NetworkError => e
|
124
128
|
Embulk.logger.warn {"#{e}"}
|
125
129
|
Embulk.logger.warn {"Retrying..."}
|
126
|
-
retry
|
130
|
+
retry
|
127
131
|
end
|
128
132
|
job_status = response.body['job_status']
|
129
133
|
sleep(1)
|
@@ -134,6 +138,42 @@ module Embulk
|
|
134
138
|
end
|
135
139
|
end
|
136
140
|
|
141
|
+
def update_users(records)
|
142
|
+
requests = Array.new
|
143
|
+
records.each do |record|
|
144
|
+
data = Hash[schema.names.zip(record)]
|
145
|
+
# Choose only target columns
|
146
|
+
temp = {}
|
147
|
+
temp.store("id", data["#{@id_column}"])
|
148
|
+
temp.store("tags", data["#{@tags_column}"]) if @tags_column
|
149
|
+
temp.store("user_fields", data["#{@user_fields_column}"]) if @user_fields_column
|
150
|
+
Embulk.logger.debug {"Uploading data: #{temp}"}
|
151
|
+
requests << temp
|
152
|
+
end
|
153
|
+
|
154
|
+
call_many_api { @client.users.update_many!(requests) }
|
155
|
+
end
|
156
|
+
|
157
|
+
def upsert_users(records)
|
158
|
+
requests = Array.new
|
159
|
+
records.each do |record|
|
160
|
+
data = Hash[schema.names.zip(record)]
|
161
|
+
# Choose only target columns
|
162
|
+
temp = {}
|
163
|
+
temp.store("name", data["#{@name_column}"])
|
164
|
+
temp.store("phone", data["#{@phone_column}"]) if @phone_column
|
165
|
+
temp.store("tags", data["#{@tags_column}"]) if @tags_column
|
166
|
+
temp.store("user_fields", data["#{@user_fields_column}"]) if @user_fields_column
|
167
|
+
temp.store("email", data["#{@email_column}"]) if @email_column
|
168
|
+
temp.store("external_id", data["#{@external_id_column}"]) if @external_id_column
|
169
|
+
temp.store("role", data["#{@role_column}"]) if @role_column
|
170
|
+
Embulk.logger.debug {"Uploading data: #{temp}"}
|
171
|
+
requests << temp
|
172
|
+
end
|
173
|
+
|
174
|
+
call_many_api { ZendeskAPI::User.create_or_update_many!(@client, requests) }
|
175
|
+
end
|
176
|
+
|
137
177
|
def finish
|
138
178
|
end
|
139
179
|
|
metadata
CHANGED
@@ -1,66 +1,66 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-output-zendesk_users
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Toru Takahashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
name: embulk
|
14
15
|
requirement: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
17
|
- - ">="
|
17
18
|
- !ruby/object:Gem::Version
|
18
19
|
version: 0.8.30
|
19
|
-
name: embulk
|
20
|
-
prerelease: false
|
21
20
|
type: :development
|
21
|
+
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.8.30
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
28
29
|
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - ">="
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: 1.10.6
|
33
|
-
name: bundler
|
34
|
-
prerelease: false
|
35
34
|
type: :development
|
35
|
+
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.10.6
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
42
43
|
requirement: !ruby/object:Gem::Requirement
|
43
44
|
requirements:
|
44
45
|
- - ">="
|
45
46
|
- !ruby/object:Gem::Version
|
46
47
|
version: '10.0'
|
47
|
-
name: rake
|
48
|
-
prerelease: false
|
49
48
|
type: :development
|
49
|
+
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '10.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
+
name: zendesk_api
|
56
57
|
requirement: !ruby/object:Gem::Requirement
|
57
58
|
requirements:
|
58
59
|
- - ">="
|
59
60
|
- !ruby/object:Gem::Version
|
60
61
|
version: 1.16.0
|
61
|
-
name: zendesk_api
|
62
|
-
prerelease: false
|
63
62
|
type: :runtime
|
63
|
+
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
@@ -101,8 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
103
|
requirements: []
|
104
|
-
|
105
|
-
rubygems_version: 2.6.6
|
104
|
+
rubygems_version: 3.1.2
|
106
105
|
signing_key:
|
107
106
|
specification_version: 4
|
108
107
|
summary: Zendesk Users output plugin for Embulk
|