gooddata 1.3.3 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +129 -67
  3. data/CHANGELOG.md +31 -0
  4. data/CONTRIBUTING.md +16 -5
  5. data/Dockerfile +4 -4
  6. data/Dockerfile.jruby +0 -2
  7. data/README.md +1 -1
  8. data/SDK_VERSION +1 -0
  9. data/VERSION +1 -1
  10. data/bin/run_brick.rb +14 -3
  11. data/docker-compose.yml +1 -0
  12. data/gooddata.gemspec +6 -4
  13. data/lcm.rake +13 -25
  14. data/lib/gooddata.rb +4 -0
  15. data/lib/gooddata/bricks/middleware/aws_middleware.rb +1 -1
  16. data/lib/gooddata/bricks/middleware/bench_middleware.rb +3 -3
  17. data/lib/gooddata/bricks/middleware/dwh_middleware.rb +1 -1
  18. data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +1 -1
  19. data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +1 -1
  20. data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +4 -8
  21. data/lib/gooddata/bricks/middleware/logger_middleware.rb +11 -2
  22. data/lib/gooddata/bricks/middleware/mask_logger_decorator.rb +38 -0
  23. data/lib/gooddata/cli/cli.rb +0 -1
  24. data/lib/gooddata/cli/commands/domain_cmd.rb +0 -1
  25. data/lib/gooddata/cli/commands/project_cmd.rb +0 -1
  26. data/lib/gooddata/cli/hooks.rb +0 -1
  27. data/lib/gooddata/connection.rb +1 -1
  28. data/lib/gooddata/extensions/object.rb +0 -4
  29. data/lib/gooddata/helpers/global_helpers.rb +3 -3
  30. data/lib/gooddata/lcm/actions/hello_world.rb +1 -1
  31. data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +6 -4
  32. data/lib/gooddata/lcm/actions/synchronize_users.rb +38 -75
  33. data/lib/gooddata/lcm/brick_logger.rb +6 -6
  34. data/lib/gooddata/lcm/dsl/dsl.rb +0 -7
  35. data/lib/gooddata/lcm/lcm.rb +6 -6
  36. data/lib/gooddata/lcm/lcm2.rb +7 -23
  37. data/lib/gooddata/mixins/inspector.rb +0 -1
  38. data/lib/gooddata/models/process.rb +9 -5
  39. data/lib/gooddata/models/project.rb +13 -16
  40. data/lib/gooddata/models/project_creator.rb +2 -2
  41. data/lib/gooddata/models/schedule.rb +5 -2
  42. data/lib/gooddata/models/user_filters/user_filter_builder.rb +2 -0
  43. data/lib/gooddata/rest/client.rb +3 -3
  44. data/lib/gooddata/rest/connection.rb +3 -3
  45. data/lib/gooddata/version.rb +12 -2
  46. metadata +29 -35
@@ -9,18 +9,18 @@ module GoodData
9
9
  class BrickFileLogger
10
10
  # entry-point
11
11
  # @param [String] log_directory directory to create log files
12
- # @param [String] mode - brick mode (short name if brick)
13
- def initialize(log_directory, mode)
12
+ # @param [String] log_file - file to log
13
+ def initialize(log_directory, log_file)
14
14
  @log_directory = log_directory
15
- @mode = mode
15
+ @log_file = log_file
16
16
  end
17
17
 
18
18
  # Creates file in log directory with given content. Logging is disabled when log_directory is nil.
19
19
  #
20
- # @param [String] status brick phase/status (start, finished, error,...)
21
20
  # @param [String] content log file content
22
- def log_action(status, content)
23
- File.write("#{@log_directory}/#{@mode}_#{status}.json", content)
21
+ def log_action(content)
22
+ FileUtils.mkpath @log_directory
23
+ File.open("#{@log_directory}/#{@log_file}", 'a') { |file| file.write(content + "\n") }
24
24
  end
25
25
  end
26
26
  end
@@ -27,13 +27,6 @@ module GoodData
27
27
  dsl = type.new
28
28
  dsl.instance_eval(&block)
