keboola-gooddata-writer 2.0.0.pre1 → 2.0.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -5
- data/keboola-gooddata-writer.gemspec +2 -1
- data/lib/keboola/gooddata_writer/api.rb +76 -122
- data/lib/keboola/gooddata_writer/client.rb +5 -1
- data/lib/keboola/gooddata_writer/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02ad328c3cd45c30b12d4c72f99cd41b1c1c4a3c
|
4
|
+
data.tar.gz: 2d169017e12b85b1bc938b4d0754cc7ac0bbd012
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87d630793b782adbab07fae2d77810849eef82ce72bd1dc2509831b720b1e213c8e10860477ad545ffbefc5175c150d4c42c3e16a348ecf3175699d064cf13ca
|
7
|
+
data.tar.gz: a3741e0fc43ca669d5786fae1444d9eb7277054b67492d6a9979fe1814cc59ab82e90e754ecebfe24ce00397085a2507b7070ca5364e449b6bc3553ccfed71c2
|
data/README.md
CHANGED
@@ -4,12 +4,12 @@
|
|
4
4
|
[![Coverage](http://img.shields.io/codeclimate/coverage/github/romansklenar/gooddata-writer-ruby-client.svg?style=flat-square)](https://codeclimate.com/github/romansklenar/gooddata-writer-ruby-client)
|
5
5
|
[![Build](http://img.shields.io/travis-ci/romansklenar/gooddata-writer-ruby-client.svg?style=flat-square)](https://travis-ci.org/romansklenar/gooddata-writer-ruby-client)
|
6
6
|
[![Dependencies](http://img.shields.io/gemnasium/romansklenar/gooddata-writer-ruby-client.svg?style=flat-square)](https://gemnasium.com/romansklenar/gooddata-writer-ruby-client)
|
7
|
-
[![Downloads](http://img.shields.io/gem/dtv/gooddata-writer-ruby-client.svg?style=flat-square)](https://rubygems.org/gems/gooddata-writer-ruby-client)
|
8
7
|
[![Tags](http://img.shields.io/github/tag/romansklenar/gooddata-writer-ruby-client.svg?style=flat-square)](http://github.com/romansklenar/gooddata-writer-ruby-client/tags)
|
9
8
|
[![Releases](http://img.shields.io/github/release/romansklenar/gooddata-writer-ruby-client.svg?style=flat-square)](http://github.com/romansklenar/gooddata-writer-ruby-client/releases)
|
10
9
|
[![Issues](http://img.shields.io/github/issues/romansklenar/gooddata-writer-ruby-client.svg?style=flat-square)](http://github.com/romansklenar/gooddata-writer-ruby-client/issues)
|
11
10
|
[![License](http://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](http://opensource.org/licenses/MIT)
|
12
|
-
[![
|
11
|
+
[![Downloads](http://img.shields.io/gem/dtv/gooddata-writer-ruby-client.svg?style=flat-square)](https://rubygems.org/gems/keboola-gooddata-writer)
|
12
|
+
[![Version](http://img.shields.io/gem/v/gooddata-writer-ruby-client.svg?style=flat-square)](https://rubygems.org/gems/keboola-gooddata-writer)
|
13
13
|
|
14
14
|
|
15
15
|
Simple Ruby wrapper library for [Keboola GoodData Writer REST API](http://docs.keboolagooddatawriter.apiary.io/).
|
@@ -45,13 +45,13 @@ api.writer('MyWriter') # {"bucket"=>"sys.c-wr-gooddata-writer1", "writer"=>"good
|
|
45
45
|
api.create_project('MyWriter', optionals: { name: 'KBC - MyProject - MyWriter' }) # <Keboola::GoodDataWriter::Job url="https://syrup.keboola.com/queue/jobs/123456", id="123456">
|
46
46
|
|
47
47
|
# create user
|
48
|
-
api.create_user('MyWriter', '
|
48
|
+
api.create_user('MyWriter', 'jon.snow@test.keboola.com', 't0pS3cr3t', 'Jon', 'Snow') # <Keboola::GoodDataWriter::Job url="https://syrup.keboola.com/queue/jobs/123456", id="123456">
|
49
49
|
|
50
50
|
# assign user to existing GoodData project
|
51
|
-
api.add_project_users('MyWriter', 'xjywplmhejceb6j3ezzlxiganmjavqio', '
|
51
|
+
api.add_project_users('MyWriter', 'xjywplmhejceb6j3ezzlxiganmjavqio', 'jon.snow@test.keboola.com', 'editor') #<Keboola::GoodDataWriter::Job url="https://syrup.keboola.com/queue/jobs/123456", id="123456">
|
52
52
|
|
53
53
|
# getretreive GoodData SSO link
|
54
|
-
api.sso('MyWriter', 'xjywplmhejceb6j3ezzlxiganmjavqio', '
|
54
|
+
api.sso('MyWriter', 'xjywplmhejceb6j3ezzlxiganmjavqio', 'jon.snow@test.keboola.com') # "https://secure.gooddata.com/gdc/account/customerlogin?sessionId=-----BEGIN+PGP+MESSAGE-----s0m3_l0000n6_h4sh"
|
55
55
|
```
|
56
56
|
|
57
57
|
## Development
|
@@ -17,8 +17,9 @@ Gem::Specification.new do |spec|
|
|
17
17
|
|
18
18
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
|
+
spec.required_ruby_version = '>= 2.0.0'
|
20
21
|
|
21
|
-
spec.add_development_dependency "bundler", "
|
22
|
+
spec.add_development_dependency "bundler", ">= 1.7.0"
|
22
23
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
24
|
spec.add_development_dependency "minitest", "~> 5.7"
|
24
25
|
spec.add_development_dependency "webmock"
|
@@ -10,14 +10,14 @@ module Keboola
|
|
10
10
|
attr_accessor :token, :client, :queue, :parser
|
11
11
|
|
12
12
|
|
13
|
-
def initialize(token
|
14
|
-
@token = token
|
13
|
+
def initialize(token: nil, endpoint: nil, client: nil, queue: nil, parser: nil)
|
14
|
+
@token = token || raise(ArgumentError, "token is required")
|
15
15
|
@client = client || self.class.build_client(endpoint: endpoint || WRITER_ENDPOINT_URL, token: token)
|
16
16
|
@queue = queue || self.class.build_client(endpoint: QUEUE_ENDPOINT_URL, token: token)
|
17
17
|
@parser = parser || self.class.build_parser
|
18
18
|
end
|
19
19
|
|
20
|
-
def self.build_client(token
|
20
|
+
def self.build_client(token: nil, endpoint: nil)
|
21
21
|
Client.factory(token: token, endpoint: endpoint)
|
22
22
|
end
|
23
23
|
|
@@ -30,38 +30,29 @@ module Keboola
|
|
30
30
|
|
31
31
|
# Returns list of available writers and their buckets
|
32
32
|
def writers
|
33
|
-
handle
|
34
|
-
result["writers"]
|
35
|
-
end
|
33
|
+
handle(@client.get("writers")) { |result| result["writers"] }
|
36
34
|
end
|
37
35
|
|
38
36
|
# Returns attributes of the writer
|
39
37
|
def writer(writer_id)
|
40
|
-
handle
|
41
|
-
result["writers"].first rescue result["writer"]
|
42
|
-
end
|
38
|
+
handle(@client.get("writers", { writerId: writer_id })) { |result| result["writers"].first rescue result["writer"] }
|
43
39
|
end
|
44
40
|
|
45
41
|
# Creates new configuration bucket and either uses existing GoodData
|
46
42
|
# project or creates new one along with dedicated GoodData user.
|
47
43
|
def create_writer(writer_id, optionals: {}, async: true)
|
48
|
-
|
49
|
-
|
50
|
-
end
|
44
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
45
|
+
handle(@client.post("writers", params.to_json)) { |result| job_handler(result, async) }
|
51
46
|
end
|
52
47
|
|
53
48
|
# Sets attributes to writer's configuration
|
54
49
|
def update_writer(writer_id, attributes: {})
|
55
|
-
handle
|
56
|
-
Job.new(result).ok?
|
57
|
-
end
|
50
|
+
handle(@client.post("writers/#{writer_id}", attributes.to_json)) { |result| job_handler(result).ok? }
|
58
51
|
end
|
59
52
|
|
60
53
|
# Deletes configuration bucket and enqueues GoodData project and dedicated GoodData user for removal
|
61
54
|
def delete_writer(writer_id, async: true)
|
62
|
-
handle
|
63
|
-
async ? Job.new(result) : wait_for_job(result["id"])
|
64
|
-
end
|
55
|
+
handle(@client.delete("writers", { writerId: writer_id })) { |result| job_handler(result, async) }
|
65
56
|
end
|
66
57
|
|
67
58
|
|
@@ -69,31 +60,26 @@ module Keboola
|
|
69
60
|
|
70
61
|
# Returns list of project clones including main project marked with main: 1 field
|
71
62
|
def projects(writer_id)
|
72
|
-
handle
|
73
|
-
result["projects"]
|
74
|
-
end
|
63
|
+
handle(@client.get("projects", { writerId: writer_id })) { |result| result["projects"] }
|
75
64
|
end
|
76
65
|
|
77
66
|
# Creates new configuration bucket and either uses existing GoodData
|
78
67
|
# project or creates new one along with dedicated GoodData user.
|
79
68
|
def create_project(writer_id, optionals: {}, async: true)
|
80
|
-
|
81
|
-
|
82
|
-
end
|
69
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
70
|
+
handle(@client.post("projects", params.to_json)) { |result| job_handler(result, async) }
|
83
71
|
end
|
84
72
|
|
85
73
|
# Creates new GoodData project for the writer and enqueues the old for deletion
|
86
74
|
def reset_project(writer_id, optionals: {}, async: true)
|
87
|
-
|
88
|
-
|
89
|
-
end
|
75
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
76
|
+
handle(@client.post("reset-project", params.to_json)) { |result| job_handler(result, async) }
|
90
77
|
end
|
91
78
|
|
92
79
|
# Upload project to GoodData
|
93
80
|
def upload_project(writer_id, optionals: {}, async: true)
|
94
|
-
|
95
|
-
|
96
|
-
end
|
81
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
82
|
+
handle(@client.post("upload-project", params.to_json)) { |result| job_handler(result, async) }
|
97
83
|
end
|
98
84
|
|
99
85
|
|
@@ -101,17 +87,13 @@ module Keboola
|
|
101
87
|
|
102
88
|
# Get users list
|
103
89
|
def users(writer_id)
|
104
|
-
handle
|
105
|
-
result["users"]
|
106
|
-
end
|
90
|
+
handle(@client.get("users", { writerId: writer_id })) { |result| result["users"] }
|
107
91
|
end
|
108
92
|
|
109
93
|
# Creates new GoodData user in Keboola domain.
|
110
94
|
def create_user(writer_id, email, password, first_name, last_name, optionals: {}, async: true)
|
111
|
-
|
112
|
-
handle
|
113
|
-
async ? Job.new(result) : wait_for_job(result["id"])
|
114
|
-
end
|
95
|
+
params = { writerId: writer_id, email: email, password: password, firstName: first_name, lastName: last_name }.reverse_merge(optionals)
|
96
|
+
handle(@client.post("users", params.to_json)) { |result| job_handler(result, async) }
|
115
97
|
end
|
116
98
|
|
117
99
|
|
@@ -119,24 +101,19 @@ module Keboola
|
|
119
101
|
|
120
102
|
# Get list of users in project
|
121
103
|
def project_users(writer_id, project_id)
|
122
|
-
handle
|
123
|
-
result["users"]
|
124
|
-
end
|
104
|
+
handle(@client.get("project-users", { writerId: writer_id, pid: project_id })) { |result| result["users"] }
|
125
105
|
end
|
126
106
|
|
127
107
|
# Adds GoodData user to specified project.
|
128
108
|
def add_project_users(writer_id, project_id, email, role, optionals: {}, async: true)
|
129
|
-
|
130
|
-
handle
|
131
|
-
async ? Job.new(result) : wait_for_job(result["id"])
|
132
|
-
end
|
109
|
+
params = { writerId: writer_id, pid: project_id, email: email, role: role }.reverse_merge(optionals)
|
110
|
+
handle(@client.post("project-users", params.to_json)) { |result| job_handler(result, async) }
|
133
111
|
end
|
134
112
|
|
135
113
|
# Remove user from specified project.
|
136
114
|
def remove_project_users(writer_id, project_id, email, async: true)
|
137
|
-
|
138
|
-
|
139
|
-
end
|
115
|
+
params = { writerId: writer_id, pid: project_id, email: email }
|
116
|
+
handle(@client.delete("project-users", params)) { |result| job_handler(result, async) }
|
140
117
|
end
|
141
118
|
|
142
119
|
|
@@ -144,66 +121,55 @@ module Keboola
|
|
144
121
|
|
145
122
|
# Get tables list
|
146
123
|
def tables(writer_id)
|
147
|
-
handle
|
148
|
-
result["tables"]
|
149
|
-
end
|
124
|
+
handle(@client.get("tables", { writerId: writer_id })) { |result| result["tables"] }
|
150
125
|
end
|
151
126
|
|
152
127
|
# Get table detail
|
153
128
|
def table(writer_id, table_id)
|
154
|
-
handle
|
155
|
-
result["tables"].first rescue result["table"]
|
156
|
-
end
|
129
|
+
handle(@client.get("tables", { writerId: writer_id, tableId: table_id })) { |result| result["tables"].first rescue result["table"] }
|
157
130
|
end
|
158
131
|
|
159
132
|
# Update table configuration
|
160
133
|
def update_table(writer_id, table_id, optionals: {})
|
161
|
-
|
162
|
-
|
163
|
-
end
|
134
|
+
params = { writerId: writer_id, tableId: table_id }.reverse_merge(optionals)
|
135
|
+
handle(@client.post("tables", params.to_json)) { |result| job_handler(result).ok? }
|
164
136
|
end
|
165
137
|
|
166
138
|
# Update table column configuration
|
167
139
|
def update_table_column(writer_id, table_id, column, optionals: {})
|
168
|
-
|
169
|
-
|
170
|
-
end
|
140
|
+
params = { writerId: writer_id, tableId: table_id, column: column }.reverse_merge(optionals)
|
141
|
+
handle(@client.post("tables", params.to_json)) { |result| job_handler(result).ok? }
|
171
142
|
end
|
172
143
|
|
173
144
|
# Bulk update table column configuration
|
174
145
|
def bulk_update_table_column(writer_id, table_id, columns = [])
|
175
|
-
|
176
|
-
|
177
|
-
end
|
146
|
+
params = { writerId: writer_id, tableId: table_id, columns: columns }
|
147
|
+
handle(@client.post("tables", params.to_json)) { |result| job_handler(result).ok? }
|
178
148
|
end
|
179
149
|
|
180
150
|
# Upload selected table to GoodData
|
181
151
|
def upload_table(writer_id, table_id, optionals: {}, async: true)
|
182
|
-
|
183
|
-
|
184
|
-
end
|
152
|
+
params = { writerId: writer_id, tableId: table_id }.reverse_merge(optionals)
|
153
|
+
handle(@client.post("upload-table", params.to_json)) { |result| job_handler(result, async) }
|
185
154
|
end
|
186
155
|
|
187
156
|
# Update model of selected table in GoodData
|
188
157
|
def update_table_model(writer_id, optionals: {}, async: true)
|
189
|
-
|
190
|
-
|
191
|
-
end
|
158
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
159
|
+
handle(@client.post("update-model", params.to_json)) { |result| job_handler(result, async) }
|
192
160
|
end
|
193
161
|
alias_method :update_model, :update_table_model
|
194
162
|
|
195
163
|
# Remove dataset in GoodData project belonging to the table and reset it's export status
|
196
164
|
def reset_table(writer_id, table_id, optionals: {}, async: true)
|
197
|
-
|
198
|
-
|
199
|
-
end
|
165
|
+
params = { writerId: writer_id, tableId: table_id }.reverse_merge(optionals)
|
166
|
+
handle(@client.post("reset-table", params.to_json)) { |result| job_handler(result, async) }
|
200
167
|
end
|
201
168
|
|
202
169
|
# Selectively upload date dimension (must be already configured in Writer)
|
203
170
|
def upload_date_dimension(writer_id, name, optionals: {}, async: true)
|
204
|
-
|
205
|
-
|
206
|
-
end
|
171
|
+
params = { writerId: writer_id, name: name }.reverse_merge(optionals)
|
172
|
+
handle(@client.post("reset-table", params.to_json)) { |result| job_handler(result, async) }
|
207
173
|
end
|
208
174
|
|
209
175
|
|
@@ -211,37 +177,30 @@ module Keboola
|
|
211
177
|
|
212
178
|
# Load data to selected tables in GoodData
|
213
179
|
def load_data(writer_id, optionals: {}, async: true)
|
214
|
-
|
215
|
-
|
216
|
-
end
|
180
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
181
|
+
handle(@client.post("load-data", params.to_json)) { |result| job_handler(result, async) }
|
217
182
|
end
|
218
183
|
|
219
184
|
# Load data to selected tables in GoodData concurrently
|
220
185
|
def load_data_multi(writer_id, optionals: {}, async: true)
|
221
|
-
|
222
|
-
|
223
|
-
end
|
186
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
187
|
+
handle(@client.post("load-data-multi", params.to_json)) { |result| job_handler(result, async) }
|
224
188
|
end
|
225
189
|
|
226
190
|
# === Filter resource
|
227
191
|
|
228
192
|
def filters(writer_id, optionals: {})
|
229
|
-
|
230
|
-
|
231
|
-
end
|
193
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
194
|
+
handle(@client.get("filters", params)) { |result| result["filters"] }
|
232
195
|
end
|
233
196
|
|
234
197
|
def create_filter(writer_id, project_id, name, attribute, value, operator = '=', optionals: {}, async: true)
|
235
|
-
|
236
|
-
handle
|
237
|
-
async ? Job.new(result) : wait_for_job(result["id"])
|
238
|
-
end
|
198
|
+
params = { writerId: writer_id, pid: project_id, name: name, attribute: attribute, operator: operator, value: value }.reverse_merge(optionals)
|
199
|
+
handle(@client.post("filters", params.to_json)) { |result| job_handler(result, async) }
|
239
200
|
end
|
240
201
|
|
241
202
|
def delete_filter(writer_id, name, async: true)
|
242
|
-
handle
|
243
|
-
async ? Job.new(result) : wait_for_job(result["id"])
|
244
|
-
end
|
203
|
+
handle(@client.delete("filters", { writerId: writer_id, name: name })) { |result| job_handler(result, async) }
|
245
204
|
end
|
246
205
|
|
247
206
|
|
@@ -249,31 +208,26 @@ module Keboola
|
|
249
208
|
|
250
209
|
# Get Filters for Projects
|
251
210
|
def filters_projects(writer_id, optionals: {})
|
252
|
-
|
253
|
-
|
254
|
-
end
|
211
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
212
|
+
handle(@client.get("filters-projects", params)) { |result| result["filters"] }
|
255
213
|
end
|
256
214
|
|
257
215
|
# Get Filters for Users
|
258
216
|
def filters_users(writer_id, optionals: {})
|
259
|
-
|
260
|
-
|
261
|
-
end
|
217
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
218
|
+
handle(@client.get("filters-users", params)) { |result| result["filters"] }
|
262
219
|
end
|
263
220
|
|
264
221
|
# Assign Filter to User
|
265
222
|
def assign_filters_users(writer_id, email, filters = [], optionals: {}, async: true)
|
266
|
-
|
267
|
-
handle
|
268
|
-
async ? Job.new(result) : wait_for_job(result["id"])
|
269
|
-
end
|
223
|
+
params = { writerId: writer_id, email: email, filters: filters }.reverse_merge(optionals)
|
224
|
+
handle(@client.post("filters-users", params.to_json)) { |result| job_handler(result, async) }
|
270
225
|
end
|
271
226
|
|
272
227
|
# Synchronizes filters in GoodData project according to writer's configuration
|
273
228
|
def sync_filters(writer_id, optionals: {}, async: true)
|
274
|
-
|
275
|
-
|
276
|
-
end
|
229
|
+
params = { writerId: writer_id }.reverse_merge(optionals)
|
230
|
+
handle(@client.post("sync-filters", params.to_json)) { |result| job_handler(result, async) }
|
277
231
|
end
|
278
232
|
|
279
233
|
|
@@ -281,28 +235,28 @@ module Keboola
|
|
281
235
|
|
282
236
|
# Execute selected reports in GoodData
|
283
237
|
def execute_reports(writer_id, project_id, optionals: {}, async: true)
|
284
|
-
|
285
|
-
|
286
|
-
end
|
238
|
+
params = { writerId: writer_id, pid: project_id }.reverse_merge(optionals)
|
239
|
+
handle(@client.post("execute-reports", params.to_json)) { |result| job_handler(result, async) }
|
287
240
|
end
|
288
241
|
|
289
242
|
# Call to obtain an SSO link for user
|
290
243
|
def sso(writer_id, project_id, email, optionals: {})
|
291
|
-
|
292
|
-
|
293
|
-
end
|
244
|
+
params = { writerId: writer_id, pid: project_id, email: email }.reverse_merge(optionals)
|
245
|
+
handle(@client.get("sso", params)) { |result| result["ssoLink"] }
|
294
246
|
end
|
295
247
|
|
296
248
|
# Simple proxy for direct calls to GoodData API
|
297
249
|
def proxy(method, writer_id, query, optionals: {}, async: true)
|
298
|
-
|
250
|
+
params = { writerId: writer_id, query: query }.reverse_merge(optionals)
|
299
251
|
case method.to_sym
|
300
252
|
when :get
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
253
|
+
if block_given?
|
254
|
+
handle(@client.get("proxy", params)) { |result| yield result }
|
255
|
+
else
|
256
|
+
handle(@client.get("proxy", params))
|
305
257
|
end
|
258
|
+
when :post
|
259
|
+
handle(@client.post("proxy", params.to_json)) { |result| job_handler(result, async) }
|
306
260
|
end
|
307
261
|
end
|
308
262
|
|
@@ -311,16 +265,12 @@ module Keboola
|
|
311
265
|
|
312
266
|
# Return list of jobs for given writer
|
313
267
|
def jobs(writer_id)
|
314
|
-
handle
|
315
|
-
result.map { |hash| Job.new(hash) }
|
316
|
-
end
|
268
|
+
handle(@queue.get("jobs", { q: "+params.writerId:#{writer_id}", limit: 50 })) { |result| result.map { |hash| job_handler(hash) } }
|
317
269
|
end
|
318
270
|
|
319
271
|
# Return detail of given job
|
320
272
|
def job(job_id)
|
321
|
-
handle
|
322
|
-
Job.new(result)
|
323
|
-
end
|
273
|
+
handle(@queue.get("jobs/#{job_id}")) { |result| job_handler(result) }
|
324
274
|
end
|
325
275
|
|
326
276
|
# Ask repeatedly for job status until it is finished
|
@@ -335,8 +285,12 @@ module Keboola
|
|
335
285
|
|
336
286
|
private
|
337
287
|
|
288
|
+
def job_handler(result, async = true)
|
289
|
+
async ? Job.new(result) : wait_for_job(result["id"])
|
290
|
+
end
|
291
|
+
|
338
292
|
# Properly handle response of API call request
|
339
|
-
def handle(response)
|
293
|
+
def handle(response, &handler)
|
340
294
|
result = case response.status_type
|
341
295
|
when :success # Is this a 2xx response?
|
342
296
|
@parser.parse(response.body)
|
@@ -354,7 +308,7 @@ module Keboola
|
|
354
308
|
raise ResponseError.new(response)
|
355
309
|
end
|
356
310
|
|
357
|
-
|
311
|
+
handler.nil? ? result : handler.call(result)
|
358
312
|
|
359
313
|
rescue ::Hurley::Error, ::Hurley::Timeout => e
|
360
314
|
raise ResponseError.new(e)
|
@@ -4,12 +4,16 @@ module Keboola
|
|
4
4
|
module GoodDataWriter
|
5
5
|
|
6
6
|
class Client < ::Hurley::Client
|
7
|
-
def self.factory(endpoint
|
7
|
+
def self.factory(endpoint: nil, token: nil)
|
8
|
+
endpoint || raise(ArgumentError, "endpoint is required")
|
9
|
+
token || raise(ArgumentError, "token is required")
|
10
|
+
|
8
11
|
client = new(endpoint)
|
9
12
|
client.header[:x_storageapi_token] = token
|
10
13
|
client.header[:accept] = "application/json"
|
11
14
|
client.request_options.redirection_limit = 5
|
12
15
|
client.request_options.timeout = 5
|
16
|
+
client.ssl_options.skip_verification = true
|
13
17
|
client
|
14
18
|
end
|
15
19
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: keboola-gooddata-writer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Sklenář
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.7.0
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.7.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,7 +160,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
160
|
requirements:
|
161
161
|
- - ">="
|
162
162
|
- !ruby/object:Gem::Version
|
163
|
-
version:
|
163
|
+
version: 2.0.0
|
164
164
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
165
|
requirements:
|
166
166
|
- - ">"
|