embulk-output-zendesk_users 0.0.4 → 0.0.5

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
- SHA1:
3
- metadata.gz: 0873d6bf232b9dfa45747aed32d75f83e7cd20b3
4
- data.tar.gz: 68564239188fcf5396db3a8020fd5da3f3cea84c
2
+ SHA256:
3
+ metadata.gz: ddb25855cc9023d896bd2b08d884c58eb1de28f55cf9c9deb9bbf4b04eb1c6ac
4
+ data.tar.gz: de73d44634aa174733b1f9b042938c0ec336d7df08458d1bb75b7337d8e1e2ae
5
5
  SHA512:
6
- metadata.gz: 7f420cdc0c576b4470242e503715cbef48df33372eb83bf907e159e910ed21a874532d1a344e25e1bdb4061e2cc3e4e68acc958a9454059ea48b5379f527afc4
7
- data.tar.gz: 9b0fbd4a4260987b3f7a557be0d69fac2e126d53c0fd55e4833ee04e2572d39aaac9279224e48f71a6ffe1b3808a95b91f8e0b0d9b3b318c94854e37335c77f2
6
+ metadata.gz: 32c1447aeddf68642eed0da165451fddd061cab05ff1d5462801a4b8cbcbc93c47665bd344e1fff32d06c36ac35a7951e55c12e06f343e85c23d1cd48c472632
7
+ data.tar.gz: 6ea42ef98d5bbc219436f58e531d9d02ade48e2cb8f4bb1f7cc4973c9d1f2c9a5f777384479ab748d4353c4b2b7de2219c4ccd2d4eb8ded1387acf706d103532
@@ -1 +1 @@
1
- jruby-9.1.5.0
1
+ 2.7.1
@@ -1,4 +1,7 @@
1
1
  # Change Log
2
+ ## 0.0.5 - 2020-10-07
3
+ - [New Feature] Support UPSERT method (#6)
4
+
2
5
  ## 0.0.2 - 2017-12-19
3
6
  - [Bugfix] Remove a broken log line
4
7
 
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 email (long, default: `id`)
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@test.com
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"
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 @method == "update"
60
- raise "Only 'update' is supporeted in method"
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 update_users(records)
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 = @client.users.update_many!(requests)
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
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: 2017-12-19 00:00:00.000000000 Z
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
- rubyforge_project:
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