gooddata 2.1.17 → 2.1.19

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: f14e76f590c86838c60c538ccd73ba636da3ab812658e76211a148f2e195b4da
4
- data.tar.gz: 2261df5e9488e38560209c2a8df0048f5aad04d3451ba6b637146eb3a3118704
3
+ metadata.gz: f00b6b202dc2bcd6af02eda57b326c0ccf222a57683dcf12bacf6b318a212ec7
4
+ data.tar.gz: a2f73ed25aa53295e06648efaf0961c5eed43fc3f9defae3b5e640a167c948a2
5
5
  SHA512:
6
- metadata.gz: cfdfca51d63852aec59a46ce18f5e746018106f69847bf31cf7b8f845d41ef88d85c9c585af2010164116aab7fc1aa4d5b3ad75199b6c56fe9107d5ed353dcaa
7
- data.tar.gz: 97916ca5253a378319414a9fe7f4a5d673f08168085e629ff2462df6a3f0b173f62501529eb965c69d6e361333467e7340842fa217c08075950c34b8f9f2e05e
6
+ metadata.gz: ac6f6fd25919099b44ecaa302d81dab084de7540b158e35e02bb05b970eb8bba466a77d0eba3403dca66160f8e4c9c2b02603af9a8249afe7a4ebad295f22774
7
+ data.tar.gz: c075fe2ed8d29d0612f6fc01687c1d0cedc690df830642ebdac369026f7fc3158a07fcfbadd8c079a3574e222713b0cbce60a7b6b189ac3f6b4ba950b877e7b0
data/.travis.yml CHANGED
@@ -73,23 +73,52 @@ jobs:
73
73
 
74
74
  - name: lcm integration (vcr) tests - e2e
75
75
  stage: before-merge
76
- script: bundle exec rspec spec/lcm/integration/lcm_end_to_end_spec.rb
76
+ script: bundle exec rspec spec/lcm/integration/spec/e2e/lcm_end_to_end_spec.rb
77
77
  env:
78
78
  - VCR_RECORD_MODE=none
79
79
  rvm: 2.3
80
80
 
81
81
  # AFTER MERGE
82
82
  # staging 1
83
- - &lcm-integration-tests
84
- name: staging1 - lcm integration tests
83
+ - &lcm-integration-e2e-tests
84
+ name: staging1 - lcm integration-e2e tests
85
85
  stage: after-merge
86
86
  script: |
87
87
  bundle exec rake -f lcm.rake docker:build
88
88
  bundle exec rake -f lcm.rake docker:bundle
89
- bundle exec rake -f lcm.rake test:docker:integration
89
+ bundle exec rake -f lcm.rake test:docker:integration-e2e
90
90
  env:
91
91
  - VCR_ON=false
92
92
  - GD_ENV=staging
93
+ - GD_MAX_RETRY=2
94
+ rvm: jruby-9.1.14
95
+ jdk: openjdk8
96
+
97
+ - &lcm-integration-release-tests
98
+ name: staging1 - lcm integration-release tests
99
+ stage: after-merge
100
+ script: |
101
+ bundle exec rake -f lcm.rake docker:build
102
+ bundle exec rake -f lcm.rake docker:bundle
103
+ bundle exec rake -f lcm.rake test:docker:integration-release
104
+ env:
105
+ - VCR_ON=false
106
+ - GD_ENV=staging
107
+ - GD_MAX_RETRY=2
108
+ rvm: jruby-9.1.14
109
+ jdk: openjdk8
110
+
111
+ - &lcm-integration-others-tests
112
+ name: staging1 - lcm integration-others tests
113
+ stage: after-merge
114
+ script: |
115
+ bundle exec rake -f lcm.rake docker:build
116
+ bundle exec rake -f lcm.rake docker:bundle
117
+ bundle exec rake -f lcm.rake test:docker:integration-others
118
+ env:
119
+ - VCR_ON=false
120
+ - GD_ENV=staging
121
+ - GD_MAX_RETRY=2
93
122
  rvm: jruby-9.1.14
94
123
  jdk: openjdk8
95
124
 
@@ -155,11 +184,26 @@ jobs:
155
184
  jdk: openjdk8
156
185
 
157
186
  # staging 2
158
- - <<: *lcm-integration-tests
159
- name: staging2 - lcm integration tests
187
+ - <<: *lcm-integration-e2e-tests
188
+ name: staging2 - lcm integration-e2e tests
189
+ env:
190
+ - GD_ENV=testing
191
+ - VCR_ON=false
192
+ - GD_MAX_RETRY=2
193
+
194
+ - <<: *lcm-integration-release-tests
195
+ name: staging2 - lcm integration-release tests
196
+ env:
197
+ - GD_ENV=testing
198
+ - VCR_ON=false
199
+ - GD_MAX_RETRY=2
200
+
201
+ - <<: *lcm-integration-others-tests
202
+ name: staging2 - lcm integration-others tests
160
203
  env:
161
204
  - GD_ENV=testing
162
205
  - VCR_ON=false
206
+ - GD_MAX_RETRY=2
163
207
 
164
208
  - <<: *lcm-slow-tests
165
209
  name: staging2 - lcm slow tests
