gooddata 0.6.51 → 0.6.52
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 +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +13 -1
- data/CONTRIBUTING.md +25 -0
- data/PULL_REQUEST_TEMPLATE.md +5 -0
- data/README.md +7 -4
- data/gooddata.gemspec +2 -3
- data/lib/gooddata.rb +1 -0
- data/lib/gooddata/bricks/base_downloader.rb +6 -6
- data/lib/gooddata/bricks/middleware/aws_middleware.rb +15 -5
- data/lib/gooddata/bricks/middleware/dwh_middleware.rb +15 -3
- data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +13 -4
- data/lib/gooddata/bricks/middleware/logger_middleware.rb +3 -0
- data/lib/gooddata/exceptions/no_project_error.rb +5 -1
- data/lib/gooddata/goodzilla/goodzilla.rb +7 -6
- data/lib/gooddata/helpers/data_helper.rb +4 -4
- data/lib/gooddata/helpers/global_helpers_params.rb +61 -39
- data/lib/gooddata/lcm/actions/apply_custom_maql.rb +9 -0
- data/lib/gooddata/lcm/actions/associate_clients.rb +23 -4
- data/lib/gooddata/lcm/actions/collect_attrs.rb +56 -0
- data/lib/gooddata/lcm/actions/collect_ca_metrics.rb +53 -0
- data/lib/gooddata/lcm/actions/collect_clients.rb +25 -3
- data/lib/gooddata/lcm/actions/collect_meta.rb +83 -0
- data/lib/gooddata/lcm/actions/collect_segment_clients.rb +12 -4
- data/lib/gooddata/lcm/actions/collect_segments.rb +4 -4
- data/lib/gooddata/lcm/actions/collect_tagged_objects.rb +74 -0
- data/lib/gooddata/lcm/actions/create_segment_masters.rb +16 -30
- data/lib/gooddata/lcm/actions/ensure_release_table.rb +0 -3
- data/lib/gooddata/lcm/actions/ensure_segments.rb +1 -4
- data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +5 -5
- data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +8 -5
- data/lib/gooddata/lcm/actions/hello_world.rb +0 -3
- data/lib/gooddata/lcm/actions/import_object_collections.rb +60 -0
- data/lib/gooddata/lcm/actions/print_actions.rb +0 -3
- data/lib/gooddata/lcm/actions/print_modes.rb +0 -3
- data/lib/gooddata/lcm/actions/print_types.rb +1 -4
- data/lib/gooddata/lcm/actions/provision_clients.rb +5 -5
- data/lib/gooddata/lcm/actions/purge_clients.rb +4 -10
- data/lib/gooddata/lcm/actions/segments_filter.rb +0 -6
- data/lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb +8 -4
- data/lib/gooddata/lcm/actions/synchronize_cas.rb +61 -0
- data/lib/gooddata/lcm/actions/synchronize_clients.rb +9 -3
- data/lib/gooddata/lcm/actions/synchronize_color_palette.rb +13 -5
- data/lib/gooddata/lcm/actions/synchronize_etls_in_segment.rb +71 -17
- data/lib/gooddata/lcm/actions/synchronize_label_types.rb +8 -5
- data/lib/gooddata/lcm/actions/synchronize_ldm.rb +17 -8
- data/lib/gooddata/lcm/actions/synchronize_meta.rb +0 -3
- data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +9 -4
- data/lib/gooddata/lcm/actions/synchronize_processes.rb +9 -5
- data/lib/gooddata/lcm/actions/synchronize_schedules.rb +15 -5
- data/lib/gooddata/lcm/actions/synchronize_tag_objects.rb +61 -0
- data/lib/gooddata/lcm/actions/update_release_table.rb +0 -3
- data/lib/gooddata/lcm/helpers/tags_helper.rb +35 -0
- data/lib/gooddata/lcm/lcm.rb +22 -4
- data/lib/gooddata/lcm/lcm2.rb +66 -13
- data/lib/gooddata/lcm/types/complex/update_preference.rb +1 -1
- data/lib/gooddata/mixins/md_finders.rb +4 -2
- data/lib/gooddata/mixins/md_object_indexer.rb +13 -3
- data/lib/gooddata/mixins/md_object_query.rb +8 -2
- data/lib/gooddata/models/blueprint/date_dimension.rb +6 -0
- data/lib/gooddata/models/blueprint/project_blueprint.rb +41 -11
- data/lib/gooddata/models/blueprint/project_builder.rb +20 -0
- data/lib/gooddata/models/blueprint/to_wire.rb +7 -0
- data/lib/gooddata/models/client.rb +6 -0
- data/lib/gooddata/models/domain.rb +6 -6
- data/lib/gooddata/models/from_wire.rb +5 -1
- data/lib/gooddata/models/metadata.rb +55 -9
- data/lib/gooddata/models/metadata/attribute.rb +19 -4
- data/lib/gooddata/models/metadata/dashboard.rb +15 -3
- data/lib/gooddata/models/metadata/dataset.rb +5 -2
- data/lib/gooddata/models/metadata/dimension.rb +4 -1
- data/lib/gooddata/models/metadata/fact.rb +9 -2
- data/lib/gooddata/models/metadata/folder.rb +4 -1
- data/lib/gooddata/models/metadata/metric.rb +11 -3
- data/lib/gooddata/models/metadata/report.rb +7 -2
- data/lib/gooddata/models/metadata/report_definition.rb +11 -4
- data/lib/gooddata/models/metadata/scheduled_mail.rb +4 -1
- data/lib/gooddata/models/metadata/variable.rb +7 -2
- data/lib/gooddata/models/model.rb +14 -3
- data/lib/gooddata/models/process.rb +10 -9
- data/lib/gooddata/models/project.rb +134 -36
- data/lib/gooddata/models/project_creator.rb +43 -20
- data/lib/gooddata/models/report_data_result.rb +6 -2
- data/lib/gooddata/models/schedule.rb +6 -3
- data/lib/gooddata/models/subscription.rb +8 -1
- data/lib/gooddata/models/user_filters/user_filter.rb +1 -0
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +18 -4
- data/lib/gooddata/models/user_filters/variable_user_filter.rb +3 -1
- data/lib/gooddata/rest/client.rb +4 -6
- data/lib/gooddata/rest/connection.rb +10 -2
- data/lib/gooddata/version.rb +1 -1
- data/spec/data/blueprints/test_blueprint.json +1 -0
- data/spec/data/wire_models/test_blueprint.json +3 -0
- data/spec/data/workspace_table.csv +3 -0
- data/spec/environment/development.rb +4 -1
- data/spec/environment/environment.rb +1 -1
- data/spec/environment/staging.rb +5 -1
- data/spec/environment/testing.rb +5 -2
- data/spec/integration/blueprint_with_ca_spec.rb +56 -0
- data/spec/integration/clients_spec.rb +21 -0
- data/spec/integration/command_datawarehouse_spec.rb +7 -1
- data/spec/integration/create_from_template_spec.rb +9 -3
- data/spec/integration/project_spec.rb +7 -0
- data/spec/integration/segments_spec.rb +0 -53
- data/spec/integration/subscription_spec.rb +29 -4
- data/spec/integration/urn_date_dim_spec.rb +53 -0
- data/spec/integration/user_filters_spec.rb +6 -0
- data/spec/integration/variables_spec.rb +1 -2
- data/spec/spec_helper.rb +5 -30
- data/spec/unit/actions/collect_clients_spec.rb +38 -0
- data/spec/unit/actions/collect_meta_spec.rb +87 -0
- data/spec/unit/actions/collect_segment_clients_spec.rb +40 -0
- data/spec/unit/actions/collect_tagged_objects_spec.rb +110 -0
- data/spec/unit/actions/synchronize_etls_in_segment_spec.rb +51 -0
- data/spec/unit/bricks/middleware/aws_middelware_spec.rb +55 -1
- data/spec/unit/bricks/middleware/logger_middleware_spec.rb +15 -0
- data/spec/unit/helpers/data_helper_spec.rb +3 -5
- data/spec/unit/helpers/global_helpers_spec.rb +29 -0
- data/spec/unit/helpers_spec.rb +18 -1
- data/spec/unit/models/blueprint/project_blueprint_spec.rb +1 -23
- data/spec/unit/models/domain_spec.rb +19 -0
- data/spec/unit/models/metadata_spec.rb +34 -0
- data/spec/unit/models/schedule_spec.rb +31 -0
- data/spec/unit/models/to_manifest_spec.rb +10 -2
- data/spec/unit/models/unit_project_spec.rb +6 -1
- data/spec/unit/rest/polling_spec.rb +13 -1
- metadata +49 -31
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
|
6
|
+
|
|
7
|
+
require 'gooddata/lcm/lcm2'
|
|
8
|
+
require 'gooddata/lcm/actions/synchronize_etls_in_segment'
|
|
9
|
+
|
|
10
|
+
describe GoodData::LCM2::SynchronizeETLsInSegment do
|
|
11
|
+
let(:gdc_gd_client) { double('gdc_gd_client') }
|
|
12
|
+
let(:domain) { double('domain') }
|
|
13
|
+
let(:segment) { double('segment') }
|
|
14
|
+
|
|
15
|
+
context 'when sync processes/schedules has problem' do
|
|
16
|
+
let(:result) do
|
|
17
|
+
{
|
|
18
|
+
syncedResult: {
|
|
19
|
+
errors: [
|
|
20
|
+
{
|
|
21
|
+
errorId: "91a811a7-8d3a-42d2-a1ba-024933f74021",
|
|
22
|
+
errorCode: "gdc.lcm.schedule.fatal_error",
|
|
23
|
+
message: "Error",
|
|
24
|
+
parameters: []
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
let(:params) do
|
|
32
|
+
params = {
|
|
33
|
+
gdc_gd_client: gdc_gd_client,
|
|
34
|
+
organization: domain,
|
|
35
|
+
synchronize: [{ segment_id: 'some_segment_ids' }]
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
GoodData::LCM2.convert_to_smart_hash(params)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
before do
|
|
42
|
+
allow(gdc_gd_client).to receive(:domain) { domain }
|
|
43
|
+
allow(domain).to receive(:segments) { segment }
|
|
44
|
+
allow(segment).to receive(:synchronize_processes) { result }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'raise error' do
|
|
48
|
+
expect { subject.class.call(params) }.to raise_error
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -9,6 +9,8 @@ require 'gooddata/bricks/bricks'
|
|
|
9
9
|
require 'gooddata/bricks/middleware/aws_middleware'
|
|
10
10
|
|
|
11
11
|
describe GoodData::Bricks::AWSMiddleware do
|
|
12
|
+
subject { GoodData::Bricks::AWSMiddleware.new(app: proc {}) }
|
|
13
|
+
|
|
12
14
|
it 'should do nothing if the key "aws_client" is not there at all' do
|
|
13
15
|
middleware = GoodData::Bricks::AWSMiddleware.new(app: ->(_params) { 'Doing nothing' })
|
|
14
16
|
middleware.call({})
|
|
@@ -37,8 +39,60 @@ describe GoodData::Bricks::AWSMiddleware do
|
|
|
37
39
|
|
|
38
40
|
it "should preapre aws middleware for aws_client param" do
|
|
39
41
|
middleware = GoodData::Bricks::AWSMiddleware.new(app: lambda do |params|
|
|
40
|
-
expect(params['aws_client']['s3_client']).to be_kind_of(
|
|
42
|
+
expect(params['aws_client']['s3_client']).to be_kind_of(Aws::S3::Resource)
|
|
41
43
|
end)
|
|
42
44
|
middleware.call('aws_client' => { 'secret_access_key' => 'something', 'access_key_id' => 'something' })
|
|
43
45
|
end
|
|
46
|
+
|
|
47
|
+
context 'when use_ssl parameter specified' do
|
|
48
|
+
let(:params) do
|
|
49
|
+
{
|
|
50
|
+
'aws_client' => {
|
|
51
|
+
'access_key_id' => 'foo',
|
|
52
|
+
'secret_access_key' => 'bar',
|
|
53
|
+
'region' => 'baz',
|
|
54
|
+
'use_ssl' => 'false'
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'raises an error' do
|
|
60
|
+
expect { subject.call(params) }.to raise_error(/use_ssl has been deprecated/)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context 'when a superfluous parameter is specified' do
|
|
65
|
+
let(:params) do
|
|
66
|
+
{
|
|
67
|
+
'aws_client' => {
|
|
68
|
+
'access_key_id' => 'foo',
|
|
69
|
+
'secret_access_key' => 'bar',
|
|
70
|
+
'region' => 'baz',
|
|
71
|
+
'qux' => 'quux'
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it 'raises an error' do
|
|
77
|
+
expect { subject.call(params) }.to raise_error(ArgumentError, /qux/)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context 'when region not specified' do
|
|
82
|
+
let(:params) do
|
|
83
|
+
{
|
|
84
|
+
'aws_client' => {
|
|
85
|
+
'access_key_id' => 'foo',
|
|
86
|
+
'secret_access_key' => 'bar'
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'it defaults to us-west-2' do
|
|
92
|
+
expect(Aws::S3::Resource).to receive(:new) do |params|
|
|
93
|
+
expect(params[:region]).to eq 'us-west-2'
|
|
94
|
+
end
|
|
95
|
+
subject.call(params)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
44
98
|
end
|
|
@@ -12,4 +12,19 @@ describe GoodData::Bricks::LoggerMiddleware do
|
|
|
12
12
|
it "Has GoodData::Bricks::LoggerMiddleware class" do
|
|
13
13
|
GoodData::Bricks::LoggerMiddleware.should_not be(nil)
|
|
14
14
|
end
|
|
15
|
+
|
|
16
|
+
context 'when HTTP_LOGGING parameter set to true' do
|
|
17
|
+
let(:params) { { 'HTTP_LOGGING' => 'true' } }
|
|
18
|
+
let(:app) { double(:app) }
|
|
19
|
+
|
|
20
|
+
before do
|
|
21
|
+
subject.app = app
|
|
22
|
+
allow(app).to receive(:call)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'turns http logging on' do
|
|
26
|
+
expect(GoodData).to receive(:logging_http_on)
|
|
27
|
+
subject.call(params)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
15
30
|
end
|
|
@@ -9,14 +9,12 @@ require 'gooddata/helpers/data_helper'
|
|
|
9
9
|
describe GoodData::Helpers::DataSource do
|
|
10
10
|
before :each do
|
|
11
11
|
@s3_client = double('s3_client')
|
|
12
|
-
@buckets = double('buckets')
|
|
13
12
|
@bucket = double('bucket')
|
|
14
13
|
@objects = double('objects')
|
|
15
14
|
|
|
16
|
-
allow(@s3_client).to receive(:
|
|
17
|
-
allow(@
|
|
18
|
-
allow(@
|
|
19
|
-
allow(@objects).to receive(:[]) { StringIO.new('aaa') }
|
|
15
|
+
allow(@s3_client).to receive(:bucket) { @bucket }
|
|
16
|
+
allow(@bucket).to receive(:object) { @objects }
|
|
17
|
+
allow(@objects).to receive(:get) { StringIO.new('aaa') }
|
|
20
18
|
|
|
21
19
|
@ds = GoodData::Helpers::DataSource.new(type: :s3, bucket: 'some_bucket', key: 'some_key')
|
|
22
20
|
end
|
|
@@ -110,6 +110,19 @@ describe GoodData::Helpers do
|
|
|
110
110
|
)
|
|
111
111
|
end
|
|
112
112
|
|
|
113
|
+
context 'when hidden parameters contain an invalid json' do
|
|
114
|
+
let(:invalid_json) { '{"password": "precious_secret"' }
|
|
115
|
+
let(:params) do
|
|
116
|
+
{ GoodData::Helpers::ENCODED_HIDDEN_PARAMS_KEY.to_s => invalid_json }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it 'hides secrets in the error message' do
|
|
120
|
+
expect { GoodData::Helpers.decode_params(params) }.to raise_error(JSON::ParserError) do |e|
|
|
121
|
+
expect(e.message).not_to include('precious_secret')
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
113
126
|
it 'should encode reference parameters in gd_encoded_params' do
|
|
114
127
|
params = {
|
|
115
128
|
'x' => 'y',
|
|
@@ -216,4 +229,20 @@ describe GoodData::Helpers do
|
|
|
216
229
|
end
|
|
217
230
|
end
|
|
218
231
|
end
|
|
232
|
+
|
|
233
|
+
describe '.decode_params' do
|
|
234
|
+
it 'interpolates reference parameters in additional_hidden_params' do
|
|
235
|
+
params = {
|
|
236
|
+
'gd_encoded_hidden_params' => '{ "additional_hidden_params": { "secret": "${my_password}" } }',
|
|
237
|
+
'my_password' => "123"
|
|
238
|
+
}
|
|
239
|
+
expected_result = {
|
|
240
|
+
'gd_encoded_hidden_params' => nil,
|
|
241
|
+
'additional_hidden_params' => { 'secret' => '123' },
|
|
242
|
+
'my_password' => '123'
|
|
243
|
+
}
|
|
244
|
+
result = GoodData::Helpers.decode_params(params, :resolve_reference_params => true)
|
|
245
|
+
expect(result).to eq(expected_result)
|
|
246
|
+
end
|
|
247
|
+
end
|
|
219
248
|
end
|
data/spec/unit/helpers_spec.rb
CHANGED
|
@@ -62,6 +62,16 @@ describe GoodData::Helpers do
|
|
|
62
62
|
expect(result).to eq(expected_result)
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
+
it 'should not show reference parameter values when get error' do
|
|
66
|
+
params = {
|
|
67
|
+
'secret' => 'you will not see it',
|
|
68
|
+
'gd_encoded_params' => "{\"abc\": \"${secret}\",}"
|
|
69
|
+
}
|
|
70
|
+
expect { GoodData::Helpers.decode_params(params, resolve_reference_params: true) }.to raise_error do |e|
|
|
71
|
+
expect(e.message).not_to include('you will not see it')
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
65
75
|
it 'ignore value of encoded params if its value is not collection or String when resolve reference params' do
|
|
66
76
|
params = {
|
|
67
77
|
'param' => 'value',
|
|
@@ -213,7 +223,14 @@ describe GoodData::Helpers do
|
|
|
213
223
|
'number_param' => 5,
|
|
214
224
|
'ads_password' => 'ads_123',
|
|
215
225
|
'my_password' => 'login_123',
|
|
216
|
-
'gd_encoded_params' => {
|
|
226
|
+
'gd_encoded_params' => {
|
|
227
|
+
"login_username" => "login_user",
|
|
228
|
+
"login_password" => "${my_password}",
|
|
229
|
+
"ads_client" => {
|
|
230
|
+
"username" => "ads_user",
|
|
231
|
+
"password" => "${ads_password}"
|
|
232
|
+
}
|
|
233
|
+
}
|
|
217
234
|
}
|
|
218
235
|
expected_result = {
|
|
219
236
|
'param' => 'value',
|
|
@@ -356,28 +356,6 @@ describe GoodData::Model::ProjectBlueprint do
|
|
|
356
356
|
expect(b_a.valid?).to eq true
|
|
357
357
|
expect(b_a).to eq a_b
|
|
358
358
|
end
|
|
359
|
-
|
|
360
|
-
it "should fail if unable to merge date dimensions (they are different)." do
|
|
361
|
-
a = GoodData::Model::ProjectBlueprint.build("p") do |p|
|
|
362
|
-
p.add_date_dimension("created_on", title: 'title A')
|
|
363
|
-
p.add_dataset('stuff') do |d|
|
|
364
|
-
d.add_anchor('stuff_id')
|
|
365
|
-
d.add_label('name', reference: 'stuff_id')
|
|
366
|
-
d.add_date('created_on')
|
|
367
|
-
end
|
|
368
|
-
end
|
|
369
|
-
b = GoodData::Model::ProjectBlueprint.build("p") do |p|
|
|
370
|
-
p.add_date_dimension("created_on", title: 'title B')
|
|
371
|
-
p.add_dataset('stuff') do |d|
|
|
372
|
-
d.add_attribute('attr_id')
|
|
373
|
-
d.add_label('attr_name', reference: 'attr_id')
|
|
374
|
-
d.add_date('created_on')
|
|
375
|
-
end
|
|
376
|
-
end
|
|
377
|
-
expect do
|
|
378
|
-
a.merge(b)
|
|
379
|
-
end.to raise_exception 'Unable to merge date dimensions created_on with defintion {:type=>:date_dimension, :urn=>nil, :id=>"created_on", :title=>"title B"} with {:type=>:date_dimension, :urn=>nil, :id=>"created_on", :title=>"title A"}'
|
|
380
|
-
end
|
|
381
359
|
end
|
|
382
360
|
|
|
383
361
|
describe '#merge!' do
|
|
@@ -403,7 +381,7 @@ describe GoodData::Model::ProjectBlueprint do
|
|
|
403
381
|
it "should be able to serialize itself to a hash" do
|
|
404
382
|
ser = @blueprint.to_hash
|
|
405
383
|
ser.is_a?(Hash)
|
|
406
|
-
expect(ser.keys).to eq [:title, :datasets, :date_dimensions]
|
|
384
|
+
expect(ser.keys).to eq [:title, :datasets, :date_dimensions, :include_ca]
|
|
407
385
|
end
|
|
408
386
|
|
|
409
387
|
it "should be able to tell you whether a dataset is referencing any others including date dimensions" do
|
|
@@ -140,4 +140,23 @@ describe GoodData::Domain do
|
|
|
140
140
|
expect(@domain.find_user_by_login(user.login).sso_provider).to eq old_sso_provider
|
|
141
141
|
end
|
|
142
142
|
end
|
|
143
|
+
|
|
144
|
+
describe '#clients' do
|
|
145
|
+
subject { GoodData::Domain.new('my_domain') }
|
|
146
|
+
let(:client) { double('client') }
|
|
147
|
+
let(:clients_response) { { 'client' => { 'id' => '123' } } }
|
|
148
|
+
|
|
149
|
+
before do
|
|
150
|
+
allow(client).to receive(:get).and_return(clients_response)
|
|
151
|
+
allow(subject).to receive(:client).and_return(client)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it 'accepts an integer as the id parameter' do
|
|
155
|
+
expect(client).to receive(:create).with(
|
|
156
|
+
GoodData::Client,
|
|
157
|
+
clients_response
|
|
158
|
+
)
|
|
159
|
+
subject.clients(123)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
143
162
|
end
|
|
@@ -103,4 +103,38 @@ describe GoodData::MdObject do
|
|
|
103
103
|
expect(@instance.unlisted?).to be_falsey
|
|
104
104
|
end
|
|
105
105
|
end
|
|
106
|
+
|
|
107
|
+
describe '#find_by_tag' do
|
|
108
|
+
let(:tagged_metadata) { double('tagged_metadata') }
|
|
109
|
+
|
|
110
|
+
before do
|
|
111
|
+
allow(GoodData).to receive(:get_client_and_project)
|
|
112
|
+
allow(tagged_metadata).to receive(:tag_set).and_return(['tag1'])
|
|
113
|
+
allow(GoodData::MdObject).to receive(:[]).and_return([tagged_metadata])
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
context 'when the specified tag is present' do
|
|
117
|
+
it 'finds metadata by a single tag' do
|
|
118
|
+
result = GoodData::MdObject.find_by_tag('tag1')
|
|
119
|
+
expect(result).to eq [tagged_metadata]
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it 'finds metadata by a comma-separated list of tags' do
|
|
123
|
+
result = GoodData::MdObject.find_by_tag('tag1, tag2')
|
|
124
|
+
expect(result).to eq [tagged_metadata]
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it 'finds metadata by a an array of tags' do
|
|
128
|
+
result = GoodData::MdObject.find_by_tag(%w(tag1 tag2))
|
|
129
|
+
expect(result).to eq [tagged_metadata]
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
context 'when the specified tag is not present' do
|
|
134
|
+
it 'returns an empty array' do
|
|
135
|
+
result = GoodData::MdObject.find_by_tag('unknown_tag')
|
|
136
|
+
expect(result).to be_empty
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
106
140
|
end
|
|
@@ -451,4 +451,35 @@ describe GoodData::Schedule do
|
|
|
451
451
|
end
|
|
452
452
|
end
|
|
453
453
|
end
|
|
454
|
+
|
|
455
|
+
describe '#save' do
|
|
456
|
+
let(:model) do
|
|
457
|
+
{
|
|
458
|
+
schedule: {
|
|
459
|
+
params: { GRAPH: 'graph.grf' },
|
|
460
|
+
cron: 'foo',
|
|
461
|
+
timezone: 'bar',
|
|
462
|
+
type: 'baz',
|
|
463
|
+
links: { self: 'qux' }
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
end
|
|
467
|
+
let(:client) { double('client') }
|
|
468
|
+
|
|
469
|
+
subject { GoodData::Schedule.new(model) }
|
|
470
|
+
|
|
471
|
+
before do
|
|
472
|
+
allow(subject).to receive(:client)
|
|
473
|
+
.and_return(client)
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
it 'rewrites deprecated parameter GRAPH' do
|
|
477
|
+
expect(client).to receive(:put) do |_, body|
|
|
478
|
+
executable = body['schedule']['params']['EXECUTABLE']
|
|
479
|
+
expect(executable).to eq('graph.grf')
|
|
480
|
+
model
|
|
481
|
+
end
|
|
482
|
+
subject.save
|
|
483
|
+
end
|
|
484
|
+
end
|
|
454
485
|
end
|
|
@@ -75,7 +75,11 @@ describe GoodData::Model::ToManifest do
|
|
|
75
75
|
d.add_column(type: :date_fact, id: 'dt.date_fact')
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
|
-
expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'])
|
|
78
|
+
expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'])
|
|
79
|
+
.to include("referenceKey" => 1,
|
|
80
|
+
"populates" => ["repo_label_1"],
|
|
81
|
+
"mode" => "FULL",
|
|
82
|
+
"columnName" => "repo_label_1")
|
|
79
83
|
|
|
80
84
|
blueprint = GoodData::Model::ProjectBlueprint.build("my_bp") do |p|
|
|
81
85
|
p.add_date_dimension("committed_on")
|
|
@@ -97,7 +101,11 @@ describe GoodData::Model::ToManifest do
|
|
|
97
101
|
end
|
|
98
102
|
end
|
|
99
103
|
|
|
100
|
-
expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'])
|
|
104
|
+
expect(blueprint.to_manifest.first['dataSetSLIManifest']['parts'])
|
|
105
|
+
.to include("referenceKey" => 1,
|
|
106
|
+
"populates" => ["repo_label_2"],
|
|
107
|
+
"mode" => "FULL",
|
|
108
|
+
"columnName" => "repo_label_2")
|
|
101
109
|
expect(blueprint.to_manifest[1]['dataSetSLIManifest']['parts']).to include("populates" => ["repo_label_2"], "mode" => "FULL", "columnName" => "repos", "referenceKey" => 1)
|
|
102
110
|
end
|
|
103
111
|
|
|
@@ -103,7 +103,12 @@ describe GoodData::Project do
|
|
|
103
103
|
|
|
104
104
|
it 'can handle case with info with login when he is in the domain' do
|
|
105
105
|
# we have to provide users from project to be able to do this by login
|
|
106
|
-
|
|
106
|
+
login = { login: 'john.doe+in_domain@gooddata.com', first_name: 'John' }
|
|
107
|
+
a, b = @p.resolve_roles(login, 'test_role',
|
|
108
|
+
project_users: [],
|
|
109
|
+
domain_users: @domain_members,
|
|
110
|
+
roles: @roles,
|
|
111
|
+
domain: @domain)
|
|
107
112
|
expect(a).to eq "/gdc/account/profile/john.doe+in_domain@gooddata.com"
|
|
108
113
|
expect(b).to eq ["/roles/1"]
|
|
109
114
|
end
|
|
@@ -23,7 +23,19 @@ describe 'Behavior during polling and retries' do
|
|
|
23
23
|
GoodData::Rest::Connection.const_set(:RETRY_TIME_INITIAL_VALUE, 0)
|
|
24
24
|
GoodData::Rest::Client.const_set(:DEFAULT_SLEEP_INTERVAL, 0)
|
|
25
25
|
stub_request(:get, "#{@server}/gdc")
|
|
26
|
-
|
|
26
|
+
.to_return(
|
|
27
|
+
:body => {
|
|
28
|
+
'about' => {
|
|
29
|
+
'links' => [{
|
|
30
|
+
'link' => 'https://secure-di.gooddata.com/uploads',
|
|
31
|
+
'summary' => 'User data staging area.',
|
|
32
|
+
'category' => 'uploads',
|
|
33
|
+
'title' => 'user-uploads'
|
|
34
|
+
}]
|
|
35
|
+
}
|
|
36
|
+
}.to_json,
|
|
37
|
+
:headers => { 'Content-Type' => 'application/json' }
|
|
38
|
+
)
|
|
27
39
|
stub_request(:post, "#{@server}/gdc/account/login")
|
|
28
40
|
.to_return(:body => { :userLogin => { :profile => "/profile/123" } }.to_json, :headers => { 'Content-Type' => "application/json" })
|
|
29
41
|
stub_request(:get, "#{@server}/gdc/account/token")
|
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: 0.6.
|
|
4
|
+
version: 0.6.52
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Pavel Kolesnikov
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2017-
|
|
14
|
+
date: 2017-07-03 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: bundler
|
|
@@ -215,42 +215,20 @@ dependencies:
|
|
|
215
215
|
requirements:
|
|
216
216
|
- - "~>"
|
|
217
217
|
- !ruby/object:Gem::Version
|
|
218
|
-
version: '2.
|
|
219
|
-
|
|
220
|
-
prerelease: false
|
|
221
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
222
|
-
requirements:
|
|
223
|
-
- - "~>"
|
|
224
|
-
- !ruby/object:Gem::Version
|
|
225
|
-
version: '2.7'
|
|
226
|
-
- !ruby/object:Gem::Dependency
|
|
227
|
-
name: nokogiri
|
|
228
|
-
requirement: !ruby/object:Gem::Requirement
|
|
229
|
-
requirements:
|
|
230
|
-
- - "~>"
|
|
218
|
+
version: '2.9'
|
|
219
|
+
- - ">="
|
|
231
220
|
- !ruby/object:Gem::Version
|
|
232
|
-
version:
|
|
221
|
+
version: 2.9.42
|
|
233
222
|
type: :runtime
|
|
234
223
|
prerelease: false
|
|
235
224
|
version_requirements: !ruby/object:Gem::Requirement
|
|
236
225
|
requirements:
|
|
237
226
|
- - "~>"
|
|
238
227
|
- !ruby/object:Gem::Version
|
|
239
|
-
version:
|
|
240
|
-
-
|
|
241
|
-
name: aws-sdk-v1
|
|
242
|
-
requirement: !ruby/object:Gem::Requirement
|
|
243
|
-
requirements:
|
|
244
|
-
- - "~>"
|
|
245
|
-
- !ruby/object:Gem::Version
|
|
246
|
-
version: '1.45'
|
|
247
|
-
type: :runtime
|
|
248
|
-
prerelease: false
|
|
249
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
250
|
-
requirements:
|
|
251
|
-
- - "~>"
|
|
228
|
+
version: '2.9'
|
|
229
|
+
- - ">="
|
|
252
230
|
- !ruby/object:Gem::Version
|
|
253
|
-
version:
|
|
231
|
+
version: 2.9.42
|
|
254
232
|
- !ruby/object:Gem::Dependency
|
|
255
233
|
name: docile
|
|
256
234
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -447,6 +425,20 @@ dependencies:
|
|
|
447
425
|
- - ">="
|
|
448
426
|
- !ruby/object:Gem::Version
|
|
449
427
|
version: '0'
|
|
428
|
+
- !ruby/object:Gem::Dependency
|
|
429
|
+
name: backports
|
|
430
|
+
requirement: !ruby/object:Gem::Requirement
|
|
431
|
+
requirements:
|
|
432
|
+
- - ">="
|
|
433
|
+
- !ruby/object:Gem::Version
|
|
434
|
+
version: '0'
|
|
435
|
+
type: :runtime
|
|
436
|
+
prerelease: false
|
|
437
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
438
|
+
requirements:
|
|
439
|
+
- - ">="
|
|
440
|
+
- !ruby/object:Gem::Version
|
|
441
|
+
version: '0'
|
|
450
442
|
description: Use the GoodData::Client class to integrate GoodData into your own application
|
|
451
443
|
or use the CLI to work with GoodData directly from the command line.
|
|
452
444
|
email: pavel@gooddata.com
|
|
@@ -465,6 +457,7 @@ files:
|
|
|
465
457
|
- ".yardopts"
|
|
466
458
|
- CHANGELOG.md
|
|
467
459
|
- CLI.md
|
|
460
|
+
- CONTRIBUTING.md
|
|
468
461
|
- DEPENDENCIES.md
|
|
469
462
|
- Dockerfile.jruby
|
|
470
463
|
- Dockerfile.ruby
|
|
@@ -472,6 +465,7 @@ files:
|
|
|
472
465
|
- Guardfile
|
|
473
466
|
- LICENSE
|
|
474
467
|
- LICENSE.rb
|
|
468
|
+
- PULL_REQUEST_TEMPLATE.md
|
|
475
469
|
- README.md
|
|
476
470
|
- Rakefile
|
|
477
471
|
- TODO.md
|
|
@@ -576,15 +570,20 @@ files:
|
|
|
576
570
|
- lib/gooddata/lcm/actions/apply_custom_maql.rb
|
|
577
571
|
- lib/gooddata/lcm/actions/associate_clients.rb
|
|
578
572
|
- lib/gooddata/lcm/actions/base_action.rb
|
|
573
|
+
- lib/gooddata/lcm/actions/collect_attrs.rb
|
|
574
|
+
- lib/gooddata/lcm/actions/collect_ca_metrics.rb
|
|
579
575
|
- lib/gooddata/lcm/actions/collect_clients.rb
|
|
576
|
+
- lib/gooddata/lcm/actions/collect_meta.rb
|
|
580
577
|
- lib/gooddata/lcm/actions/collect_segment_clients.rb
|
|
581
578
|
- lib/gooddata/lcm/actions/collect_segments.rb
|
|
579
|
+
- lib/gooddata/lcm/actions/collect_tagged_objects.rb
|
|
582
580
|
- lib/gooddata/lcm/actions/create_segment_masters.rb
|
|
583
581
|
- lib/gooddata/lcm/actions/ensure_release_table.rb
|
|
584
582
|
- lib/gooddata/lcm/actions/ensure_segments.rb
|
|
585
583
|
- lib/gooddata/lcm/actions/ensure_technical_users_domain.rb
|
|
586
584
|
- lib/gooddata/lcm/actions/ensure_technical_users_project.rb
|
|
587
585
|
- lib/gooddata/lcm/actions/hello_world.rb
|
|
586
|
+
- lib/gooddata/lcm/actions/import_object_collections.rb
|
|
588
587
|
- lib/gooddata/lcm/actions/print_actions.rb
|
|
589
588
|
- lib/gooddata/lcm/actions/print_modes.rb
|
|
590
589
|
- lib/gooddata/lcm/actions/print_types.rb
|
|
@@ -592,6 +591,7 @@ files:
|
|
|
592
591
|
- lib/gooddata/lcm/actions/purge_clients.rb
|
|
593
592
|
- lib/gooddata/lcm/actions/segments_filter.rb
|
|
594
593
|
- lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb
|
|
594
|
+
- lib/gooddata/lcm/actions/synchronize_cas.rb
|
|
595
595
|
- lib/gooddata/lcm/actions/synchronize_clients.rb
|
|
596
596
|
- lib/gooddata/lcm/actions/synchronize_color_palette.rb
|
|
597
597
|
- lib/gooddata/lcm/actions/synchronize_etls_in_segment.rb
|
|
@@ -601,6 +601,7 @@ files:
|
|
|
601
601
|
- lib/gooddata/lcm/actions/synchronize_new_segments.rb
|
|
602
602
|
- lib/gooddata/lcm/actions/synchronize_processes.rb
|
|
603
603
|
- lib/gooddata/lcm/actions/synchronize_schedules.rb
|
|
604
|
+
- lib/gooddata/lcm/actions/synchronize_tag_objects.rb
|
|
604
605
|
- lib/gooddata/lcm/actions/update_release_table.rb
|
|
605
606
|
- lib/gooddata/lcm/data/create_lcm_release.sql.erb
|
|
606
607
|
- lib/gooddata/lcm/data/insert_into_lcm_release.sql.erb
|
|
@@ -611,6 +612,7 @@ files:
|
|
|
611
612
|
- lib/gooddata/lcm/dsl/type_dsl.rb
|
|
612
613
|
- lib/gooddata/lcm/helpers/check_helper.rb
|
|
613
614
|
- lib/gooddata/lcm/helpers/helpers.rb
|
|
615
|
+
- lib/gooddata/lcm/helpers/tags_helper.rb
|
|
614
616
|
- lib/gooddata/lcm/lcm.rb
|
|
615
617
|
- lib/gooddata/lcm/lcm2.rb
|
|
616
618
|
- lib/gooddata/lcm/types/base_type.rb
|
|
@@ -817,6 +819,7 @@ files:
|
|
|
817
819
|
- spec/data/wire_models/nu_model.json
|
|
818
820
|
- spec/data/wire_models/test_blueprint.json
|
|
819
821
|
- spec/data/wire_test_project.json
|
|
822
|
+
- spec/data/workspace_table.csv
|
|
820
823
|
- spec/environment/default.rb
|
|
821
824
|
- spec/environment/development.rb
|
|
822
825
|
- spec/environment/environment.rb
|
|
@@ -834,6 +837,7 @@ files:
|
|
|
834
837
|
- spec/helpers/spec_helper.rb
|
|
835
838
|
- spec/integration/ads_output_stage_spec.rb
|
|
836
839
|
- spec/integration/blueprint_updates_spec.rb
|
|
840
|
+
- spec/integration/blueprint_with_ca_spec.rb
|
|
837
841
|
- spec/integration/blueprint_with_grain_spec.rb
|
|
838
842
|
- spec/integration/channel_configuration_spec.rb
|
|
839
843
|
- spec/integration/clients_spec.rb
|
|
@@ -853,11 +857,17 @@ files:
|
|
|
853
857
|
- spec/integration/schedule_spec.rb
|
|
854
858
|
- spec/integration/segments_spec.rb
|
|
855
859
|
- spec/integration/subscription_spec.rb
|
|
860
|
+
- spec/integration/urn_date_dim_spec.rb
|
|
856
861
|
- spec/integration/user_filters_spec.rb
|
|
857
862
|
- spec/integration/user_group_spec.rb
|
|
858
863
|
- spec/integration/variables_spec.rb
|
|
859
864
|
- spec/logging_in_logging_out_spec.rb
|
|
860
865
|
- spec/spec_helper.rb
|
|
866
|
+
- spec/unit/actions/collect_clients_spec.rb
|
|
867
|
+
- spec/unit/actions/collect_meta_spec.rb
|
|
868
|
+
- spec/unit/actions/collect_segment_clients_spec.rb
|
|
869
|
+
- spec/unit/actions/collect_tagged_objects_spec.rb
|
|
870
|
+
- spec/unit/actions/synchronize_etls_in_segment_spec.rb
|
|
861
871
|
- spec/unit/bricks/bricks_spec.rb
|
|
862
872
|
- spec/unit/bricks/middleware/aws_middelware_spec.rb
|
|
863
873
|
- spec/unit/bricks/middleware/bench_middleware_spec.rb
|
|
@@ -931,7 +941,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
931
941
|
version: '0'
|
|
932
942
|
requirements: []
|
|
933
943
|
rubyforge_project:
|
|
934
|
-
rubygems_version: 2.6.
|
|
944
|
+
rubygems_version: 2.6.12
|
|
935
945
|
signing_key:
|
|
936
946
|
specification_version: 4
|
|
937
947
|
summary: A convenient Ruby wrapper around the GoodData RESTful API
|
|
@@ -981,6 +991,7 @@ test_files:
|
|
|
981
991
|
- spec/data/wire_models/nu_model.json
|
|
982
992
|
- spec/data/wire_models/test_blueprint.json
|
|
983
993
|
- spec/data/wire_test_project.json
|
|
994
|
+
- spec/data/workspace_table.csv
|
|
984
995
|
- spec/environment/default.rb
|
|
985
996
|
- spec/environment/development.rb
|
|
986
997
|
- spec/environment/environment.rb
|
|
@@ -998,6 +1009,7 @@ test_files:
|
|
|
998
1009
|
- spec/helpers/spec_helper.rb
|
|
999
1010
|
- spec/integration/ads_output_stage_spec.rb
|
|
1000
1011
|
- spec/integration/blueprint_updates_spec.rb
|
|
1012
|
+
- spec/integration/blueprint_with_ca_spec.rb
|
|
1001
1013
|
- spec/integration/blueprint_with_grain_spec.rb
|
|
1002
1014
|
- spec/integration/channel_configuration_spec.rb
|
|
1003
1015
|
- spec/integration/clients_spec.rb
|
|
@@ -1017,11 +1029,17 @@ test_files:
|
|
|
1017
1029
|
- spec/integration/schedule_spec.rb
|
|
1018
1030
|
- spec/integration/segments_spec.rb
|
|
1019
1031
|
- spec/integration/subscription_spec.rb
|
|
1032
|
+
- spec/integration/urn_date_dim_spec.rb
|
|
1020
1033
|
- spec/integration/user_filters_spec.rb
|
|
1021
1034
|
- spec/integration/user_group_spec.rb
|
|
1022
1035
|
- spec/integration/variables_spec.rb
|
|
1023
1036
|
- spec/logging_in_logging_out_spec.rb
|
|
1024
1037
|
- spec/spec_helper.rb
|
|
1038
|
+
- spec/unit/actions/collect_clients_spec.rb
|
|
1039
|
+
- spec/unit/actions/collect_meta_spec.rb
|
|
1040
|
+
- spec/unit/actions/collect_segment_clients_spec.rb
|
|
1041
|
+
- spec/unit/actions/collect_tagged_objects_spec.rb
|
|
1042
|
+
- spec/unit/actions/synchronize_etls_in_segment_spec.rb
|
|
1025
1043
|
- spec/unit/bricks/bricks_spec.rb
|
|
1026
1044
|
- spec/unit/bricks/middleware/aws_middelware_spec.rb
|
|
1027
1045
|
- spec/unit/bricks/middleware/bench_middleware_spec.rb
|