29
29
 
30
- # puts "#{caption}: #{klass.name}"
31
- # puts JSON.pretty_generate(dsl.params)
32
- # puts
33
-
34
- # yield if block_given?
35
-
36
- # Return params
37
30
  dsl.params
38
31
  end
39
32
 
@@ -30,10 +30,10 @@ module GoodData
30
30
  def transfer_everything(client, domain, migration_spec, opts = {})
31
31
  filter_on_segment = migration_spec[:segments] || migration_spec['segments'] || []
32
32
 
33
- puts 'Ensuring Users - warning: works across whole domain not just provided segment(s)'
33
+ GoodData.logger.info('Ensuring Users - warning: works across whole domain not just provided segment(s)')
34
34
  ensure_users(domain, migration_spec, filter_on_segment)
35
35
 
36
- puts 'Migrating Blueprints'
36
+ GoodData.logger.info('Migrating Blueprints')
37
37
 
38
38
  bp_opts = {
39
39
  update_preference: opts[:update_preference] || opts['update_preference'],
@@ -89,7 +89,7 @@ module GoodData
89
89
  # GoodData::LCM.transfer_meta(segment.master_project, target_projects)
90
90
  end
91
91
 
92
- puts 'Migrating Processes and Schedules'
92
+ GoodData.logger.info('Migrating Processes and Schedules')
93
93
 
94
94
  deployment_client = migration_spec.key?(:user_for_deployment) ? GoodData.connect(migration_spec[:user_for_deployment]) : client
95
95
  domain.clients.peach do |c|
@@ -126,7 +126,7 @@ module GoodData
126
126
  begin
127
127
  GoodData::LCM.transfer_label_types(segment_master, project)
128
128
  rescue => e
129
- puts "Unable to transfer label_types, reason: #{e.message}"
129
+ GoodData.logger.error("Unable to transfer label_types, reason: #{e.message}")
130
130
  end
131
131
 
132
132
  # Transfer tagged objects
@@ -137,7 +137,7 @@ module GoodData
137
137
 
138
138
  do_not_synchronize_clients = migration_spec[:do_not_synchronize_clients]
139
139
  if do_not_synchronize_clients.nil? || !do_not_synchronize_clients
140
- puts 'Migrating Dashboards'
140
+ GoodData.logger.info('Migrating Dashboards')
141
141
  if filter_on_segment.empty?
142
142
  domain.synchronize_clients
143
143
  else
@@ -148,7 +148,7 @@ module GoodData
148
148
  end
149
149
 
150
150
  # User groups must be migrated after dashboards
151
- puts 'Migrating User Groups'
151
+ GoodData.logger.info('Migrating User Groups')
152
152
  domain.clients.peach do |c|
153
153
  segment = c.segment
154
154
  segment_master = segment.master_project
@@ -16,7 +16,6 @@ require 'gooddata/extensions/nil'
16
16
  require 'active_support/core_ext/hash/compact'
17
17
 
18
18
  require_relative 'actions/actions'
19
- require_relative 'brick_logger'
20
19
  require_relative 'dsl/dsl'
21
20
  require_relative 'helpers/helpers'
22
21
 
@@ -218,7 +217,7 @@ module GoodData
218
217
  t.add_separator if index < rows.length - 1
219
218
  end
220
219
  end
221
- puts "\n#{table}"
220
+ GoodData.logger.info("\n#{table}")
222
221
  end
223
222
 
224
223
  def print_action_result(action, messages)
@@ -255,13 +254,13 @@ module GoodData
255
254
  end
256
255
  end
257
256
 
258
- puts "\n#{table}"
257
+ GoodData.logger.info("\n#{table}")
259
258
  end
260
259
 
261
260
  def print_actions_result(actions, results)
262
261
  actions.each_with_index do |action, index|
263
262
  print_action_result(action, results[index])
264
- puts
263
+ GoodData.logger.info
265
264
  end
266
265
  nil
267
266
  end
@@ -272,15 +271,6 @@ module GoodData
272
271
  # Get actions for mode specified
273
272
  actions = get_mode_actions(mode)
274
273
 
275
- if params.key?('log_directory')
276
- brick_logger = BrickFileLogger.new(params['log_directory'], mode)
277
- logging_enabled = true
278
- else
279
- logging_enabled = false
280
- end
281
- if logging_enabled
282
- brick_logger.log_action('start', JSON.pretty_generate(params))
283
- end
284
274
  if params.actions
285
275
  actions = params.actions.map do |action|
286
276
  "GoodData::LCM2::#{action}".split('::').inject(Object) do |o, c|
@@ -319,8 +309,7 @@ module GoodData
319
309
  errors = []
320
310
  results = []
321
311
  actions.each do |action|
322
- puts
323
-
312
+ GoodData.logger.info("\n")
324
313
  # Invoke action
325
314
  begin
326
315
  out = run_action action, params
@@ -346,7 +335,6 @@ module GoodData
346
335
  params.merge!(new_params)
347
336
 
348
337
  # Print action result
349
- puts
350
338
  print_action_result(action, res)
351
339
 
352
340
  # Store result for final summary
@@ -365,15 +353,11 @@ module GoodData
365
353
  success: errors.empty?
366
354
  }