@@ -192,11 +236,26 @@ jobs:
192
236
  - VCR_ON=false
193
237
 
194
238
  # staging 3
195
- - <<: *lcm-integration-tests
196
- name: staging3 - lcm integration tests
239
+ - <<: *lcm-integration-e2e-tests
240
+ name: staging3 - lcm integration-e2e tests
241
+ env:
242
+ - GD_ENV=development
243
+ - VCR_ON=false
244
+ - GD_MAX_RETRY=2
245
+
246
+ - <<: *lcm-integration-release-tests
247
+ name: staging3 - lcm integration-release tests
248
+ env:
249
+ - GD_ENV=development
250
+ - VCR_ON=false
251
+ - GD_MAX_RETRY=2
252
+
253
+ - <<: *lcm-integration-others-tests
254
+ name: staging3 - lcm integration-others tests
197
255
  env:
198
256
  - GD_ENV=development
199
257
  - VCR_ON=false
258
+ - GD_MAX_RETRY=2
200
259
 
201
260
  - <<: *lcm-slow-tests
202
261
  name: staging3 - lcm slow tests
@@ -234,15 +293,21 @@ jobs:
234
293
  stage: after-merge
235
294
  name: staging1 - test environment clean-up
236
295
  script: travis_wait 30 bundle exec ruby bin/test_projects_cleanup.rb -f
237
- env: GD_ENV=staging
296
+ env:
297
+ - GD_ENV=staging
298
+ - GD_MAX_RETRY=2
238
299
 
239
300
  - <<: *cleanup
240
- name: travis_wait 30 staging2 - test environment clean-up
241
- env: GD_ENV=testing
301
+ name: staging2 - test environment clean-up
302
+ env:
303
+ - GD_ENV=testing
304
+ - GD_MAX_RETRY=2
242
305
 
243
306
  - <<: *cleanup
244
- name: travis_wait 30 staging3 - test environment clean-up
245
- env: GD_ENV=development
307
+ name: staging3 - test environment clean-up
308
+ env:
309
+ - GD_ENV=development
310
+ - GD_MAX_RETRY=2
246
311
 
247
312
  # AFTER MERGE UNIT TESTS ON ALTERNATIVE PLATFORM
248
313
 
@@ -279,7 +344,7 @@ jobs:
279
344
  script: bundle exec rake test:unit
280
345
  os: osx
281
346
  rvm: jruby-9.1.14
282
- osx_image: xcode7.3
347
+ osx_image: xcode9.4
283
348
 
284
349
  - stage: gem-release
285
350
  name: deploy MRI gem
data/CHANGELOG.md CHANGED
@@ -1,4 +1,16 @@
1
1
  # GoodData Ruby SDK Changelog
2
+ ## 2.1.19
3
+ - BUGFIX: MSF-20827 Fix gem-smoke-test failed when release ruby SDK
4
+ - BUGFIX: MSF-20826 Failure update license file when release ruby SDK
5
+
6
+ ## 2.1.18
7
+ - BUGFIX: TMA-1700 Failed Provisioning Brick created clients without ETL
8
+ - FEATURE: BCO-1300 Add model for analytical dashboard and visualization object
9
+ - FEATURE: MSF-20118 Support PostgreSQL as input for LCM provisioning bricks
10
+ - BUGFIX: TMA-999 Improve API call statistics log: add grouping on PID for roles
11
+ - CONFIG: TMA-1714 Ruby SDK travis build is failing
12
+ - BUGFIX: TMA-707 Provisioning brick does not log client deletion
13
+
2
14
  ## 2.1.17
3
15
  - BUGFIX:TMA-1704 - Enhance error message when not found clientId in source table
4
16
  - BUGFIX: TMA-1694 [UsersBrick] Enhance messages add more log for missing users when running remove_from_organization
data/Dockerfile.jruby CHANGED
@@ -2,7 +2,7 @@ FROM jruby:9.1-alpine
2
2
 
3
3
  MAINTAINER Tomas Korcak <korczis@gmail.com>
4
4
 
5
- RUN apk add --no-cache curl make gcc git g++ python linux-headers binutils-gold gnupg libstdc++
5
+ RUN apk add --no-cache curl make gcc git g++ python linux-headers binutils-gold gnupg libstdc++ postgresql postgresql-client openssl
6
6
 
7
7
  # Switch to directory with sources
8
8
  WORKDIR /src
@@ -20,3 +20,13 @@ ADD . .
20
20
  RUN keytool -importcert -alias gooddata-2008 -file "./data/2008.crt" -keystore $JAVA_HOME/lib/security/cacerts -trustcacerts -storepass 'changeit' -noprompt
21
21
  RUN keytool -importcert -alias gooddata-int -file "./data/new_ca.cer" -keystore $JAVA_HOME/lib/security/cacerts -trustcacerts -storepass 'changeit' -noprompt
22
22
  RUN keytool -importcert -alias gooddata-prod -file "data/new_prodgdc_ca.crt" -keystore $JAVA_HOME/lib/security/cacerts -trustcacerts -storepass 'changeit' -noprompt
