gooddata 1.3.3 → 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +129 -67
- data/CHANGELOG.md +31 -0
- data/CONTRIBUTING.md +16 -5
- data/Dockerfile +4 -4
- data/Dockerfile.jruby +0 -2
- data/README.md +1 -1
- data/SDK_VERSION +1 -0
- data/VERSION +1 -1
- data/bin/run_brick.rb +14 -3
- data/docker-compose.yml +1 -0
- data/gooddata.gemspec +6 -4
- data/lcm.rake +13 -25
- data/lib/gooddata.rb +4 -0
- data/lib/gooddata/bricks/middleware/aws_middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/bench_middleware.rb +3 -3
- data/lib/gooddata/bricks/middleware/dwh_middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +4 -8
- data/lib/gooddata/bricks/middleware/logger_middleware.rb +11 -2
- data/lib/gooddata/bricks/middleware/mask_logger_decorator.rb +38 -0
- data/lib/gooddata/cli/cli.rb +0 -1
- data/lib/gooddata/cli/commands/domain_cmd.rb +0 -1
- data/lib/gooddata/cli/commands/project_cmd.rb +0 -1
- data/lib/gooddata/cli/hooks.rb +0 -1
- data/lib/gooddata/connection.rb +1 -1
- data/lib/gooddata/extensions/object.rb +0 -4
- data/lib/gooddata/helpers/global_helpers.rb +3 -3
- data/lib/gooddata/lcm/actions/hello_world.rb +1 -1
- data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +6 -4
- data/lib/gooddata/lcm/actions/synchronize_users.rb +38 -75
- data/lib/gooddata/lcm/brick_logger.rb +6 -6
- data/lib/gooddata/lcm/dsl/dsl.rb +0 -7
- data/lib/gooddata/lcm/lcm.rb +6 -6
- data/lib/gooddata/lcm/lcm2.rb +7 -23
- data/lib/gooddata/mixins/inspector.rb +0 -1
- data/lib/gooddata/models/process.rb +9 -5
- data/lib/gooddata/models/project.rb +13 -16
- data/lib/gooddata/models/project_creator.rb +2 -2
- data/lib/gooddata/models/schedule.rb +5 -2
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +2 -0
- data/lib/gooddata/rest/client.rb +3 -3
- data/lib/gooddata/rest/connection.rb +3 -3
- data/lib/gooddata/version.rb +12 -2
- 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]
|
13
|
-
def initialize(log_directory,
|
12
|
+
# @param [String] log_file - file to log
|
13
|
+
def initialize(log_directory, log_file)
|
14
14
|
@log_directory = log_directory
|
15
|
-
@
|
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(
|
23
|
-
|
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
|
data/lib/gooddata/lcm/dsl/dsl.rb
CHANGED
data/lib/gooddata/lcm/lcm.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
data/lib/gooddata/lcm/lcm2.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 &&
|
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
|
-
|
407
|
+
GoodData.logger.info("\n#{table}")
|
424
408
|
end
|
425
409
|
end
|
426
410
|
end
|
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
1306
|
-
|
1307
|
-
|
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
|
-
|
1314
|
-
|
1315
|
-
|
1316
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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]]
|
data/lib/gooddata/rest/client.rb
CHANGED
@@ -194,8 +194,8 @@ module GoodData
|
|
194
194
|
|
195
195
|
def disconnect
|
196
196
|
if stats_on?
|
197
|
-
|
198
|
-
|
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
|
-
|
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(
|
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/
|
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
|
-
|
296
|
+
GoodData.logger.error(e.message)
|
297
297
|
raise e
|
298
298
|
end
|
299
299
|
end
|
data/lib/gooddata/version.rb
CHANGED
@@ -6,14 +6,24 @@
|
|
6
6
|
|
7
7
|
# GoodData Module
|
8
8
|
module GoodData
|
9
|
-
VERSION =
|
9
|
+
VERSION = File.read('SDK_VERSION')
|
10
|
+
BRICKS_VERSION = File.read('VERSION')
|
10
11
|
|
11
12
|
class << self
|
12
|
-
#
|
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.
|
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:
|
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:
|
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:
|
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.
|
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
|