367
355
 
356
+ has_errors = errors.any?
368
357
  # Fail whole execution if there is any failed action
369
- fail(JSON.pretty_generate(errors)) if strict_mode && errors.any?
358
+ fail(JSON.pretty_generate(errors)) if strict_mode && has_errors
370
359
 
371
360
  result
372
-
373
- ensure
374
- if logging_enabled
375
- brick_logger.log_action('finished', JSON.pretty_generate(result))
376
- end
377
361
  end
378
362
 
379
363
  def run_action(action, params)
@@ -420,7 +404,7 @@ module GoodData
420
404
  end
421
405
 
422
406
  table = Terminal::Table.new :headings => ['Action', 'Parameter', 'Description', 'Parameter Type'], :rows => rows
423
- puts table.to_s
407
+ GoodData.logger.info("\n#{table}")
424
408
  end
425
409
  end
426
410
  end
@@ -36,7 +36,6 @@ module GoodData
36
36
  end
37
37
 
38
38
  def self.included(source)
39
- # $stdout.puts "Overriding inspect on #{source}"
40
39
  inspected << source
41
40
  source.class_eval do
42
41
  def self.inspector(*fields)
@@ -68,7 +68,7 @@ module GoodData
68
68
  res = GoodData::Process.deploy(dir, options.merge(:files_to_exclude => params))
69
69
  block.call(res)
70
70
  rescue => e
71
- puts e.inspect
71
+ GoodData.logger.error(e.inspect)
72
72
  ensure
73
73
  res.delete if res
74
74
  end
@@ -114,7 +114,7 @@ module GoodData
114
114
  fail ArgumentError, 'options[:name] can not be nil or empty!' if deploy_name.nil? || deploy_name.empty?
115
115
 
116
116
  verbose = options[:verbose] || false
117
- puts HighLine.color("Deploying #{path}", HighLine::BOLD) if verbose
117
+ GoodData.logger.info("Deploying #{path}") if verbose
118
118
 
119
119
  deployed_path = Process.upload_package(path, files_to_exclude, client: client, project: project)