23
+
24
+ ENV LANG en_US.utf8
25
+ RUN adduser -D -g '' gooddata
26
+ RUN rm -rf $HOME/spec/postgresql
27
+ RUN mkdir $HOME/spec/postgresql
28
+ RUN chmod -R 0750 $HOME/spec/postgresql
29
+ RUN chown gooddata $HOME/spec/postgresql
30
+ RUN mkdir /run/postgresql; chmod 1777 -R /run;
31
+ RUN mkdir $HOME/pre-exec.d; mkdir $HOME/pre-init.d; chmod -R 1755 $HOME/pre-exec.d; chmod -R 1755 $HOME/pre-exec.d
32
+ USER gooddata
data/SDK_VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.17
1
+ 2.1.19
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.7.25
1
+ 3.7.26
@@ -22,6 +22,39 @@ require_relative '../spec/environment/environment'
22
22
  GoodData::Environment.load
23
23
  config = GoodData::Environment::ConnectionHelper::LCM_ENVIRONMENT
24
24
  secrets = GoodData::Environment::ConnectionHelper::SECRETS
25
+ default_domain = GoodData::Environment::ConnectionHelper::DEFAULT_DOMAIN
26
+
27
+ def delete_segment_by_title(title, segments, days = 14, force = false)
28
+ return if segments.empty?
29
+ dead_line = Time.now - days * 60 * 60 * 24
30
+
31
+ filtered_segments = segments.select do |s|
32
+ if s.id.match(title) && s.id.length > 14 && s.id[s.id.length-14..-1]
33
+ segment_created = s.id[s.id.length-14..-1]
34
+ created = Time.parse(segment_created) if segment_created
35
+
36
+ s if created.year >= Time.new.year && created < dead_line
37
+ end
38
+ end
39
+
40
+ filtered_segments.each do |segment|
41
+ begin
42
+ if force
43
+ segment.clients.each do |segment_client|
44
+ GoodData.logger.info("Deleting segment: #{segment.id} - client: #{segment_client.client_id}")
45
+ segment_client.dissociate
46
+ end
47
+
48
+ puts "Deleting segment: #{segment.id}"
49
+ segment && segment.delete(force: true)
50
+ else
51
+ puts "Would delete segment: #{segment.id}"
52
+ end
53
+ rescue RuntimeError, StandardError => ex
54
+ puts "Failed to delete segment #{segment.id}, reason: #{ex}"
55
+ end
56
+ end
57
+ end
25
58
 
26
59
  def delete_project_by_title(title, projects, days = 14, force = false)
27
60
  dead_line = Time.now - days * 60 * 60 * 24
@@ -73,8 +106,16 @@ def delete_ads_by_title(title, client, days = 14, force = false)
73
106
  puts "#{deleted} ADS instances with title \"#{title}\" #{'would be ' unless force}deleted."
74
107
  end
75
108
 
76
- def clean_up!(client, force, days)
109
+ def clean_up!(client, force, days, opts = {})
77
110
  projects = client.projects
111
+
112
+ if opts[:domain_id]
113
+ domain = client.domain(opts[:domain_id])
114
+
115
+ # segments id format: {title}_{hostname}_{datetime}
116
+ delete_segment_by_title(/CAR_DEMO_PREMIUM/, domain.segments, days, force)
117
+ end
118
+
78
119
  delete_project_by_title(/Insurance Demo Master/, projects, days, force)
79
120
  delete_project_by_title(/Car Demo Master/, projects, days, force)
80
121
  delete_project_by_title(/Insurance Demo Workspace/, projects, days, force)
@@ -117,7 +158,8 @@ prod_client = init_client(username, password, "https://#{config[:prod_server]}")
117
158
 
118
159
  force = options[:force]
119
160
  days = options[:days] || 3
161
+
120
162
  clean_up!(dev_client, force, days)
121
- clean_up!(prod_client, force, days)
163
+ clean_up!(prod_client, force, days, {domain_id: default_domain})
122
164
 
123
165
  dev_client.disconnect
@@ -1,40 +1,40 @@
1
- IGvcUqcTKzKvWUTKZu1Y1zRjvE/7XSaYUBNyEXzt/KMR9u2UivSVlVN+tcvR
2
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- qFfMaQbv5UIblSRCgK/8jdncU/CwfhyAgUfGneVj10uT6e7nkqq77Q//Rk4x
20
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- RidZK61to+d0esurqvb9HhtoiHzA/S/32cKjTi40NL+iOdM56h3njUr1ZODy
29
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
40
- nQTzKqg=
1
+ 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
40
+ N/WeNcE=
@@ -13,6 +13,9 @@ services:
13
13
  - JRUBY_OPTS=-J-Xmx1g
14
14
  - GD_SPEC_PASSWORD
15
15
  - VCR_ON
16
+ - POSTGRES_DB=gooddata
17
+ - POSTGRES_USER=gooddata
18
+ - POSTGRES_PASSWORD=changeit
16
19
  volumes:
17
20
  - .:/src
18
21
  volumes_from:
data/gooddata.gemspec CHANGED
@@ -61,7 +61,11 @@ Gem::Specification.new do |s|
61
61
  end
62
62
 
63
63
  s.add_dependency 'aws-sdk-s3', '~> 1.16'
