gooddata 2.0.1-java → 2.1.0-java

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
2
  SHA256:
3
- metadata.gz: 28bd0cc29052ece07bb8eb9abfa0e1034bfa78da004bfd439832274c662faecc
4
- data.tar.gz: b383f1201f65f1e58aa94148a783481825b40fb093bf17bc17eaf4ae88df490b
3
+ metadata.gz: 0aeb4013ddeaeb9d85a24d510186f07d057d829ae1abbaca2a3fceda59160f56
4
+ data.tar.gz: a988ad2a37132e168cf562c64070bf1c951afc41a1f7aa2e6a6b4b43e6137041
5
5
  SHA512:
6
- metadata.gz: 9fce66e49b9823b0e2301bd6c29453b47522ce7ebaf234fd34f48c4245e5aeeab8ba201a4e629628a2e9364f668345f91e1f348c64792d7b87f1494726b66614
7
- data.tar.gz: 94a17567a2dea77d431abd89c7ce7cd1754f08bbe847f87621eb0a5eb838b08ce7021ea12ca7b1240ea71f53b025386aa6e3a9a5d8294c9c5dd3a9ed8c6c45c0
6
+ metadata.gz: 83249304bbb76555fe9c6eae3776fcda14464bd27bbc64c275ce0961917b494540c3dbedc60c14fb5ec001fe1e545a47a85d320a8ef80006194e47d8b944c74c
7
+ data.tar.gz: 38a3da28fc0d6df3529b7766b2140b5b4af2933347cab5b6011235831f5b26578041858b0f34353603e748944baf7c9c780ef735e7181dc4fc7534a1b2495d13
@@ -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-release
211
+ stage: gem-smoke-test
209
212
  name: smoke test MRI gem
210
213
  rvm: 2.3
211
214
  script: |
@@ -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
@@ -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)._
@@ -1 +1 @@
1
- 2.0.1
1
+ 2.1.0
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.5.0
1
+ 3.6.0
File without changes
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
3
  export LCM_BRICKS_IMAGE_TAG=$GOODDATA_RUBY_COMMIT
4
+ export GD_ENV=staging
4
5
  /bin/bash -l -c ". /usr/local/rvm/scripts/rvm && bundle exec rake -f lcm.rake test:smoke"
@@ -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(/^users brick load test/, client, days, force)
91
+ delete_ads_by_title(/TEST ADS/, client, days, force)
87
92
  end
88
93
 
89
94
  def init_client(username, password, server)
@@ -74,4 +74,5 @@ Gem::Specification.new do |s|
74
74
  s.add_dependency 'terminal-table', '~> 1.7'
75
75
  s.add_dependency 'thread_safe'
76
76
  s.add_dependency 'backports'
77
+ s.add_dependency 'tty-spinner'
77
78
  end
@@ -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
- GoodData::Command::Domain.list_users(args[0], opts)
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
- GoodData::Command::Project.list_users(opts)
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
@@ -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(STDOUT) if global[:l]
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(path)
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
- result = GoodData.get path
43
- begin
44
- result
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(path)
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
- result = GoodData.delete path
55
- begin
56
- result
57
- rescue
58
- puts result
59
- end
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 credntials to GoodData in an enencrypted form to your harddrive to file ~/.gooddata.'
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
- path = Pathname(path) || fail('Path is not specified')
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 { (65 + rand(26)).chr }.join
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
- response = GoodData::Rest::Connection.retryable(opts) do
565
- block.call
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.1
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-02-25 00:00:00.000000000 Z
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
- - provisioning.sh
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/provisioning.sh
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