120
120
  data = {
@@ -171,7 +171,7 @@ module GoodData
171
171
  fail ArgumentError, 'options[:name] can not be nil or empty!' if deploy_name.nil? || deploy_name.empty?
172
172
 
173
173
  verbose = options[:verbose] || false
174
- puts HighLine.color("Deploying #{path}", HighLine::BOLD) if verbose
174
+ GoodData.logger.info("Deploying #{path}") if verbose
175
175
 
176
176
  data = {
177
177
  process: {
@@ -233,7 +233,7 @@ module GoodData
233
233
 
234
234
  def zip_and_upload(path, files_to_exclude, opts = {})
235
235
  client = opts[:client]
236
- puts 'Creating package for upload'
236
+ GoodData.logger.info('Creating package for upload')
237
237
  if !path.directory? && (path.extname == '.grf' || path.extname == '.rb')
238
238
  with_zip(opts) do |zipfile|
239
239
  zipfile.add(File.basename(path), path)
@@ -248,7 +248,7 @@ module GoodData
248
248
  else
249
249
  with_zip(opts) do |zipfile|
250
250
  files_to_upload = Dir[File.join(path, '**', '**')].reject { |f| files_to_exclude.include?(Pathname(path) + f) }
251
- puts "Uploading #{files_to_upload.count} files."
251
+ GoodData.logger.info("Uploading #{files_to_upload.count} files.")
252
252
  files_to_upload.each do |file|
253
253
  file_pathname = Pathname.new(file)
254
254
  file_relative_pathname = file_pathname.relative_path_from(Pathname.new(path))
@@ -341,6 +341,10 @@ module GoodData
341
341
  project.schedules.select { |schedule| schedule.process_id == obj_id }
342
342
  end
343
343
 
344
+ def create_manual_schedule(options = {})
345
+ create_schedule(nil, nil, options)
346
+ end
347
+
344
348
  def create_schedule(cron, executable, options = {})
345
349
  project.create_schedule(process_id, cron, executable, options.merge(client: client, project: project))
346
350
  end
@@ -483,12 +483,12 @@ module GoodData
483
483
  end
484
484
 
485
485
  def transfer_tagged_stuff(from_project, to_project, tag)
486
- puts "Transferring tagged stuff - #{tag}"
486
+ GoodData.logger.info("Transferring tagged stuff - #{tag}")
487
487
 
488
488
  objects = from_project.find_by_tag(tag)
489
489
 
490
490
  if objects.any?
491
- puts JSON.pretty_generate(objects)
491
+ GoodData.logger.info("\n#{JSON.pretty_generate(objects)}")
492
492
  from_project.partial_md_export(objects, project: to_project)
493
493
  else
494
494
  GoodData.logger.info('No tagged objects to transfer')
@@ -1044,7 +1044,7 @@ module GoodData
1044
1044
  #
1045
1045
  # TODO: Return invite object
1046
1046
  def invite(email, role, msg = DEFAULT_INVITE_MESSAGE)
1047
- puts "Inviting #{email}, role: #{role}"
1047
+ GoodData.logger.info("Inviting #{email}, role: #{role}")
1048
1048
 
1049
1049
  role_url = nil
1050
1050
  if role.index('/gdc/').nil?
@@ -1302,19 +1302,16 @@ module GoodData
1302
1302
  results = blueprint.datasets.pmap do |ds|
1303
1303
  [ds, ds.count(self)]
1304
1304
  end
1305
- puts title
1306
- puts GoodData::Helpers.underline(title)
1307
- puts
1308
- puts "Datasets - #{results.count}"
1309
- puts
1305
+ GoodData.logger.info(title)
1306
+ GoodData.logger.info(GoodData::Helpers.underline(title))
1307
+ GoodData.logger.info("\nDatasets - #{results.count}\n")
1310
1308
  results.each do |x|
1311
1309
  dataset, count = x
1312
1310
  dataset.title.tap do |t|
1313
- puts t
1314
- puts GoodData::Helpers.underline(t)
1315
- puts "Size - #{count} rows"
1316
- puts "#{dataset.attributes_and_anchors.count} attributes, #{dataset.facts.count} facts, #{dataset.references.count} references"
1317
- puts
1311
+ GoodData.logger.info(t)
1312
+ GoodData.logger.info(GoodData::Helpers.underline(t))
1313
+ GoodData.logger.info("Size - #{count} rows")
1314
+ GoodData.logger.info("#{dataset.attributes_and_anchors.count} attributes, #{dataset.facts.count} facts, #{dataset.references.count} references\n")
1318
1315
  end
1319
1316
  end
1320
1317
  nil
@@ -1357,7 +1354,7 @@ module GoodData
1357
1354
  metrics: metrics,
1358
1355
  report_definitions: rds
1359
1356
  }.each do |key, collection|
1360
- puts "Replacing #{key}"
1357
+ GoodData.logger.info("Replacing #{key}")
1361
1358
  collection.peach do |item|
1362
1359
  new_item = item.replace(mapping)
1363
1360
  if new_item.json != item.json
@@ -1375,7 +1372,7 @@ module GoodData
1375
1372
 
1376
1373
  GoodData.logger.info 'Replacing hidden metrics'
1377
1374
  local_metrics = mapping.map { |a, _| a }.pmapcat { |a| a.usedby('metric') }.select { |m| m['deprecated'] == '1' }.map { |m| m['link'] }.uniq
1378
- puts "Found #{local_metrics.count} metrics"
1375
+ GoodData.logger.info("Found #{local_metrics.count} metrics")
1379
1376
  local_metrics.pmap { |m| metrics(m) }.peach do |item|
1380
1377
  new_item = item.replace(mapping)
1381
1378
  if new_item.json != item.json
@@ -1392,7 +1389,7 @@ module GoodData
1392
1389
 
1393
1390
  GoodData.logger.info 'Replacing dashboard saved views'
1394
1391
  contexts = mapping.map { |a, _| a }.pmapcat { |a| a.usedby('executionContext') }.map { |a| GoodData::MdObject[a['link'], client: client, project: self] }
1395
- puts "Found #{contexts.count} dashboard saved views"
1392
+ GoodData.logger.info("Found #{contexts.count} dashboard saved views")
1396
1393
  contexts.peach do |item|
1397
1394
  new_item = GoodData::MdObject.replace_quoted(item, mapping)
1398
1395
  if new_item.json != item.json
@@ -75,7 +75,7 @@ module GoodData
75
75
  project.execute_maql(chunk)
76
76
  end
77
77
  rescue => e
78
- puts "Error occured when executing MAQL, project: \"#{project.title}\" reason: \"#{e.message}\", chunks: #{replaced_maql_chunks.inspect}"
78
+ GoodData.logger.error("Error occured when executing MAQL, project: \"#{project.title}\" reason: \"#{e.message}\", chunks: #{replaced_maql_chunks.inspect}")
79
79
  errors << e
80
80
  next
81
81
  end
@@ -85,7 +85,7 @@ module GoodData
85
85
  begin
86
86
  ca_chunks.each { |chunk| project.execute_maql(chunk) }
87
87
  rescue => e
88
- puts "Error occured when executing MAQL, project: \"#{project.title}\" reason: \"#{e.message}\", chunks: #{ca_chunks.inspect}"
88
+ GoodData.logger.error("Error occured when executing MAQL, project: \"#{project.title}\" reason: \"#{e.message}\", chunks: #{ca_chunks.inspect}")
89
89
  errors << e
90
90
  end
91
91
  end
@@ -67,7 +67,8 @@ module GoodData
67
67
 
68
68
  fail 'Process ID has to be provided' if process_id.blank?
69
69
 
70
- is_dataload_process = Process[process_id, project: project, client: c].type == :dataload
70
+ process = Process[process_id, project: project, client: c]
71
+ is_dataload_process = process.type == :dataload
71
72
 
72
73
  if is_dataload_process
73
74
  dataload_datasets = options[:dataload_datasets] || options['GDC_DATALOAD_DATASETS']
@@ -75,7 +76,9 @@ module GoodData
75
76
 
76
77
  de_synchronize_all = options[:de_synchronize_all] || options['GDC_DE_SYNCHRONIZE_ALL']
77
78
  else
78
- fail 'Executable has to be provided' if executable.blank?
79
+ lcm_component = process.type == :lcm
80
+ executable_missing = !lcm_component && executable.blank?
81
+ fail 'Executable has to be provided' if executable_missing
79
82
  end
80
83
 
81
84
  schedule = c.create(GoodData::Schedule, GoodData::Helpers.stringify_keys(GoodData::Helpers.deep_dup(SCHEDULE_TEMPLATE)), client: c, project: project)
@@ -209,6 +209,8 @@ module GoodData
209
209
 
210
210
  # Creates a MAQL expression(s) based on the filter defintion.
211
211
  # Takes the filter definition looks up any necessary values and provides API executable MAQL
212
+ # @param labels_cache e.g. { 'label_uri': label_object }
213
+ # @param lookups_cache e.g. { 'label_uri': { "jirka@gooddata.com": 'value_uri' }}
212
214
  def self.create_expression(filter, labels_cache, lookups_cache, attr_cache, options = {})
213
215
  values = filter[:values]
214
216
  label = labels_cache[filter[:label]]
@@ -194,8 +194,8 @@ module GoodData
194
194
 
195
195
  def disconnect
196
196
  if stats_on?
197
- puts "API call statistics to server #{@connection.server}"
198
- puts @connection.stats_table
197
+ GoodData.logger.info("API call statistics to server #{@connection.server}")
198
+ GoodData.logger.info(@connection.stats_table)
199
199
  end
200
200
  @connection.disconnect
201
201
  end
@@ -221,7 +221,7 @@ module GoodData
221
221
 
222
222
  # Gets resource by name
223
223
  def resource(res_name)
224
- puts "Getting resource '#{res_name}'"
224
+ GoodData.logger.info("Getting resource '#{res_name}'")
225
225
  nil
226
226
  end
227
227
 
@@ -175,13 +175,13 @@ module GoodData
175
175
  merge_headers!(headers)
176
176
  get('/gdc/account/token', @request_params)
177
177
 
178
- @user = get(get('/gdc/app/account/bootstrap')['bootstrapResource']['accountSetting']['links']['self'])
178
+ @user = get('/gdc/account/profile/current')
179
179
  GoodData.logger.info("Connected using SST to server #{@server.url} to profile \"#{@user['accountSetting']['login']}\"")
180
180
  @auth = {}
181
181
  refresh_token :dont_reauth => true
182
182
  elsif options[:headers][:x_gdc_authsst]
183
183
  @request_params = options[:headers]
184
- @user = get('/gdc/app/account/bootstrap')['bootstrapResource']
184
+ @user = get('/gdc/account/profile/current')
185
185
  GoodData.logger.info("Connected using SST to server #{@server.url} to profile \"#{@user['accountSetting']['login']}\"")
186
186
  @auth = {}
187
187
  refresh_token :dont_reauth => true
@@ -293,7 +293,7 @@ module GoodData
293
293
  # Remove when TT sent in headers. Currently we need to parse from body
294
294
  merge_headers!(:x_gdc_authtt => GoodData::Helpers.get_path(response, %w(userToken token)))
295
295
  rescue Exception => e # rubocop:disable RescueException
296
- puts e.message
296
+ GoodData.logger.error(e.message)
297
297
  raise e
298
298
  end
299
299
  end
@@ -6,14 +6,24 @@
6
6
 
7
7
  # GoodData Module
8
8
  module GoodData
9
- VERSION = '1.3.3'
9
+ VERSION = File.read('SDK_VERSION')
10
+ BRICKS_VERSION = File.read('VERSION')
10
11
 
11
12
  class << self
12
- # Version
13
+ # SDK version
14
+ # @return SDK version
13
15
  def version
14
16
  VERSION
15
17
  end
16
18
 
19
+ alias_method :sdk_version, :version
20
+
21
+ # LCM bricks version
22
+ # @return brick version
23
+ def bricks_version
24
+ BRICKS_VERSION
25
+ end
26
+
17
27
  # Identifier of gem version
18
28
  # @return Formatted gem version
19
29
  def gem_version_string
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: 1.3.3
4
+ version: 1.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Kolesnikov
@@ -14,22 +14,8 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2018-11-23 00:00:00.000000000 Z
17
+ date: 2019-01-16 00:00:00.000000000 Z
18
18
  dependencies:
19
- - !ruby/object:Gem::Dependency
20
- name: bundler
21
- requirement: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: '1.14'
26
- type: :development
27
- prerelease: false
28
- version_requirements: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: '1.14'
33
19
  - !ruby/object:Gem::Dependency
34
20
  name: license_finder
35
21
  requirement: !ruby/object:Gem::Requirement
@@ -78,14 +64,14 @@ dependencies:
78
64
  requirements:
79
65
  - - "~>"
80
66
  - !ruby/object:Gem::Version
81
- version: '3.5'
67
+ version: 3.5.0
82
68
  type: :development
83
69
  prerelease: false
84
70
  version_requirements: !ruby/object:Gem::Requirement
85
71
  requirements:
86
72
  - - "~>"
87
73
  - !ruby/object:Gem::Version
88
- version: '3.5'
74
+ version: 3.5.0
89
75
  - !ruby/object:Gem::Dependency
90
76
  name: rspec-expectations
91
77
  requirement: !ruby/object:Gem::Requirement
@@ -184,20 +170,6 @@ dependencies:
184
170
  - - "~>"
185
171
  - !ruby/object:Gem::Version
186
172
  version: '0.1'
187
- - !ruby/object:Gem::Dependency
188
- name: ZenTest
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - "~>"
192
- - !ruby/object:Gem::Version
193
- version: '4.11'
194
- type: :development
195
- prerelease: false
196
- version_requirements: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - "~>"
199
- - !ruby/object:Gem::Version
200
- version: '4.11'
201
173
  - !ruby/object:Gem::Dependency
202
174
  name: pry
203
175
  requirement: !ruby/object:Gem::Requirement
@@ -296,20 +268,40 @@ dependencies:
296
268
  - - ">="
297
269
  - !ruby/object:Gem::Version
298
270
  version: '0'
271
+ - !ruby/object:Gem::Dependency
272
+ name: sqlite3
273
+ requirement: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - ">="
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - ">="
283
+ - !ruby/object:Gem::Version
284
+ version: '0'
299
285
  - !ruby/object:Gem::Dependency
300
286
  name: activesupport
301
287
  requirement: !ruby/object:Gem::Requirement
302
288
  requirements:
303
- - - "~>"
289
+ - - ">"
304
290
  - !ruby/object:Gem::Version
305
291
  version: 4.2.9
292
+ - - "<"
293
+ - !ruby/object:Gem::Version
294
+ version: '5.2'
306
295
  type: :runtime
307
296
  prerelease: false
308
297
  version_requirements: !ruby/object:Gem::Requirement
309
298
  requirements:
310
- - - "~>"
299
+ - - ">"
311
300
  - !ruby/object:Gem::Version
312
301
  version: 4.2.9
302
+ - - "<"
303
+ - !ruby/object:Gem::Version
304
+ version: '5.2'
313
305
  - !ruby/object:Gem::Dependency
314
306
  name: aws-sdk-s3
315
307
  requirement: !ruby/object:Gem::Requirement
@@ -599,6 +591,7 @@ files:
599
591
  - README.md
600
592
  - RELEASING.md
601
593
  - Rakefile
594
+ - SDK_VERSION
602
595
  - TODO.md
603
596
  - VERSION
604
597
  - authors.sh
@@ -641,6 +634,7 @@ files:
641
634
  - lib/gooddata/bricks/middleware/fs_upload_middleware.rb
642
635
  - lib/gooddata/bricks/middleware/gooddata_middleware.rb
643
636
  - lib/gooddata/bricks/middleware/logger_middleware.rb
637
+ - lib/gooddata/bricks/middleware/mask_logger_decorator.rb
644
638
  - lib/gooddata/bricks/middleware/middleware.rb
645
639
  - lib/gooddata/bricks/middleware/restforce_middleware.rb
646
640
  - lib/gooddata/bricks/middleware/stdout_middleware.rb
@@ -971,7 +965,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
971
965
  version: '0'
972
966
  requirements: []
973
967
  rubyforge_project:
974
- rubygems_version: 2.7.4
968
+ rubygems_version: 2.6.11
975
969
  signing_key:
976
970
  specification_version: 4
977
971
  summary: A convenient Ruby wrapper around the GoodData RESTful API