64
- s.add_dependency 'docile', '~> 1.1'
64
+ if RUBY_VERSION >= '2.5'
65
+ s.add_dependency 'docile', '~> 1.1'
66
+ else
67
+ s.add_dependency 'docile', '> 1.1', '< 1.4.0'
68
+ end
65
69
  s.add_dependency 'gli', '~> 2.15'
66
70
  s.add_dependency 'gooddata_datawarehouse', '~> 0.0.10' if RUBY_PLATFORM == 'java'
67
71
  s.add_dependency 'highline', '= 2.0.0.pre.develop.14'
data/lcm.rake CHANGED
@@ -3,7 +3,7 @@ require 'fileutils'
3
3
  require 'pathname'
4
4
  require 'rspec/core/rake_task'
5
5
 
6
- test_cases = %i[integration slow userprov load]
6
+ test_cases = %i[integration-e2e integration-release integration-others slow userprov load]
7
7
 
8
8
  # Schema for new Bricks.
9
9
  brick_info_schema = {
@@ -79,7 +79,7 @@ namespace :test do
79
79
  test_cases.each do |test_case|
80
80
  desc "Run #{test_case} tests"
81
81
  RSpec::Core::RakeTask.new(test_case) do |task|
82
- task.pattern = "spec/lcm/#{test_case}/**/*_spec.rb"
82
+ task.pattern = test_case['integration'] ? "spec/lcm/integration/spec/#{test_case.to_s.split('-')[-1]}/*_spec.rb" : "spec/lcm/#{test_case}/**/*_spec.rb"
83
83
  end
84
84
  end
85
85
 
@@ -101,8 +101,14 @@ namespace :test do
101
101
  test_cases.each do |t|
102
102
  desc "Run #{t} tests in Docker"
103
103
  task t do
104
- system("docker-compose -f docker-compose.lcm.yml run --rm appstore bundle exec rake -f lcm.rake test:#{t}") ||
105
- fail('Test execution failed!')
104
+ if t.to_s == 'integration'
105
+ system("docker-compose -f docker-compose.lcm.yml run --rm appstore /bin/bash -c ./spec/integration_with_postgresql.sh") ||
106
+ fail('Test execution failed!')
107
+ else
108
+ system("docker-compose -f docker-compose.lcm.yml run --rm appstore bundle exec rake -f lcm.rake test:#{t}") ||
109
+ fail('Test execution failed!')
110
+ end
111
+
106
112
  end
107
113
  end
108
114
  end
@@ -43,7 +43,7 @@ module GoodData
43
43
  RESULT_HEADER = [
44
44
  :id,
45
45
  :status,
46
- :originalProject,
46
+ :project,
47
47
  :client,
48
48
  :type
49
49
  ]
@@ -102,7 +102,13 @@ module GoodData
102
102
  options = { delete_projects: delete_projects }
103
103
  options.merge!(delete_extra_option(params, delete_extra)) if delete_extra
104
104
 
105
- domain.update_clients(params.clients, options)
105
+ results = domain.update_clients(params.clients, options)
106
+ # Update status to CREATED if the client has no project
107
+ results&.each do |r|
108
+ r[:status] = 'CREATED' if r[:originalProject].nil?
109
+ r[:project] = r[:originalProject]
110
+ end
111
+ results
106
112
  end
107
113
 
108
114
  private
@@ -48,7 +48,8 @@ module GoodData
48
48
  domain_name = params.organization || params.domain
49
49
  fail "Either organisation or domain has to be specified in params" unless domain_name
50
50
  domain = client.domain(domain_name) || fail("Invalid domain name specified - #{domain_name}")
51
-
51
+ error_message = nil
52
+ invalid_client_ids = []
52
53
  begin
53
54
  results = params.segments.map do |segment|
54
55
  segment_object = domain.segments(segment.segment_id, data_product)
@@ -57,33 +58,53 @@ module GoodData
57
58
  end
58
59
 
59
60
  unless tmp.empty?
60
- synchronize_projects << {
61
+ synchronize_project = {
61
62
  segment_id: segment.segment_id,
62
63
  from: segment.development_pid,
63
64
  to: tmp.map do |entry|
64
65
  unless entry[:project_uri]
65
- raise "Provisioning project for client id #{entry[:id]} has error: #{entry[:error]}"
66
+ error_message = "There was error during provisioning clients: #{entry[:error]}" unless error_message
67
+ invalid_client_ids << entry[:id]
68
+ next
66
69
  end
67
70
  {
68
71
  pid: entry[:project_uri].split('/').last,
69
72
  client_id: entry[:id]
70
73
  }
71
- end
74
+ end.compact
72
75
  }
76
+
77
+ synchronize_projects << synchronize_project unless synchronize_project[:to].empty?
78
+ end
79
+
80
+ if error_message
81
+ params.gdc_logger.debug "#{error_message}. Purge all invalid clients now ..."
82
+ deleted_client_ids = []
83
+
84
+ segment_object.clients.map do |segment_client|
85
+ project = segment_client.project
86
+ if (project.nil? || project.deleted?)
87
+ client_id = segment_client.client_id
88
+ if invalid_client_ids.include?(client_id)
89
+ segment_client.delete
90
+ deleted_client_ids << client_id
91
+ end
92
+ end
93
+ end
94
+
95
+ params.gdc_logger.debug "Deleted clients: #{deleted_client_ids.join(', ')}"
96
+ raise error_message unless error_message['TooManyProjectsCreatedException'] || error_message['Max number registered projects']
97
+ break tmp
73
98
  end
74
99
 
75
100
  tmp
76
101
  end
77
102
  rescue => e
78
- params.gdc_logger.error "Problem occurs when provisioning clients. Purge all invalid clients now ..."
79
- res = LCM2.run_action PurgeClients, params
80
- params.gdc_logger.debug "Purge clients result: #{res}"
81
- deleted_client_ids = res[:results].select { |r| r[:status] == 'purged' }.map { |r| r[:client_id] }
82
- params.gdc_logger.error "Deleted clients: #{deleted_client_ids.join(', ')}"
103
+ params.gdc_logger.error "Problem occurs when provisioning clients."
83
104
  raise e
84
105
  end
85
106
 
86
- results.flatten!
107
+ results.flatten! if results
87
108
 
88
109
  # Return results
89
110
  {
@@ -456,10 +456,12 @@ Available values for setting language are: #{available_languages}."
456
456
  alias_method :add_clients_settings, :update_clients_settings
457
457
 
458
458
  def update_clients(data, options = {})
459
+ results = []
459
460
  data.group_by(&:data_product_id).each do |data_product_id, client_update_data|
460
461
  data_product = data_products(data_product_id)
461
- data_product.update_clients(client_update_data, options)
462
+ results.concat data_product.update_clients(client_update_data, options)
462
463
  end
464
+ results
463
465
  end
464
466
 
465
467
  # Update user in domain
@@ -0,0 +1,49 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+ #
4
+ # Copyright (c) 2010-2021 GoodData Corporation. All rights reserved.
5
+ # This source code is licensed under the BSD-style license found in the
6
+ # LICENSE file in the root directory of this source tree.
7
+
8
+ require_relative 'analytical_visualization_object'
9
+
10
+ module GoodData
11
+ class AnalyticalDashboard < GoodData::AnalyticalVisualizationObject
12
+ EMPTY_OBJECT = {
13
+ 'analyticalDashboard' => {
14
+ 'content' => {
15
+ 'filterContext' => '',
16
+ 'layout' => {},
17
+ 'widgets' => []
18
+ },
19
+ 'meta' => {
20
+ 'deprecated' => '0',
21
+ 'summary' => '',
22
+ 'title' => ''
23
+ }
24
+ }
25
+ }
26
+
27
+ ASSIGNABLE_MEMBERS = %i[filterContext layout widgets deprecated summary title]
28
+
29
+ class << self
30
+ # Method intended to get all AnalyticalDashboard objects in a specified project
31
+ #
32
+ # @param options [Hash] the options hash
33
+ # @option options [Boolean] :full with true value will pull in full objects. Default is false value
34
+ # @return [Array<GoodData::AnalyticalDashboard>] Return AnalyticalDashboard list
35
+ def all(options = { :client => GoodData.connection, :project => GoodData.project })
36
+ query('analyticalDashboard', AnalyticalDashboard, options)
37
+ end
38
+
39
+ # Create Analytical Dashboard in the specify project
40
+ #
41
+ # @param analytical_dashboard [Hash] the data of object will be created
42
+ # @param options [Hash] The project that the object will be created in
43
+ # @return GoodData::AnalyticalDashboard object
44
+ def create(analytical_dashboard = {}, options = { :client => GoodData.client, :project => GoodData.project })
45
+ GoodData::AnalyticalVisualizationObject.create(analytical_dashboard, AnalyticalDashboard, EMPTY_OBJECT, ASSIGNABLE_MEMBERS, options)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+ #
4
+ # Copyright (c) 2010-2021 GoodData Corporation. All rights reserved.
5
+ # This source code is licensed under the BSD-style license found in the
6
+ # LICENSE file in the root directory of this source tree.
7
+
8
+ module GoodData
9
+ class AnalyticalVisualizationObject < GoodData::MdObject
10
+ class << self
11
+ # Create a specify object in the specify project
12
+ #
13
+ # @param object_data [Hash] the data of object will be created
14
+ # @param klass [Class] A class used for instantiating the returned data
15
+ # @param empty_data_object [Hash] the empty data of object will be created
16
+ # @param assignable_properties [Hash] the properties allow updating
17
+ # @param options [Hash] The project that the object will be created in
18
+ # @return klass object
19
+ def create(object_data, klass, empty_data_object = {}, assignable_properties = [], options = { :client => GoodData.client, :project => GoodData.project })
20
+ client, project = GoodData.get_client_and_project(GoodData::Helpers.symbolize_keys(options))
21
+
22
+ res = client.create(klass, GoodData::Helpers.deep_dup(GoodData::Helpers.stringify_keys(empty_data_object)), :project => project)
23
+ object_data.each do |k, v|
24
+ res.send("#{k}=", v) if assignable_properties.include? k
25
+ end
26
+ res
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,50 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+ #
4
+ # Copyright (c) 2010-2021 GoodData Corporation. All rights reserved.
5
+ # This source code is licensed under the BSD-style license found in the
6
+ # LICENSE file in the root directory of this source tree.
7
+
8
+ require_relative 'analytical_visualization_object'
9
+
10
+ module GoodData
11
+ class VisualizationObject < GoodData::AnalyticalVisualizationObject
12
+ EMPTY_OBJECT = {
13
+ 'visualizationObject' => {
14
+ 'content' => {
15
+ 'buckets' => [],
16
+ 'properties' => '',
17
+ 'visualizationClass' => {}
18
+ },
19
+ 'links' => {},
20
+ 'meta' => {
21
+ 'deprecated' => '0',
22
+ 'summary' => '',
23
+ 'title' => ''
24
+ }
25
+ }
26
+ }
27
+
28
+ ASSIGNABLE_MEMBERS = %i[buckets properties visualizationClass deprecated summary title]
29
+
30
+ class << self
31
+ # Method intended to get all VisualizationObject objects in a specified project
32
+ #
33
+ # @param options [Hash] the options hash
34
+ # @option options [Boolean] :full with true value to pull full objects
35
+ # @return [Array<GoodData::VisualizationObject>] Return VisualizationObject list
36
+ def all(options = { :client => GoodData.connection, :project => GoodData.project })
37
+ query('visualizationObject', VisualizationObject, options)
38
+ end
39
+
40
+ # Create Visualization Object in the specify project
41
+ #
42
+ # @param visualization_object [Hash] the data of object will be created
43
+ # @param options [Hash] The project that the object will be created in
44
+ # @return GoodData::VisualizationObject object
45
+ def create(visualization_object = {}, options = { :client => GoodData.client, :project => GoodData.project })
46
+ GoodData::AnalyticalVisualizationObject.create(visualization_object, VisualizationObject, EMPTY_OBJECT, ASSIGNABLE_MEMBERS, options)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -81,7 +81,7 @@ module GoodData
81
81
  %r{/gdc/internal/lcm/domains/[^\/]+/dataproducts/[^\/]+/segments/[^\/]+/syncProcesses}],
82
82
 
83
83
  ['/gdc/internal/projects/{id}/objects/setPermissions', %r{/gdc/internal/projects/[^\/]+/objects/setPermissions}],
84
-
84
+ ['/gdc/internal/projects/{id}/roles', %r{/gdc/internal/projects/[^\/]+/roles}],
85
85
  ['/gdc/md/{id}/variables/item/{id}', %r{/gdc/md/[^\/]+/variables/item/[\d]+}],
86
86
  ['/gdc/md/{id}/validate/task/{id}', %r{/gdc/md/[^\/]+/validate/task/[^\/]+}],
87
87
  ['/gdc/md/{id}/using2/{id}/{id}', %r{/gdc/md/[^\/]+/using2/[\d]+/[\d]+}],
@@ -1,51 +1,51 @@
1
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- REB3E5410PIM6MDZuhPILqV82p07rreLPFczUqErZGhq/bpKu1HNyByOePik
25
- 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
- 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
- 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
- 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
- oVXa8Xw/MeMVrR14+cheU09s5vWU3tQGFawJAypSAY94EqmApqnDzI/e6hcQ
30
- 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
- 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
- 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
- veUU3FvbFuEiX6SyS8LGzT9ecAvy7T9aeIwnGQZedHKLB52mg0BXY/QBtGyf
34
- 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
- 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
- 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
- Iha8YqnflReNh0q5LbklpR96WUuiri7PphAqCWZOlAmxqw/ueTxG4DPMtJOE
38
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- ukTi9NaBoIQfqejlj/L880MQYVWIfzrvIFCLmk+aERSgHaFMKD+Z5lsppdAC
46
- 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
- 5CjE3yXARb0C1Hwjkpjyc29oHBC6W8vRZUBOG0xzhVYZfVR6pcZvHdP5XTKj
48
- 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
- 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
- d0dFTK+FS328CIESa0ZUEIk6EL50mW0i9RJAi03Me26OgbW5egLixhVK4KC0
51
- Ci5CZG2Xf5mWx5mUGrK5ZNB3in/9jEzX3oQx8Jd6twfkQzMG0kA=
1
+ d+yw9kSXvVM9eqgc2x0uteC1/hPv85CVq9SFFbqtERE5MufwfK8P86ClYw5+
2
+ waTIxiLSLubHwmpwHSOJc/NNgSn3ykf1LPDDYMdy3w41nKVbhSuI9NDAO816
3
+ TIAUhhS/+nUhYSHBJoIs1N6Bs8VpsM2Hy1ZlfsLiejLW9DulZtAtQQ8OKlpX
4
+ 9JaXt6AbASakMRhag2uE68m+7OeIkxo1rYus2FNA63MmL2jBdfbSGgoqu44N
5
+ FD2d/hwPJW9Emjayfiw5BInX6UKmvLkM2wGB43KACqv28yZtzzcT4kamJMD+
6
+ jX8paBoJ8OvwQA+CklYqoBTmJkWPEcTFq5qMTD8fEk0a1poG8SzLvgp16cXr
7
+ zkwZf2J1fZO/4op0akY5cSSBe8PN9npNkCWx04wqKgsdMn2EtVH1fvkzDGKC
8
+ 3OkZVVsdHW8u8xVZHcuaoF12DEyF3Gxcz32phejsZFsSJ5KsYhmc5Q75bDZa
9
+ KvzIJdo40igOZ74UuZs57L9W+IGiWbJkOk7B+HGfFDQotuHYz70aeusAn2Fh
10
+ itPgGeZI4fCl5HFPCkVBrCpqytMNCXVhG4zATYO0kGJiHnvSe5sd5YkTZ4de
11
+ cpmbwjIgQus2nhr9ySUyw+KaZ/ZO2gvTFx/5ZjjmB1MVHlHmeqUvIhvofref
12
+ 6pmBLTMMnjkm83R2s4DIo8+rf7uBJA5OMkIp/1iOVgRllmaNSdQmqqkErPBG
13
+ J4vQRJ0/Le+EC6f8r697GgOLVxv56C969qcnd7c1RbjdB6Kwd9fSiXslwrp9
14
+ ulIHAFTPs0iTYYqm185ob6ywIxOl1YBNDFqlVjo0L85MhRyFwmRlPa36UiJY
15
+ BOyzLgYnybyNdmhAZH38aO2aL9qbLN8OJj25AdkCQu3Uoxqtszhf6SGX8g7G
16
+ 3aumn6RUg6Zo5ceGfEeLDyIEUepw8FKO90OwwkgRcExFQGBXHySd26I0dXBb
17
+ xrxdAmSDQWJQy5V99qeEan4v0LEonYnF+86FtAVDVS9R+LF7sXY5tPqb7w5s
18
+ Mr8rMAREsSx7qq0Zk2/gtfPuYZR5vEM8cYnbCvqKsWvgBNBHF1eYuP+jzL3A
19
+ u5+PfDUO6pw1RVRvMva6m/CYuL/X7tDfQ22v/kmU47oHZSRbpGZMz9Rdy0Bg
20
+ PKVaQ+L+oH90BNDGzRbbpJ2nhPXMUw3A7758JqgK/MTBQClJC2eDJaJLAyZk
21
+ zDSZ3gmbjjJw7gzq1HlrHHmhWEjlpBFOVF+Xx2mAqRNfoG1id3KFklbeK9ms
22
+ VEZqDMsb+6GYNWPIUo9vV8w2CCUd9jgIsaRgwv29Rk1quhsJCu8DMAi7+O1F
23
+ owEOfuZnFbF/t6Jo3nRfIGHFp3HSXvo6+5q4oQD6JJzUrTXK7rcgTjRXhtY1
24
+ RHBt5B1pXXIZ1veLPk+CBqyqbkXEHh0jItGWfuuZIOY7waCnNGf49Pu1Hmrj
25
+ S8ujwWp2ujli5dcDk3sPdpjf/jSZ/eteUsc6iH+pEjzhVM3Ip3csSvJuC7uK
26
+ mp/OpDjmt4s9Qr3KWO5U+12hQDLVv9ltRflncCWKfysEQDdHYUGHgAJMtH6e
27
+ LJGL2jKwIun9qwIhcxcBthSydLBQvZAXBDd6/lUYxyFR4Np7JbquG4dq03W+
28
+ gn9ZuH+RBCe/9/BDQUvZT+FrA1oL4pT06qzP6HuttU8hsaAo4xnArrtsexFj
29
+ qc62BKr51qa027MjWU8Y/HMiqDAV39XgsBohXEEkAyzLpdj2wseZ5GTAuNpX
30
+ pqIeaRXUrL+Xa870S8BfO1QaiBJywfKHFqbNqYiLwrzSrZjV8pT6jqT2wyw1
31
+ mDvZE1iACgD661Y5bU3mW1JEXdr9C0pgUrXCPKPd6G7VIjwUFwtYNMXncMFG
32
+ RhSetVKw8quFFJadeos6d/kqf/BspGEvmeWh9odxJJ5/LoQYNmd1ri111bXj
33
+ nPIFX+F1iuBiSJq6eTVPBlzbTxJFWVBG4dncG4WtJL74p1Duzqfho3WIGsnS
34
+ J0HkCmJMIIsSZGhVx1aQcKwg/AwjRpXmvZaCihzBDv/P334bJhlosMfFgbJL
35
+ k9ZuIDNkXuoudrefjMyP2jn28mCVaM5jpkBmczKeVV0S6JImVWOLoA4FKxfL
36
+ tSE0KwXhIeQQx5t8qh3UA+GfYu8aPn5RSOCOc4dQKovYIRhTgAkwVE35GOPt
37
+ ZPt2zX3bjIPlM52w3X/fEB9OuiGdHiAyV/vPxD4yoxa4BXTRqHex0/9NBEAx
38
+ u/a94uWetjnIT5/MPPz0wZ83wyiJMTMF8MOTmOprQ5txBiMGR5ZpsXgFp351
39
+ N525ye6sE6c627ihHqbZ01D7Qyk3iZ/9/kT0wGnocGXXuWdihtgZD16y3lIU
40
+ x+Kv40HbJnJqYL4K9bqv8NxzKEC380lBsjodUPkMDvfQA6HJ/jUrtmpX9T+t
41
+ 5RUca3xneS6W5kINg4ozB3tOD322wCo+RugIGLFfF/bW61IOsjS1U0hVYx/j
42
+ gJzQj246WoA0+aZXbZoiv0klxOsxkbEXEE9+BCWM7Xj/KLIVtdXNy8b8Cp6A
43
+ iCt6bTQEZP+CO06TevvP/ghLyB7Fx5SCZ3JFxmDrtyw2V0JJbbmpDyGmHSK8
44
+ UWxYUPWkeiDsIHfB68K2p/y4wxXtdTISPRbwB8aEgx+1L4arED8T49W2vi2M
45
+ Hr1h5S7ncHDYk4kfOoG2sbA6ZuFaRjBPbLxFwKsOXTA6NA3YZ3xBhlicdPSO
46
+ U3px15xPwXbvnWMo/5BeChtl574gHl3W8yuw0hePf45QitkUnqyvNxAKV4pT
47
+ cg1JeYZhspwuWOtCYiUFweAgBzSmIvWH6STKoVSEg4Iz2jtVX9txOHTMwf8p
48
+ YWlUhc/IFUMRI/MqMclAynuWp0ULEIIOYQZpRdnBRKioeCZM/HfImjbEHDzo
49
+ UVmGmm/mwd5g3QGXW6kFxG7bvx0z6+D54/AZOCY33OHZ7pSz7FqNKhjDc7qX
50
+ MKIyKEBy1qVA+MIVv24kZoRlVIedbl+V2Ck/D5iCrK2axPoYFO0e7NrG+w5j
51
+ gWys9lGvA1vSqpuvwlFHEMWnjTruMN83oLrJYay0VMab/PKz/eY=
@@ -1,109 +1,109 @@
1
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- viql9jG8g/163IlrzYck9PXZX+pzovncELPCVo5itGS1xC7eUaF3gB1WJWNA
9
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Wgv2FPstrNMcU2rhFY5YGgNStXOXS0Vmfe2gAaB3Ka3tkwtKu+C5yxc96hGm
56
- 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
- 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
- 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
- 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
- 6aqVoHls5YVWFre9bXFUQTnkH6Blc2/TqKvIjqm0fZULM9cZau+3I5ywrBiX
61
- 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
- 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
- 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
- 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
- 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
- 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
- pq7YayL84xp3jcp9vo8MvYp+kkLyI20BgAh50zZTbFhGQlmnAPiLOVZ0qlDc
68
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 2XYBmTimdSN/BN6kc3OvCdHPJoImWHZg8GR4nPCj8cvRAVKX0nAEfugm3Soy
81
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Ooac0D8R7IROvSbESEIPrPZPehSRk+zcoNWHtpHdbTn0kzLx1eDysqMBJVvR
96
- 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
- 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
- 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
- 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
- LUT44yZLCaMAgasqEWIwvScw7GZcYHcsUcDtmvrgmhFuqofJ4PVvBd77vKOo
101
- 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
- rpkFT7OGGfx0rXierUEP30p7dx2K6SNWZv/3v0kbBVPZdXgKpIMvLnYokMGM
103
- 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
- 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
- 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
- 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
- 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
- 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
109
- 5UICsw==
1
+ 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
109
+ j9/cqg==
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.1.17
4
+ version: 2.1.19
5
5
  platform: ruby
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: 2021-04-09 00:00:00.000000000 Z
17
+ date: 2021-05-21 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: license_finder
@@ -320,16 +320,22 @@ dependencies:
320
320
  name: docile
321
321
  requirement: !ruby/object:Gem::Requirement
322
322
  requirements:
323
- - - "~>"
323
+ - - ">"
324
324
  - !ruby/object:Gem::Version
325
325
  version: '1.1'
326
+ - - "<"
327
+ - !ruby/object:Gem::Version
328
+ version: 1.4.0
326
329
  type: :runtime
327
330
  prerelease: false
328
331
  version_requirements: !ruby/object:Gem::Requirement
329
332
  requirements:
330
- - - "~>"
333
+ - - ">"
331
334
  - !ruby/object:Gem::Version
332
335
  version: '1.1'
336
+ - - "<"
337
+ - !ruby/object:Gem::Version
338
+ version: 1.4.0
333
339
  - !ruby/object:Gem::Dependency
334
340
  name: gli
335
341
  requirement: !ruby/object:Gem::Requirement
@@ -920,6 +926,8 @@ files:
920
926
  - lib/gooddata/models/links.rb
921
927
  - lib/gooddata/models/membership.rb
922
928
  - lib/gooddata/models/metadata.rb
929
+ - lib/gooddata/models/metadata/analytical_dashboard.rb
930
+ - lib/gooddata/models/metadata/analytical_visualization_object.rb
923
931
  - lib/gooddata/models/metadata/attribute.rb
924
932
  - lib/gooddata/models/metadata/dashboard.rb
925
933
  - lib/gooddata/models/metadata/dashboard/dashboard_item.rb
@@ -944,6 +952,7 @@ files:
944
952
  - lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb
945
953
  - lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb
946
954
  - lib/gooddata/models/metadata/variable.rb
955
+ - lib/gooddata/models/metadata/visualization_object.rb
947
956
  - lib/gooddata/models/model.rb
948
957
  - lib/gooddata/models/models.rb
949
958
  - lib/gooddata/models/module_constants.rb