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 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