gooddata 2.0.1-java → 2.1.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/CHANGELOG.md +12 -1
- data/CONTRIBUTING.md +11 -0
- data/SDK_VERSION +1 -1
- data/VERSION +1 -1
- data/bin/{provisioning.sh → provision.sh} +0 -0
- data/bin/run_smoke_tests.sh +1 -0
- data/bin/test_projects_cleanup.rb +6 -1
- data/gooddata.gemspec +1 -0
- data/lib/gooddata/cli/commands/api_cmd.rb +30 -0
- data/lib/gooddata/cli/commands/domain_cmd.rb +6 -1
- data/lib/gooddata/cli/commands/process_cmd.rb +52 -0
- data/lib/gooddata/cli/commands/project_cmd.rb +23 -1
- data/lib/gooddata/cli/hooks.rb +3 -2
- data/lib/gooddata/commands/api.rb +20 -15
- data/lib/gooddata/commands/auth.rb +2 -2
- data/lib/gooddata/models/metadata/metric.rb +4 -2
- data/lib/gooddata/models/process.rb +10 -16
- data/lib/gooddata/models/project.rb +11 -0
- data/lib/gooddata/rest/connection.rb +22 -3
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0aeb4013ddeaeb9d85a24d510186f07d057d829ae1abbaca2a3fceda59160f56
|
4
|
+
data.tar.gz: a988ad2a37132e168cf562c64070bf1c951afc41a1f7aa2e6a6b4b43e6137041
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83249304bbb76555fe9c6eae3776fcda14464bd27bbc64c275ce0961917b494540c3dbedc60c14fb5ec001fe1e545a47a85d320a8ef80006194e47d8b944c74c
|
7
|
+
data.tar.gz: 38a3da28fc0d6df3529b7766b2140b5b4af2933347cab5b6011235831f5b26578041858b0f34353603e748944baf7c9c780ef735e7181dc4fc7534a1b2495d13
|
data/.travis.yml
CHANGED
@@ -9,6 +9,8 @@ stages:
|
|
9
9
|
if: type IN (cron)
|
10
10
|
- name: gem-release
|
11
11
|
if: branch = master AND type = push
|
12
|
+
- name: gem-smoke-test
|
13
|
+
if: branch = master AND type = push
|
12
14
|
|
13
15
|
git:
|
14
16
|
depth: false # this is needed for pronto
|
@@ -31,6 +33,7 @@ jobs:
|
|
31
33
|
- 2.3
|
32
34
|
- 2.4
|
33
35
|
- 2.5
|
36
|
+
- 2.6
|
34
37
|
- jruby-1.7.19
|
35
38
|
- jruby-9.1.5
|
36
39
|
- jruby-9.1.7
|
@@ -205,7 +208,7 @@ jobs:
|
|
205
208
|
chmod 0600 ~/.gem/credentials
|
206
209
|
bundle exec rake gem:release
|
207
210
|
- &gem-smoke-test
|
208
|
-
stage: gem-
|
211
|
+
stage: gem-smoke-test
|
209
212
|
name: smoke test MRI gem
|
210
213
|
rvm: 2.3
|
211
214
|
script: |
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,15 @@
|
|
1
1
|
# GoodData Ruby SDK Changelog
|
2
|
+
## 2.1.0
|
3
|
+
- TMA-1401: print message and request id on http error
|
4
|
+
- Add doc section to contributing.md
|
5
|
+
- TMA-1400: Add docs for update_from_blueprint
|
6
|
+
- TMA-1383 added ruby 2.6 to travis tests
|
7
|
+
- TMA-1231: fix CL functionality
|
8
|
+
- FEATURE: Make number format assignable for metrics
|
9
|
+
- FEATURE: Run gem smoke test after release
|
10
|
+
- FEATURE: Deploy jruby gem automatically
|
11
|
+
- Fix certificate storage set_default_paths
|
12
|
+
|
2
13
|
## 2.0.1
|
3
14
|
- Fix pronto branch
|
4
15
|
- Fix requiring version.rb
|
@@ -342,7 +353,7 @@ This is a major version release because the method `.release_info` has been hard
|
|
342
353
|
- TMA-604: can put metrics in folders
|
343
354
|
- TMA-843: avoid abuse of obj resource in partial md import export
|
344
355
|
- TMA-892: User filters brick dry run (#1156)
|
345
|
-
- * TMA-892: User filters brick dry run
|
356
|
+
- * TMA-892: User filters brick dry run
|
346
357
|
- TMA-761: add support for manual schedule execution
|
347
358
|
- fix recovery from provision clients error
|
348
359
|
- make sso backwards compatible
|
data/CONTRIBUTING.md
CHANGED
@@ -48,6 +48,16 @@ We use [Pronto](https://github.com/prontolabs/pronto) to detect code smells usin
|
|
48
48
|
- [Reek](https://github.com/troessner/reek#editor-integrations)
|
49
49
|
- [Flay](https://github.com/seattlerb/flay)
|
50
50
|
|
51
|
+
## Documentation
|
52
|
+
|
53
|
+
#### Yard
|
54
|
+
|
55
|
+
We use `yard` to auto-generate [documentation from comments](https://www.rubydoc.info/gems/gooddata/). Document all new and modified public methods using [`yard` tags](https://www.rubydoc.info/gems/yard/file/docs/Tags.md). Run `./yard-server.sh` to see the result.
|
56
|
+
|
57
|
+
#### Cookbook
|
58
|
+
|
59
|
+
Usage examples can be found [here](https://sdk.gooddata.com/gooddata-ruby-doc). If your change deserves an example, make a PR to [this repo](https://github.com/gooddata/gooddata-ruby-doc).
|
60
|
+
|
51
61
|
## Acceptance criteria
|
52
62
|
|
53
63
|
1. The change is as small as possible. It fixes one specific issue or implements
|
@@ -71,5 +81,6 @@ We use [Pronto](https://github.com/prontolabs/pronto) to detect code smells usin
|
|
71
81
|
1. If the pull request adds any new libraries, they should be in line with our
|
72
82
|
[license](/LICENSE).
|
73
83
|
1. Use `GoodData.logger` for logging instead of `puts`.
|
84
|
+
1. Public methods [are documented](#documentation) and examples are added to the [cookbook](#cookbook) when applicable.
|
74
85
|
|
75
86
|
_Based on [GitLab's contribution guide](https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md)._
|
data/SDK_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0
|
1
|
+
2.1.0
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.6.0
|
File without changes
|
data/bin/run_smoke_tests.sh
CHANGED
@@ -81,9 +81,14 @@ def clean_up!(client, force, days)
|
|
81
81
|
delete_project_by_title(/Test MINOR project/, projects, days, force)
|
82
82
|
delete_project_by_title(/^Test project$/, projects, days, force)
|
83
83
|
delete_project_by_title(/userprov-e2e-testing/, projects, days, force)
|
84
|
+
delete_project_by_title(/load test service project/, projects, days, force)
|
85
|
+
delete_project_by_title(/LCM SPEC PROJECT/, projects, days, force)
|
86
|
+
delete_project_by_title(/LCM spec Client With Conflicting LDM Changes/, projects, days, force)
|
87
|
+
delete_project_by_title(/LCM spec master project/, projects, days, force)
|
88
|
+
delete_project_by_title(/users brick load test/, client, days, force)
|
84
89
|
delete_ads_by_title(/Development ADS/, client, days, force)
|
85
90
|
delete_ads_by_title(/Production ADS/, client, days, force)
|
86
|
-
delete_ads_by_title(
|
91
|
+
delete_ads_by_title(/TEST ADS/, client, days, force)
|
87
92
|
end
|
88
93
|
|
89
94
|
def init_client(username, password, server)
|
data/gooddata.gemspec
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Copyright (c) 2010-2019 GoodData Corporation. All rights reserved.
|
2
|
+
# This source code is licensed under the BSD-style license found in the
|
3
|
+
# LICENSE file in the root directory of this source tree.
|
4
|
+
|
5
|
+
require_relative '../shared'
|
6
|
+
require_relative '../../commands/api'
|
7
|
+
|
8
|
+
require 'json'
|
9
|
+
require 'tty-spinner'
|
10
|
+
|
11
|
+
module GoodData
|
12
|
+
module CLI
|
13
|
+
desc 'Make any requests to the gooddata api'
|
14
|
+
command :api do |c|
|
15
|
+
%i[get delete post].map do |http_method|
|
16
|
+
c.desc "Make a #{http_method} request"
|
17
|
+
c.command http_method do |method|
|
18
|
+
method.action do |global_options, options, args|
|
19
|
+
opts = options.merge(global_options)
|
20
|
+
spinner = TTY::Spinner.new ":spinner Calling GoodData API"
|
21
|
+
spinner.auto_spin
|
22
|
+
res = GoodData::Command::Api.send(http_method, args, opts)
|
23
|
+
spinner.stop
|
24
|
+
puts res.to_json
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -5,6 +5,7 @@
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
6
6
|
|
7
7
|
require 'pathname'
|
8
|
+
require 'tty-spinner'
|
8
9
|
|
9
10
|
require_relative '../shared'
|
10
11
|
require_relative '../../commands/domain'
|
@@ -19,7 +20,11 @@ module GoodData
|
|
19
20
|
c.command :users do |users|
|
20
21
|
users.action do |global_options, options, args|
|
21
22
|
opts = options.merge(global_options)
|
22
|
-
|
23
|
+
spinner = TTY::Spinner.new ":spinner Fetching users from domain"
|
24
|
+
spinner.auto_spin
|
25
|
+
res = GoodData::Command::Domain.list_users(args[0], opts)
|
26
|
+
spinner.stop
|
27
|
+
res
|
23
28
|
end
|
24
29
|
end
|
25
30
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# Copyright (c) 2010-2019 GoodData Corporation. All rights reserved.
|
2
|
+
# This source code is licensed under the BSD-style license found in the
|
3
|
+
# LICENSE file in the root directory of this source tree.
|
4
|
+
|
5
|
+
require_relative '../shared'
|
6
|
+
require_relative '../../commands/api'
|
7
|
+
|
8
|
+
require 'json'
|
9
|
+
require 'tty-spinner'
|
10
|
+
|
11
|
+
module GoodData
|
12
|
+
module CLI
|
13
|
+
desc 'Manage processes (ETLs, Ruby bricks..)'
|
14
|
+
command :process do |c|
|
15
|
+
c.desc 'Create a new process'
|
16
|
+
c.command :create do |s|
|
17
|
+
s.desc 'Create a new process from a webdav or gerrit appstore path'
|
18
|
+
s.command :from_path do |cs|
|
19
|
+
cs.action do |global_options, options, args|
|
20
|
+
opts = options.merge(global_options)
|
21
|
+
path = args.first
|
22
|
+
spinner = TTY::Spinner.new ":spinner Creating process"
|
23
|
+
spinner.auto_spin
|
24
|
+
client = GoodData.connect opts
|
25
|
+
project = client.projects(opts[:project_id])
|
26
|
+
res = GoodData::Process.deploy(path, project: project, client: client)
|
27
|
+
spinner.stop
|
28
|
+
puts res.to_json
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
s.desc 'Create a new process as a pluggable component'
|
33
|
+
s.command :as_component do |ac|
|
34
|
+
ac.action do |global_options, options, args|
|
35
|
+
opts = options.merge(global_options)
|
36
|
+
file = args.first
|
37
|
+
fail 'Deploying a component requires a JSON formatted payload as a parameter' unless file
|
38
|
+
|
39
|
+
payload = JSON.parse(File.read(file))
|
40
|
+
spinner = TTY::Spinner.new ":spinner Creating process"
|
41
|
+
spinner.auto_spin
|
42
|
+
client = GoodData.connect opts
|
43
|
+
project = client.projects(opts[:project_id])
|
44
|
+
res = GoodData::Process.deploy_component(payload, project: project, client: client)
|
45
|
+
spinner.stop
|
46
|
+
puts res.to_json
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -5,6 +5,8 @@
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
6
6
|
|
7
7
|
require 'pathname'
|
8
|
+
require 'json'
|
9
|
+
require 'tty-spinner'
|
8
10
|
|
9
11
|
require_relative '../shared'
|
10
12
|
require_relative '../../commands/project'
|
@@ -19,7 +21,27 @@ module GoodData
|
|
19
21
|
c.command :users do |users|
|
20
22
|
users.action do |global_options, options, _args|
|
21
23
|
opts = options.merge(global_options)
|
22
|
-
|
24
|
+
spinner = TTY::Spinner.new ":spinner Listing users"
|
25
|
+
spinner.auto_spin
|
26
|
+
res = GoodData::Command::Project.list_users(opts)
|
27
|
+
spinner.stop
|
28
|
+
res
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
c.desc 'Create new project'
|
33
|
+
c.command :create do |create|
|
34
|
+
create.action do |global_options, options, _args|
|
35
|
+
opts = options.merge(global_options)
|
36
|
+
token = opts[:token]
|
37
|
+
title = opts[:title] || 'New project'
|
38
|
+
driver = opts[:driver] || 'Pg'
|
39
|
+
spinner = TTY::Spinner.new ":spinner Creating project"
|
40
|
+
spinner.auto_spin
|
41
|
+
client = GoodData.connect(opts)
|
42
|
+
res = GoodData::Command::Project.create(token: token, title: title, driver: driver, client: client)
|
43
|
+
spinner.stop
|
44
|
+
puts res.to_json
|
23
45
|
end
|
24
46
|
end
|
25
47
|
end
|
data/lib/gooddata/cli/hooks.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
#
|
3
2
|
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
4
3
|
# This source code is licensed under the BSD-style license found in the
|
@@ -11,7 +10,8 @@ require_relative '../helpers/auth_helpers'
|
|
11
10
|
GoodData::CLI.module_eval do
|
12
11
|
pre do |global, _command, _options, _args|
|
13
12
|
require 'logger'
|
14
|
-
GoodData.logger = Logger.new(
|
13
|
+
GoodData.logger = Logger.new(STDERR)
|
14
|
+
GoodData.logger.level = Logger::Severity::ERROR
|
15
15
|
username = global[:username]
|
16
16
|
password = global[:password]
|
17
17
|
token = global[:token]
|
@@ -21,6 +21,7 @@ GoodData::CLI.module_eval do
|
|
21
21
|
username = creds[:username] if username.nil?
|
22
22
|
password = creds[:password] if password.nil?
|
23
23
|
token = creds[:auth_token] || creds[:token] if token.nil?
|
24
|
+
GoodData.logger.error 'SSL verification is turned off. I hope you are not in production!' unless global[:verify_ssl]
|
24
25
|
|
25
26
|
global[:token] = token if global[:token].nil?
|
26
27
|
if global[:login].nil?
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
#
|
3
2
|
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
4
3
|
# This source code is licensed under the BSD-style license found in the
|
@@ -37,26 +36,32 @@ module GoodData
|
|
37
36
|
|
38
37
|
# Get resource
|
39
38
|
# @param path Resource path
|
40
|
-
def get(
|
39
|
+
def get(args, opts)
|
40
|
+
path = args.first
|
41
41
|
fail(GoodData::CommandFailed, 'Specify the path you want to GET.') if path.nil?
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
rescue
|
46
|
-
puts result
|
47
|
-
end
|
42
|
+
|
43
|
+
client = GoodData.connect(opts)
|
44
|
+
client.get path
|
48
45
|
end
|
49
46
|
|
50
47
|
# Delete resource
|
51
48
|
# @param path Resource path
|
52
|
-
def delete(
|
49
|
+
def delete(args, opts)
|
50
|
+
path = args.first
|
53
51
|
fail(GoodData::CommandFailed, 'Specify the path you want to DELETE.') if path.nil?
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
52
|
+
|
53
|
+
client = GoodData.connect(opts)
|
54
|
+
client.delete path
|
55
|
+
end
|
56
|
+
|
57
|
+
def post(args, opts)
|
58
|
+
path = Array(args).shift
|
59
|
+
fail(GoodData::CommandFailed, 'Specify the path you want to POST to.') if path.nil?
|
60
|
+
|
61
|
+
payload = Array(args).shift
|
62
|
+
json = payload && File.exist?(payload) ? JSON.parse(File.read(payload)) : {}
|
63
|
+
client = GoodData.connect(opts)
|
64
|
+
client.post path, json
|
60
65
|
end
|
61
66
|
end
|
62
67
|
end
|
@@ -38,7 +38,7 @@ module GoodData
|
|
38
38
|
end
|
39
39
|
|
40
40
|
# Ask for token
|
41
|
-
auth_token = GoodData::CLI.terminal.ask('Authorization Token') do |q|
|
41
|
+
auth_token = GoodData::CLI.terminal.ask('Authorization (Project) Token') do |q|
|
42
42
|
set_default_value(q, old_credentials[:auth_token])
|
43
43
|
end
|
44
44
|
|
@@ -64,7 +64,7 @@ module GoodData
|
|
64
64
|
|
65
65
|
# Ask for credentials and store them
|
66
66
|
def store(credentials_file_path = Helpers::AuthHelper.credentials_file)
|
67
|
-
puts 'This will store
|
67
|
+
puts 'This will store credentials to GoodData in an UNencrypted form to your harddrive to file ~/.gooddata.'
|
68
68
|
overwrite = GoodData::CLI.terminal.ask('Do you want to continue? (y/n)')
|
69
69
|
return if overwrite != 'y'
|
70
70
|
|
@@ -16,7 +16,7 @@ module GoodData
|
|
16
16
|
extend GoodData::Mixin::ContentPropertyReader
|
17
17
|
extend GoodData::Mixin::ContentPropertyWriter
|
18
18
|
|
19
|
-
content_property_reader :folders, :expression
|
19
|
+
content_property_reader :folders, :expression, :format
|
20
20
|
content_property_writer :folders, :expression
|
21
21
|
|
22
22
|
class << self
|
@@ -44,11 +44,13 @@ module GoodData
|
|
44
44
|
extended_notation = options[:extended_notation] || false
|
45
45
|
title = options[:title]
|
46
46
|
summary = options[:summary]
|
47
|
+
format = options[:format]
|
47
48
|
else
|
48
49
|
metric ||= options
|
49
50
|
title = metric[:title] || options[:title]
|
50
51
|
summary = metric[:summary] || options[:summary]
|
51
52
|
expression = metric[:expression] || options[:expression] || fail('Metric has to have its expression defined')
|
53
|
+
format = metric[:format] || options[:format]
|
52
54
|
extended_notation = metric[:extended_notation] || options[:extended_notation] || false
|
53
55
|
end
|
54
56
|
|
@@ -76,7 +78,7 @@ module GoodData
|
|
76
78
|
metric = {
|
77
79
|
'metric' => {
|
78
80
|
'content' => {
|
79
|
-
'format' => '#,##0',
|
81
|
+
'format' => format || '#,##0',
|
80
82
|
'expression' => expression
|
81
83
|
},
|
82
84
|
'meta' => {
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
#
|
3
2
|
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
4
3
|
# This source code is licensed under the BSD-style license found in the
|
@@ -67,7 +66,7 @@ module GoodData
|
|
67
66
|
begin
|
68
67
|
res = GoodData::Process.deploy(dir, options.merge(:files_to_exclude => params))
|
69
68
|
block.call(res)
|
70
|
-
rescue => e
|
69
|
+
rescue StandardError => e
|
71
70
|
GoodData.logger.error(e.inspect)
|
72
71
|
ensure
|
73
72
|
res.delete if res
|
@@ -106,11 +105,13 @@ module GoodData
|
|
106
105
|
def deploy_simple_process(path, options = { client: GoodData.client, project: GoodData.project })
|
107
106
|
client, project = GoodData.get_client_and_project(options)
|
108
107
|
|
109
|
-
|
108
|
+
fail 'Path is not specified' unless path
|
109
|
+
|
110
|
+
path = Pathname(path) || fail('Path is not a valid pathname')
|
110
111
|
files_to_exclude = options[:files_to_exclude].nil? ? [] : options[:files_to_exclude].map { |pname| Pathname(pname) }
|
111
112
|
|
112
113
|
type = options[:type] || 'GRAPH'
|
113
|
-
deploy_name = options[:name]
|
114
|
+
deploy_name = options[:name] || "Process of #{path} script"
|
114
115
|
fail ArgumentError, 'options[:name] can not be nil or empty!' if deploy_name.nil? || deploy_name.empty?
|
115
116
|
|
116
117
|
verbose = options[:verbose] || false
|
@@ -157,9 +158,7 @@ module GoodData
|
|
157
158
|
|
158
159
|
full_brick_path = File.join(dir, 'app_store', brick_path)
|
159
160
|
|
160
|
-
unless File.exist?(full_brick_path)
|
161
|
-
fail "Invalid brick name specified - '#{brick_name}'"
|
162
|
-
end
|
161
|
+
fail "Invalid brick name specified - '#{brick_name}'" unless File.exist?(full_brick_path)
|
163
162
|
|
164
163
|
return deploy(full_brick_path, opts)
|
165
164
|
end
|
@@ -167,8 +166,7 @@ module GoodData
|
|
167
166
|
end
|
168
167
|
|
169
168
|
def deploy_from_appstore(path, options = { :client => GoodData.client, :project => GoodData.project })
|
170
|
-
deploy_name = options[:name]
|
171
|
-
fail ArgumentError, 'options[:name] can not be nil or empty!' if deploy_name.nil? || deploy_name.empty?
|
169
|
+
deploy_name = options[:name] || "Process of #{path}"
|
172
170
|
|
173
171
|
verbose = options[:verbose] || false
|
174
172
|
GoodData.logger.info("Deploying #{path}") if verbose
|
@@ -211,9 +209,7 @@ module GoodData
|
|
211
209
|
else
|
212
210
|
client.put("/gdc/projects/#{project.pid}/dataload/processes/#{process_id}", data)
|
213
211
|
end
|
214
|
-
if res.keys.first == 'asyncTask'
|
215
|
-
res = JSON.parse(client.poll_on_code(res['asyncTask']['links']['poll'], options.merge(process: false)))
|
216
|
-
end
|
212
|
+
res = JSON.parse(client.poll_on_code(res['asyncTask']['links']['poll'], options.merge(process: false))) if res.keys.first == 'asyncTask'
|
217
213
|
|
218
214
|
client.create(Process, res, project: project)
|
219
215
|
end
|
@@ -242,7 +238,7 @@ module GoodData
|
|
242
238
|
# this branch expects a zipped file. Since the filename on webdav is by default
|
243
239
|
# equal to the filename of a local file. I happened often that the name clashed
|
244
240
|
# if ran in parallel. Create a randomized name to mitigate that
|
245
|
-
randomized_filename = (0...16).map { (
|
241
|
+
randomized_filename = (0...16).map { (rand(65..90)).chr }.join
|
246
242
|
client.upload_to_user_webdav(path, { filename: randomized_filename }.merge(opts))
|
247
243
|
randomized_filename
|
248
244
|
else
|
@@ -357,9 +353,7 @@ module GoodData
|
|
357
353
|
raise(e)
|
358
354
|
ensure
|
359
355
|
result = client.get(result['executionTask']['links']['detail'])
|
360
|
-
if result['executionDetail']['status'] == 'ERROR'
|
361
|
-
fail "Runing process failed. You can look at a log here #{result['executionDetail']['logFileName']}"
|
362
|
-
end
|
356
|
+
fail "Runing process failed. You can look at a log here #{result['executionDetail']['logFileName']}" if result['executionDetail']['status'] == 'ERROR'
|
363
357
|
end
|
364
358
|
client.create(GoodData::ExecutionDetail, result, client: client, project: project)
|
365
359
|
end
|
@@ -1847,6 +1847,17 @@ module GoodData
|
|
1847
1847
|
GoodData::Variable[id, options]
|
1848
1848
|
end
|
1849
1849
|
|
1850
|
+
# Applies blueprint to the project.
|
1851
|
+
#
|
1852
|
+
# @param [Hash] blueprint Blueprint to apply to the project.
|
1853
|
+
# @option options [Hash] :update_preference (cascade_drops: false, preserve_data: true) Specifies how dropping LDM and data should be treated.
|
1854
|
+
# @example Update with custom update preference.
|
1855
|
+
# GoodData.project.update_from_blueprint(
|
1856
|
+
# blueprint,
|
1857
|
+
# update_preference: {
|
1858
|
+
# cascade_drops: false, preserve_data: false
|
1859
|
+
# }
|
1860
|
+
# )
|
1850
1861
|
def update_from_blueprint(blueprint, options = {})
|
1851
1862
|
GoodData::Model::ProjectCreator.migrate(options.merge(spec: blueprint, token: options[:auth_token], client: client, project: self))
|
1852
1863
|
end
|
@@ -43,9 +43,13 @@ module GoodData
|
|
43
43
|
:user_agent => GoodData.gem_version_string
|
44
44
|
}
|
45
45
|
|
46
|
+
CERTIFICATE_STORE = OpenSSL::X509::Store.new.freeze
|
47
|
+
CERTIFICATE_STORE.set_default_paths
|
48
|
+
|
46
49
|
DEFAULT_LOGIN_PAYLOAD = {
|
47
50
|
:headers => DEFAULT_HEADERS,
|
48
|
-
:verify_ssl => true
|
51
|
+
:verify_ssl => true,
|
52
|
+
:ssl_cert_store => CERTIFICATE_STORE
|
49
53
|
}
|
50
54
|
|
51
55
|
RETRYABLE_ERRORS = [
|
@@ -462,6 +466,17 @@ module GoodData
|
|
462
466
|
"#{@execution_id}:#{session_id}:#{call_id}"
|
463
467
|
end
|
464
468
|
|
469
|
+
def enrich_error_message(exception)
|
470
|
+
begin
|
471
|
+
response = JSON.parse(exception.response.body, symbolize_names: true)
|
472
|
+
return exception unless exception.message && response[:error] && response[:error][:message] && response[:error][:requestId]
|
473
|
+
|
474
|
+
exception.message = exception.message + ': ' + response[:error][:message] % response[:error][:parameters] + ' request_id: ' + response[:error][:requestId]
|
475
|
+
rescue JSON::ParserError # rubocop:disable Lint/HandleExceptions
|
476
|
+
end
|
477
|
+
exception
|
478
|
+
end
|
479
|
+
|
465
480
|
private
|
466
481
|
|
467
482
|
def create_webdav_dir_if_needed(url)
|
@@ -561,8 +576,12 @@ ERR
|
|
561
576
|
dont_reauth = options[:dont_reauth]
|
562
577
|
options = options.reject { |k, _| [:process, :dont_reauth].include?(k) }
|
563
578
|
opts = { tries: retries, refresh_token: proc { refresh_token unless dont_reauth } }.merge(options)
|
564
|
-
|
565
|
-
|
579
|
+
begin
|
580
|
+
response = GoodData::Rest::Connection.retryable(opts) do
|
581
|
+
block.call
|
582
|
+
end
|
583
|
+
rescue RestClient::Exception => e
|
584
|
+
fail enrich_error_message(e)
|
566
585
|
end
|
567
586
|
merge_headers! response.headers
|
568
587
|
content_type = response.headers[:content_type]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gooddata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Pavel Kolesnikov
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2019-
|
17
|
+
date: 2019-03-14 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
requirement: !ruby/object:Gem::Requirement
|
@@ -462,6 +462,20 @@ dependencies:
|
|
462
462
|
- - ">="
|
463
463
|
- !ruby/object:Gem::Version
|
464
464
|
version: '0'
|
465
|
+
- !ruby/object:Gem::Dependency
|
466
|
+
requirement: !ruby/object:Gem::Requirement
|
467
|
+
requirements:
|
468
|
+
- - ">="
|
469
|
+
- !ruby/object:Gem::Version
|
470
|
+
version: '0'
|
471
|
+
name: tty-spinner
|
472
|
+
prerelease: false
|
473
|
+
type: :runtime
|
474
|
+
version_requirements: !ruby/object:Gem::Requirement
|
475
|
+
requirements:
|
476
|
+
- - ">="
|
477
|
+
- !ruby/object:Gem::Version
|
478
|
+
version: '0'
|
465
479
|
description: Use the GoodData::Client class to integrate GoodData into your own application
|
466
480
|
or use the CLI to work with GoodData directly from the command line.
|
467
481
|
email: lcm@gooddata.com
|
@@ -470,7 +484,7 @@ executables:
|
|
470
484
|
- gooddata
|
471
485
|
- hello_world.sh
|
472
486
|
- help.sh
|
473
|
-
-
|
487
|
+
- provision.sh
|
474
488
|
- release.sh
|
475
489
|
- rollout.sh
|
476
490
|
- run_brick.rb
|
@@ -518,7 +532,7 @@ files:
|
|
518
532
|
- bin/gooddata
|
519
533
|
- bin/hello_world.sh
|
520
534
|
- bin/help.sh
|
521
|
-
- bin/
|
535
|
+
- bin/provision.sh
|
522
536
|
- bin/release.sh
|
523
537
|
- bin/rollout.sh
|
524
538
|
- bin/run_brick.rb
|
@@ -572,8 +586,10 @@ files:
|
|
572
586
|
- lib/gooddata/bricks/users_brick.rb
|
573
587
|
- lib/gooddata/bricks/utils.rb
|
574
588
|
- lib/gooddata/cli/cli.rb
|
589
|
+
- lib/gooddata/cli/commands/api_cmd.rb
|
575
590
|
- lib/gooddata/cli/commands/auth_cmd.rb
|
576
591
|
- lib/gooddata/cli/commands/domain_cmd.rb
|
592
|
+
- lib/gooddata/cli/commands/process_cmd.rb
|
577
593
|
- lib/gooddata/cli/commands/project_cmd.rb
|
578
594
|
- lib/gooddata/cli/hooks.rb
|
579
595
|
- lib/gooddata/cli/shared.rb
|