gooddata 0.6.20 → 0.6.22
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/CHANGELOG.md +29 -1
- data/DEPENDENCIES.md +816 -0
- data/LICENSE +1 -1
- data/LICENSE.rb +5 -0
- data/Rakefile +74 -22
- data/dependency_decisions.yml +102 -0
- data/gooddata.gemspec +39 -38
- data/lib/gooddata.rb +4 -0
- data/lib/gooddata/app/app.rb +4 -0
- data/lib/gooddata/bricks/base_downloader.rb +5 -1
- data/lib/gooddata/bricks/brick.rb +4 -0
- data/lib/gooddata/bricks/bricks.rb +5 -0
- data/lib/gooddata/bricks/middleware/aws_middleware.rb +5 -0
- data/lib/gooddata/bricks/middleware/base_middleware.rb +5 -0
- data/lib/gooddata/bricks/middleware/bench_middleware.rb +5 -0
- data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +5 -0
- data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +6 -0
- data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +6 -0
- data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +6 -0
- data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +6 -0
- data/lib/gooddata/bricks/middleware/logger_middleware.rb +5 -0
- data/lib/gooddata/bricks/middleware/middleware.rb +5 -0
- data/lib/gooddata/bricks/middleware/restforce_middleware.rb +4 -0
- data/lib/gooddata/bricks/middleware/stdout_middleware.rb +5 -0
- data/lib/gooddata/bricks/middleware/twitter_middleware.rb +5 -0
- data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +4 -0
- data/lib/gooddata/bricks/pipeline.rb +4 -0
- data/lib/gooddata/bricks/utils.rb +4 -0
- data/lib/gooddata/cli/cli.rb +4 -0
- data/lib/gooddata/cli/commands/api_cmd.rb +4 -0
- data/lib/gooddata/cli/commands/auth_cmd.rb +4 -0
- data/lib/gooddata/cli/commands/console_cmd.rb +4 -0
- data/lib/gooddata/cli/commands/domain_cmd.rb +4 -0
- data/lib/gooddata/cli/commands/process_cmd.rb +4 -0
- data/lib/gooddata/cli/commands/project_cmd.rb +4 -0
- data/lib/gooddata/cli/commands/projects_cmd.rb +4 -0
- data/lib/gooddata/cli/commands/run_ruby_cmd.rb +4 -0
- data/lib/gooddata/cli/commands/scaffold_cmd.rb +4 -0
- data/lib/gooddata/cli/commands/user_cmd.rb +4 -0
- data/lib/gooddata/cli/hooks.rb +4 -0
- data/lib/gooddata/cli/shared.rb +4 -0
- data/lib/gooddata/cli/terminal.rb +4 -0
- data/lib/gooddata/client.rb +4 -0
- data/lib/gooddata/commands/api.rb +4 -0
- data/lib/gooddata/commands/auth.rb +4 -0
- data/lib/gooddata/commands/base.rb +4 -0
- data/lib/gooddata/commands/commands.rb +5 -0
- data/lib/gooddata/commands/datasets.rb +5 -1
- data/lib/gooddata/commands/datawarehouse.rb +4 -0
- data/lib/gooddata/commands/domain.rb +4 -0
- data/lib/gooddata/commands/process.rb +4 -0
- data/lib/gooddata/commands/project.rb +7 -9
- data/lib/gooddata/commands/projects.rb +4 -0
- data/lib/gooddata/commands/role.rb +4 -0
- data/lib/gooddata/commands/runners.rb +4 -0
- data/lib/gooddata/commands/scaffold.rb +4 -0
- data/lib/gooddata/commands/user.rb +4 -0
- data/lib/gooddata/connection.rb +83 -0
- data/lib/gooddata/core/core.rb +4 -0
- data/lib/gooddata/core/logging.rb +4 -0
- data/lib/gooddata/core/nil_logger.rb +4 -0
- data/lib/gooddata/core/project.rb +4 -0
- data/lib/gooddata/core/rest.rb +14 -16
- data/lib/gooddata/core/user.rb +4 -0
- data/lib/gooddata/data/data.rb +4 -0
- data/lib/gooddata/data/guesser.rb +4 -0
- data/lib/gooddata/exceptions/attr_element_not_found.rb +4 -0
- data/lib/gooddata/exceptions/command_failed.rb +4 -0
- data/lib/gooddata/exceptions/exceptions.rb +4 -0
- data/lib/gooddata/exceptions/execution_limit_exceeded.rb +4 -0
- data/lib/gooddata/exceptions/filter_maqlization.rb +16 -0
- data/lib/gooddata/exceptions/malformed_user.rb +15 -0
- data/lib/gooddata/exceptions/no_project_error.rb +4 -0
- data/lib/gooddata/exceptions/object_migration.rb +28 -0
- data/lib/gooddata/exceptions/project_not_found.rb +5 -0
- data/lib/gooddata/exceptions/uncomputable_report.rb +5 -0
- data/lib/gooddata/exceptions/user_in_different_domain.rb +4 -0
- data/lib/gooddata/exceptions/validation_error.rb +4 -0
- data/lib/gooddata/extensions/big_decimal.rb +4 -0
- data/lib/gooddata/extensions/enumerable.rb +4 -0
- data/lib/gooddata/extensions/extensions.rb +4 -0
- data/lib/gooddata/extensions/false.rb +4 -0
- data/lib/gooddata/extensions/hash.rb +4 -0
- data/lib/gooddata/extensions/nil.rb +4 -0
- data/lib/gooddata/extensions/numeric.rb +4 -0
- data/lib/gooddata/extensions/object.rb +4 -0
- data/lib/gooddata/extensions/symbol.rb +4 -0
- data/lib/gooddata/extensions/true.rb +4 -0
- data/lib/gooddata/extract.rb +4 -0
- data/lib/gooddata/goodzilla/goodzilla.rb +87 -77
- data/lib/gooddata/helpers/auth_helpers.rb +6 -2
- data/lib/gooddata/helpers/csv_helper.rb +4 -0
- data/lib/gooddata/helpers/data_helper.rb +4 -0
- data/lib/gooddata/helpers/global_helpers.rb +35 -6
- data/lib/gooddata/helpers/global_helpers_params.rb +34 -7
- data/lib/gooddata/helpers/helpers.rb +4 -0
- data/lib/gooddata/mixins/author.rb +4 -0
- data/lib/gooddata/mixins/content_getter.rb +4 -0
- data/lib/gooddata/mixins/content_property_reader.rb +4 -0
- data/lib/gooddata/mixins/content_property_writer.rb +4 -0
- data/lib/gooddata/mixins/contributor.rb +4 -0
- data/lib/gooddata/mixins/data_getter.rb +4 -0
- data/lib/gooddata/mixins/data_property_reader.rb +4 -0
- data/lib/gooddata/mixins/data_property_writer.rb +4 -0
- data/lib/gooddata/mixins/inspector.rb +4 -0
- data/lib/gooddata/mixins/is_attribute.rb +4 -0
- data/lib/gooddata/mixins/is_dimension.rb +4 -0
- data/lib/gooddata/mixins/is_fact.rb +4 -0
- data/lib/gooddata/mixins/is_label.rb +4 -0
- data/lib/gooddata/mixins/links.rb +4 -0
- data/lib/gooddata/mixins/md_finders.rb +4 -0
- data/lib/gooddata/mixins/md_id_to_uri.rb +4 -0
- data/lib/gooddata/mixins/md_json.rb +4 -0
- data/lib/gooddata/mixins/md_lock.rb +4 -0
- data/lib/gooddata/mixins/md_object_id.rb +5 -1
- data/lib/gooddata/mixins/md_object_indexer.rb +4 -0
- data/lib/gooddata/mixins/md_object_query.rb +4 -0
- data/lib/gooddata/mixins/md_relations.rb +4 -0
- data/lib/gooddata/mixins/meta_getter.rb +4 -0
- data/lib/gooddata/mixins/meta_property_reader.rb +4 -0
- data/lib/gooddata/mixins/meta_property_writer.rb +4 -0
- data/lib/gooddata/mixins/mixins.rb +4 -0
- data/lib/gooddata/mixins/not_attribute.rb +4 -0
- data/lib/gooddata/mixins/not_exportable.rb +4 -0
- data/lib/gooddata/mixins/not_fact.rb +4 -0
- data/lib/gooddata/mixins/not_label.rb +4 -0
- data/lib/gooddata/mixins/not_metric.rb +6 -0
- data/lib/gooddata/mixins/obj_id.rb +4 -0
- data/lib/gooddata/mixins/rest_getters.rb +4 -0
- data/lib/gooddata/mixins/rest_resource.rb +4 -0
- data/lib/gooddata/mixins/root_key_getter.rb +4 -0
- data/lib/gooddata/mixins/root_key_setter.rb +4 -0
- data/lib/gooddata/mixins/timestamps.rb +4 -0
- data/lib/gooddata/models/blueprint/anchor_field.rb +4 -0
- data/lib/gooddata/models/blueprint/attribute_field.rb +4 -0
- data/lib/gooddata/models/blueprint/blueprint.rb +4 -0
- data/lib/gooddata/models/blueprint/blueprint_field.rb +4 -0
- data/lib/gooddata/models/blueprint/dashboard_builder.rb +4 -0
- data/lib/gooddata/models/blueprint/dataset_blueprint.rb +6 -0
- data/lib/gooddata/models/blueprint/date_dimension.rb +4 -0
- data/lib/gooddata/models/blueprint/fact_field.rb +4 -0
- data/lib/gooddata/models/blueprint/label_field.rb +4 -0
- data/lib/gooddata/models/blueprint/project_blueprint.rb +6 -0
- data/lib/gooddata/models/blueprint/project_builder.rb +4 -0
- data/lib/gooddata/models/blueprint/reference_field.rb +4 -0
- data/lib/gooddata/models/blueprint/schema_blueprint.rb +4 -0
- data/lib/gooddata/models/blueprint/schema_builder.rb +4 -0
- data/lib/gooddata/models/blueprint/to_manifest.rb +17 -1
- data/lib/gooddata/models/blueprint/to_wire.rb +4 -0
- data/lib/gooddata/models/datawarehouse.rb +5 -0
- data/lib/gooddata/models/domain.rb +25 -7
- data/lib/gooddata/models/execution.rb +4 -0
- data/lib/gooddata/models/execution_detail.rb +4 -0
- data/lib/gooddata/models/from_wire.rb +4 -0
- data/lib/gooddata/models/invitation.rb +4 -0
- data/lib/gooddata/models/links.rb +4 -0
- data/lib/gooddata/models/membership.rb +4 -0
- data/lib/gooddata/models/metadata.rb +37 -10
- data/lib/gooddata/models/metadata/attribute.rb +6 -0
- data/lib/gooddata/models/metadata/dashboard.rb +54 -16
- data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +60 -0
- data/lib/gooddata/models/metadata/dashboard/filter_item.rb +15 -0
- data/lib/gooddata/models/metadata/dashboard/report_item.rb +51 -0
- data/lib/gooddata/models/metadata/dashboard_tab.rb +88 -0
- data/lib/gooddata/models/metadata/dataset.rb +4 -0
- data/lib/gooddata/models/metadata/dimension.rb +4 -0
- data/lib/gooddata/models/metadata/fact.rb +6 -0
- data/lib/gooddata/models/metadata/label.rb +15 -0
- data/lib/gooddata/models/metadata/metadata.rb +4 -0
- data/lib/gooddata/models/metadata/metric.rb +5 -4
- data/lib/gooddata/models/metadata/report.rb +62 -16
- data/lib/gooddata/models/metadata/report_definition.rb +44 -47
- data/lib/gooddata/models/metadata/variable.rb +4 -0
- data/lib/gooddata/models/model.rb +85 -36
- data/lib/gooddata/models/models.rb +4 -0
- data/lib/gooddata/models/module_constants.rb +4 -0
- data/lib/gooddata/models/process.rb +4 -0
- data/lib/gooddata/models/profile.rb +13 -0
- data/lib/gooddata/models/project.rb +173 -92
- data/lib/gooddata/models/project_creator.rb +18 -10
- data/lib/gooddata/models/project_metadata.rb +4 -0
- data/lib/gooddata/models/project_role.rb +4 -0
- data/lib/gooddata/models/report_data_result.rb +217 -125
- data/lib/gooddata/models/schedule.rb +140 -65
- data/lib/gooddata/models/tab_builder.rb +4 -0
- data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +4 -0
- data/lib/gooddata/models/user_filters/user_filter.rb +4 -0
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +98 -56
- data/lib/gooddata/models/user_filters/user_filters.rb +4 -0
- data/lib/gooddata/models/user_filters/variable_user_filter.rb +4 -0
- data/lib/gooddata/rest/client.rb +41 -38
- data/lib/gooddata/rest/connection.rb +91 -20
- data/lib/gooddata/rest/connections/rest_client_connection.rb +5 -1
- data/lib/gooddata/rest/object.rb +9 -1
- data/lib/gooddata/rest/object_factory.rb +5 -1
- data/lib/gooddata/rest/resource.rb +5 -1
- data/lib/gooddata/rest/rest.rb +4 -0
- data/lib/gooddata/version.rb +5 -1
- data/spec/bricks/bricks_spec.rb +4 -0
- data/spec/data/blueprints/test_project_model_spec.json +2 -2
- data/spec/data/gooddata_version_process/gooddata_version.rb +6 -0
- data/spec/data/hello_world_process/hello_world.rb +6 -0
- data/spec/data/manifests/test_project.json +5 -5
- data/spec/data/reports/left_attr_report.json +108 -0
- data/spec/data/reports/metric_only_one_line.json +83 -0
- data/spec/data/reports/report_1.json +197 -0
- data/spec/data/reports/top_attr_report.json +108 -0
- data/spec/data/ruby_params_process/ruby_params.rb +6 -0
- data/spec/data/ruby_process/process.rb +6 -0
- data/spec/environment/default.rb +5 -0
- data/spec/environment/develop.rb +10 -5
- data/spec/environment/environment.rb +4 -0
- data/spec/environment/hotfix.rb +5 -1
- data/spec/environment/production.rb +4 -0
- data/spec/environment/release.rb +4 -0
- data/spec/environment/staging.rb +30 -0
- data/spec/environment/staging_3.rb +37 -0
- data/spec/helpers/blueprint_helper.rb +4 -0
- data/spec/helpers/cli_helper.rb +4 -0
- data/spec/helpers/connection_helper.rb +24 -17
- data/spec/helpers/crypto_helper.rb +6 -0
- data/spec/helpers/csv_helper.rb +4 -0
- data/spec/helpers/process_helper.rb +5 -1
- data/spec/helpers/project_helper.rb +34 -29
- data/spec/helpers/schedule_helper.rb +4 -0
- data/spec/helpers/spec_helper.rb +4 -0
- data/spec/integration/blueprint_updates_spec.rb +28 -20
- data/spec/integration/command_datawarehouse_spec.rb +6 -0
- data/spec/integration/command_projects_spec.rb +6 -4
- data/spec/integration/create_from_template_spec.rb +6 -0
- data/spec/integration/create_project_spec.rb +6 -0
- data/spec/integration/deprecated_load_spec.rb +58 -0
- data/spec/integration/full_process_schedule_spec.rb +9 -0
- data/spec/integration/full_project_spec.rb +63 -9
- data/spec/integration/over_to_user_filters_spec.rb +7 -2
- data/spec/integration/partial_md_export_import_spec.rb +6 -0
- data/spec/integration/project_spec.rb +12 -6
- data/spec/integration/rest_spec.rb +6 -2
- data/spec/integration/schedule_spec.rb +627 -0
- data/spec/integration/user_filters_spec.rb +122 -21
- data/spec/integration/variables_spec.rb +8 -15
- data/spec/logging_in_logging_out_spec.rb +58 -0
- data/spec/spec_helper.rb +10 -5
- data/spec/unit/bricks/bricks_spec.rb +4 -0
- data/spec/unit/bricks/middleware/aws_middelware_spec.rb +4 -0
- data/spec/unit/bricks/middleware/bench_middleware_spec.rb +4 -0
- data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +4 -0
- data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +4 -0
- data/spec/unit/bricks/middleware/logger_middleware_spec.rb +4 -0
- data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +4 -0
- data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +4 -0
- data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +4 -0
- data/spec/unit/cli/cli_spec.rb +4 -0
- data/spec/unit/cli/commands/cmd_api_spec.rb +4 -0
- data/spec/unit/cli/commands/cmd_auth_spec.rb +4 -0
- data/spec/unit/cli/commands/cmd_domain_spec.rb +4 -0
- data/spec/unit/cli/commands/cmd_process_spec.rb +4 -0
- data/spec/unit/cli/commands/cmd_project_spec.rb +4 -0
- data/spec/unit/cli/commands/cmd_role_spec.rb +4 -0
- data/spec/unit/cli/commands/cmd_run_ruby_spec.rb +4 -0
- data/spec/unit/cli/commands/cmd_scaffold_spec.rb +6 -0
- data/spec/unit/cli/commands/cmd_user_spec.rb +6 -0
- data/spec/unit/commands/command_api_spec.rb +6 -0
- data/spec/unit/commands/command_auth_spec.rb +6 -0
- data/spec/unit/commands/command_dataset_spec.rb +10 -4
- data/spec/unit/commands/command_process_spec.rb +6 -0
- data/spec/unit/commands/command_projects_spec.rb +6 -0
- data/spec/unit/commands/command_scaffold_spec.rb +6 -0
- data/spec/unit/commands/command_user_spec.rb +6 -0
- data/spec/unit/core/connection_spec.rb +6 -0
- data/spec/unit/core/logging_spec.rb +4 -0
- data/spec/unit/core/nil_logger_spec.rb +4 -0
- data/spec/unit/core/project_spec.rb +4 -0
- data/spec/unit/data/guesser_spec.rb +6 -2
- data/spec/unit/extensions/hash_spec.rb +4 -0
- data/spec/unit/godzilla/goodzilla_spec.rb +4 -0
- data/spec/unit/helpers/csv_helper_spec.rb +4 -0
- data/spec/unit/helpers/data_helper_spec.rb +4 -0
- data/spec/unit/helpers/global_helpers_spec.rb +54 -0
- data/spec/unit/helpers_spec.rb +6 -1
- data/spec/unit/models/blueprint/attributes_spec.rb +5 -0
- data/spec/unit/models/blueprint/dataset_spec.rb +5 -0
- data/spec/unit/models/blueprint/labels_spec.rb +5 -0
- data/spec/unit/models/blueprint/project_blueprint_spec.rb +5 -0
- data/spec/unit/models/blueprint/reference_spec.rb +5 -0
- data/spec/unit/models/blueprint/schema_builder_spec.rb +4 -0
- data/spec/unit/models/blueprint/to_wire_spec.rb +5 -0
- data/spec/unit/models/domain_spec.rb +9 -7
- data/spec/unit/models/execution_spec.rb +6 -0
- data/spec/unit/models/from_wire_spec.rb +4 -0
- data/spec/unit/models/invitation_spec.rb +4 -0
- data/spec/unit/models/membership_spec.rb +4 -0
- data/spec/unit/models/metadata_spec.rb +46 -0
- data/spec/unit/models/metric_spec.rb +4 -0
- data/spec/unit/models/model_spec.rb +4 -0
- data/spec/unit/models/params_spec.rb +4 -0
- data/spec/unit/models/profile_spec.rb +4 -0
- data/spec/unit/models/project_creator_spec.rb +127 -0
- data/spec/unit/models/project_role_spec.rb +4 -0
- data/spec/unit/models/project_spec.rb +4 -0
- data/spec/unit/models/report_result_data_spec.rb +193 -0
- data/spec/unit/models/schedule_spec.rb +241 -386
- data/spec/unit/models/to_manifest_spec.rb +21 -0
- data/spec/unit/models/{unit_project.rb → unit_project_spec.rb} +21 -18
- data/spec/unit/models/user_filters_spec.rb +7 -1
- data/spec/unit/models/variable_spec.rb +6 -0
- data/spec/unit/rest/polling_spec.rb +8 -5
- data/spec/unit/rest/resource_spec.rb +4 -0
- metadata +190 -129
- data/.autotest +0 -2
- data/.travis.yml +0 -22
- data/examples.rb +0 -69
- data/lib/gooddata/models/data_result.rb +0 -38
- data/lib/gooddata/models/empty_result.rb +0 -57
- data/spec/unit/models/project_creator.rb +0 -73
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2015 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.
|
|
2
6
|
|
|
3
7
|
require_relative '../rest/resource'
|
|
4
8
|
require_relative '../extensions/hash'
|
|
@@ -23,7 +27,7 @@ module GoodData
|
|
|
23
27
|
:timezone => nil,
|
|
24
28
|
:params => {},
|
|
25
29
|
:hiddenParams => {},
|
|
26
|
-
:reschedule => nil
|
|
30
|
+
# :reschedule => nil
|
|
27
31
|
}
|
|
28
32
|
}
|
|
29
33
|
|
|
@@ -90,27 +94,30 @@ module GoodData
|
|
|
90
94
|
|
|
91
95
|
fail 'Process ID has to be provided' if process_id.blank?
|
|
92
96
|
fail 'Executable has to be provided' if executable.blank?
|
|
97
|
+
fail 'Trigger schedule has to be provided' if trigger.blank?
|
|
98
|
+
|
|
99
|
+
schedule = c.create(GoodData::Schedule, GoodData::Helpers.deep_stringify_keys(GoodData::Helpers.deep_dup(SCHEDULE_TEMPLATE)), client: c, project: p)
|
|
93
100
|
|
|
94
101
|
default_opts = {
|
|
95
102
|
:type => 'MSETL',
|
|
96
103
|
:timezone => 'UTC',
|
|
104
|
+
:state => 'ENABLED',
|
|
97
105
|
:params => {
|
|
98
106
|
'PROCESS_ID' => process_id,
|
|
99
107
|
'EXECUTABLE' => executable
|
|
100
108
|
},
|
|
101
|
-
:reschedule =>
|
|
109
|
+
# :reschedule => nil
|
|
102
110
|
}
|
|
103
111
|
|
|
104
|
-
schedule = c.create(GoodData::Schedule, GoodData::Helpers.deep_stringify_keys(GoodData::Helpers.deep_dup(SCHEDULE_TEMPLATE)), client: c, project: p)
|
|
105
|
-
|
|
106
112
|
schedule.name = options[:name]
|
|
107
|
-
schedule.hidden_params = options[:hidden_params]
|
|
108
113
|
schedule.set_trigger(trigger)
|
|
109
114
|
schedule.params = default_opts[:params].merge(options[:params] || {})
|
|
115
|
+
schedule.hidden_params = options[:hidden_params] || {}
|
|
110
116
|
schedule.timezone = options[:timezone] || default_opts[:timezone]
|
|
117
|
+
schedule.state = options[:state] || default_opts[:state]
|
|
111
118
|
schedule.schedule_type = options[:type] || default_opts[:type]
|
|
112
|
-
schedule.reschedule = options[:reschedule]
|
|
113
|
-
schedule
|
|
119
|
+
schedule.reschedule = options[:reschedule] if options[:reschedule]
|
|
120
|
+
schedule
|
|
114
121
|
end
|
|
115
122
|
end
|
|
116
123
|
|
|
@@ -121,13 +128,13 @@ module GoodData
|
|
|
121
128
|
def initialize(json)
|
|
122
129
|
json = GoodData::Helpers.deep_stringify_keys(json)
|
|
123
130
|
super
|
|
124
|
-
GoodData::Helpers.decode_params(json['schedule']['params'] || {})
|
|
125
|
-
GoodData::Helpers.decode_params(json['schedule']['hiddenParams'] || {})
|
|
126
131
|
@json = json
|
|
132
|
+
self.params = GoodData::Helpers.decode_params(json['schedule']['params'] || {})
|
|
133
|
+
self.hidden_params = GoodData::Helpers.decode_params(json['schedule']['hiddenParams'] || {})
|
|
127
134
|
end
|
|
128
135
|
|
|
129
136
|
def after
|
|
130
|
-
schedules
|
|
137
|
+
project.schedules(trigger_id)
|
|
131
138
|
end
|
|
132
139
|
|
|
133
140
|
def after=(schedule)
|
|
@@ -139,7 +146,7 @@ module GoodData
|
|
|
139
146
|
|
|
140
147
|
# Deletes schedule
|
|
141
148
|
def delete
|
|
142
|
-
client.delete
|
|
149
|
+
saved? ? client.delete(uri) : nil
|
|
143
150
|
end
|
|
144
151
|
|
|
145
152
|
# Is schedule enabled?
|
|
@@ -180,7 +187,8 @@ module GoodData
|
|
|
180
187
|
# @option opts [Boolean] :wait Wait for execution result
|
|
181
188
|
# @return [Object] Raw Response
|
|
182
189
|
def execute(opts = {})
|
|
183
|
-
|
|
190
|
+
return nil unless saved?
|
|
191
|
+
opts = { :wait => true }.merge(opts)
|
|
184
192
|
data = {
|
|
185
193
|
:execution => {}
|
|
186
194
|
}
|
|
@@ -195,7 +203,7 @@ module GoodData
|
|
|
195
203
|
#
|
|
196
204
|
# @return [String] Executions URL
|
|
197
205
|
def execution_url
|
|
198
|
-
@json['schedule']['links']['executions']
|
|
206
|
+
saved? ? @json['schedule']['links']['executions'] : nil
|
|
199
207
|
end
|
|
200
208
|
|
|
201
209
|
# Returns execution state
|
|
@@ -205,6 +213,10 @@ module GoodData
|
|
|
205
213
|
@json['schedule']['state']
|
|
206
214
|
end
|
|
207
215
|
|
|
216
|
+
def state=(a_state)
|
|
217
|
+
@json['schedule']['state'] = a_state
|
|
218
|
+
end
|
|
219
|
+
|
|
208
220
|
# Returns execution timezone
|
|
209
221
|
#
|
|
210
222
|
# @return [String] Execution timezone
|
|
@@ -300,19 +312,65 @@ module GoodData
|
|
|
300
312
|
@dirty = true
|
|
301
313
|
end
|
|
302
314
|
|
|
303
|
-
# Returns
|
|
315
|
+
# Returns enumerator of executions
|
|
304
316
|
#
|
|
305
317
|
# @return [Array] Raw Executions JSON
|
|
306
318
|
def executions
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
client.
|
|
319
|
+
return nil unless @json
|
|
320
|
+
url = @json['schedule']['links']['executions']
|
|
321
|
+
Enumerator.new do |y|
|
|
322
|
+
loop do
|
|
323
|
+
res = client.get url
|
|
324
|
+
res['executions']['paging']['next']
|
|
325
|
+
res['executions']['items'].each do |execution|
|
|
326
|
+
y << client.create(Execution, execution, :project => project)
|
|
327
|
+
end
|
|
328
|
+
url = res['executions']['paging']['next']
|
|
329
|
+
break unless url
|
|
312
330
|
end
|
|
313
331
|
end
|
|
314
332
|
end
|
|
315
333
|
|
|
334
|
+
# Returns hidden_params as Hash
|
|
335
|
+
#
|
|
336
|
+
# @return [Hash] Hidden Parameters
|
|
337
|
+
def hidden_params
|
|
338
|
+
@json['schedule']['hiddenParams']
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
# Updates params by merging the current params with new ones
|
|
342
|
+
#
|
|
343
|
+
# @param params_to_merge [Hash] params
|
|
344
|
+
# @return [GoodData::Schedule] Returns self
|
|
345
|
+
def update_params(params_to_merge)
|
|
346
|
+
params_to_merge.each do |k, v|
|
|
347
|
+
set_parameter(k, v)
|
|
348
|
+
end
|
|
349
|
+
@dirty = true
|
|
350
|
+
self
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
# Updates hidden params by merging the current params with new ones
|
|
354
|
+
#
|
|
355
|
+
# @param params_to_merge [Hash] params
|
|
356
|
+
# @return [GoodData::Schedule] Returns self
|
|
357
|
+
def update_hidden_params(params_to_merge)
|
|
358
|
+
params_to_merge.each do |k, v|
|
|
359
|
+
set_hidden_parameter(k, v)
|
|
360
|
+
end
|
|
361
|
+
@dirty = true
|
|
362
|
+
self
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
# Assigns hidden parameters
|
|
366
|
+
#
|
|
367
|
+
# @param new_hidden_param [String] Hidden parameters to be set
|
|
368
|
+
def hidden_params=(new_hidden_params = {})
|
|
369
|
+
@json['schedule']['hiddenParams'] = new_hidden_params
|
|
370
|
+
@dirty = true
|
|
371
|
+
self
|
|
372
|
+
end
|
|
373
|
+
|
|
316
374
|
# Returns params as Hash
|
|
317
375
|
#
|
|
318
376
|
# @return [Hash] Parameters
|
|
@@ -328,23 +386,9 @@ module GoodData
|
|
|
328
386
|
'PROCESS_ID' => process_id,
|
|
329
387
|
'EXECUTABLE' => executable
|
|
330
388
|
}
|
|
331
|
-
@json['schedule']['params'] = default_params.merge(new_params
|
|
332
|
-
@dirty = true
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
# Returns hidden_params as Hash
|
|
336
|
-
#
|
|
337
|
-
# @return [Hash] Hidden Parameters
|
|
338
|
-
def hidden_params
|
|
339
|
-
@json['schedule']['hiddenParams'] || {}
|
|
340
|
-
end
|
|
341
|
-
|
|
342
|
-
# Assigns hidden parameters
|
|
343
|
-
#
|
|
344
|
-
# @param new_hidden_param [String] Hidden parameters to be set
|
|
345
|
-
def hidden_params=(new_hidden_params = {})
|
|
346
|
-
@json['schedule']['hiddenParams'] = new_hidden_params || {}
|
|
389
|
+
@json['schedule']['params'] = default_params.merge(new_params)
|
|
347
390
|
@dirty = true
|
|
391
|
+
self
|
|
348
392
|
end
|
|
349
393
|
|
|
350
394
|
# Saves object if dirty
|
|
@@ -355,33 +399,52 @@ module GoodData
|
|
|
355
399
|
fail 'A timezone has to be provided' if timezone.blank?
|
|
356
400
|
fail 'Schedule type has to be provided' if schedule_type.blank?
|
|
357
401
|
if @dirty
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
'type' => @json['schedule']['type'],
|
|
362
|
-
'state' => @json['schedule']['state'],
|
|
363
|
-
'timezone' => @json['schedule']['timezone'],
|
|
364
|
-
'reschedule' => @json['schedule']['reschedule'],
|
|
365
|
-
'cron' => @json['schedule']['cron'],
|
|
366
|
-
'triggerScheduleId' => trigger_id,
|
|
367
|
-
'params' => GoodData::Helpers.encode_params(params, false),
|
|
368
|
-
'hiddenParams' => GoodData::Helpers.encode_params(hidden_params, true)
|
|
369
|
-
}.compact
|
|
370
|
-
}
|
|
371
|
-
if uri
|
|
372
|
-
res = client.put(uri, update_json)
|
|
373
|
-
@json = res
|
|
402
|
+
if saved?
|
|
403
|
+
res = client.put(uri, to_update_payload)
|
|
404
|
+
@json = Schedule.new(res).json
|
|
374
405
|
else
|
|
375
|
-
res = client.post "/gdc/projects/#{project.pid}/schedules",
|
|
406
|
+
res = client.post "/gdc/projects/#{project.pid}/schedules", to_update_payload
|
|
376
407
|
fail 'Unable to create new schedule' if res.nil?
|
|
377
408
|
new_obj_json = client.get res['schedule']['links']['self']
|
|
378
|
-
@json = new_obj_json
|
|
409
|
+
@json = Schedule.new(new_obj_json).json
|
|
379
410
|
end
|
|
380
411
|
@dirty = false
|
|
381
412
|
end
|
|
382
413
|
self
|
|
383
414
|
end
|
|
384
415
|
|
|
416
|
+
# Updates params at key k with val v
|
|
417
|
+
#
|
|
418
|
+
# @param k [String] key
|
|
419
|
+
# @param v [Object] value
|
|
420
|
+
# @return [GoodData::Schedule] Returns self
|
|
421
|
+
def set_parameter(k, v)
|
|
422
|
+
params[k] = v
|
|
423
|
+
@dirty = true
|
|
424
|
+
self
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
# Updates hidden params at key k with val v
|
|
428
|
+
#
|
|
429
|
+
# @param k [String] key
|
|
430
|
+
# @param v [Object] value
|
|
431
|
+
# @return [GoodData::Schedule] Returns self
|
|
432
|
+
def set_hidden_parameter(k, v)
|
|
433
|
+
hidden_params[k] = v
|
|
434
|
+
@dirty = true
|
|
435
|
+
self
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
def schedule_type
|
|
439
|
+
json['schedule']['type']
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
def schedule_type=(type)
|
|
443
|
+
json['schedule']['type'] = type
|
|
444
|
+
@dirty = true
|
|
445
|
+
self
|
|
446
|
+
end
|
|
447
|
+
|
|
385
448
|
def time_based?
|
|
386
449
|
cron != nil
|
|
387
450
|
end
|
|
@@ -396,18 +459,11 @@ module GoodData
|
|
|
396
459
|
cron: cron,
|
|
397
460
|
trigger_id: trigger_id,
|
|
398
461
|
timezone: timezone,
|
|
399
|
-
uri: uri
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
json['schedule']['type']
|
|
405
|
-
end
|
|
406
|
-
|
|
407
|
-
def schedule_type=(type)
|
|
408
|
-
json['schedule']['type'] = type
|
|
409
|
-
@dirty = true
|
|
410
|
-
self
|
|
462
|
+
uri: uri,
|
|
463
|
+
reschedule: reschedule,
|
|
464
|
+
executable: executable,
|
|
465
|
+
process_id: process_id
|
|
466
|
+
}
|
|
411
467
|
end
|
|
412
468
|
|
|
413
469
|
def trigger_id
|
|
@@ -450,5 +506,24 @@ module GoodData
|
|
|
450
506
|
def ==(other)
|
|
451
507
|
other.respond_to?(:uri) && other.uri == uri && other.respond_to?(:to_hash) && other.to_hash == to_hash
|
|
452
508
|
end
|
|
509
|
+
|
|
510
|
+
def to_update_payload
|
|
511
|
+
res = {
|
|
512
|
+
'schedule' => {
|
|
513
|
+
'name' => name,
|
|
514
|
+
'type' => type,
|
|
515
|
+
'state' => state,
|
|
516
|
+
'timezone' => timezone,
|
|
517
|
+
'cron' => cron,
|
|
518
|
+
'triggerScheduleId' => trigger_id,
|
|
519
|
+
'params' => GoodData::Helpers.encode_public_params(params),
|
|
520
|
+
'hiddenParams' => GoodData::Helpers.encode_hidden_params(hidden_params)
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
res['schedule']['reschedule'] = reschedule if reschedule
|
|
525
|
+
|
|
526
|
+
res
|
|
527
|
+
end
|
|
453
528
|
end
|
|
454
529
|
end
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2015 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.
|
|
2
6
|
|
|
3
7
|
module GoodData
|
|
4
8
|
class UserFilter < GoodData::MdObject
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2015 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.
|
|
2
6
|
|
|
3
7
|
module GoodData
|
|
4
8
|
module UserFilterBuilder
|
|
@@ -224,7 +228,11 @@ module GoodData
|
|
|
224
228
|
else
|
|
225
229
|
"[#{label.attribute_uri}] IN (#{element_uris.compact.sort.map { |e| '[' + e + ']' }.join(', ')})"
|
|
226
230
|
end
|
|
227
|
-
[
|
|
231
|
+
if options[:ignore_missing_values]
|
|
232
|
+
[expression, []]
|
|
233
|
+
else
|
|
234
|
+
[expression, errors]
|
|
235
|
+
end
|
|
228
236
|
end
|
|
229
237
|
|
|
230
238
|
# Encapuslates the creation of filter
|
|
@@ -248,28 +256,48 @@ module GoodData
|
|
|
248
256
|
# @param filters [Array<Hash>] Filters definition
|
|
249
257
|
# @return [Array] first is list of MAQL statements
|
|
250
258
|
def self.maqlify_filters(filters, options = {})
|
|
251
|
-
|
|
252
|
-
users_cache = options[:users_cache]
|
|
259
|
+
fail_early = options[:fail_early] == false ? false : true
|
|
260
|
+
users_cache = options[:users_cache]
|
|
253
261
|
labels_cache = create_label_cache(filters, options)
|
|
254
262
|
small_labels = get_small_labels(labels_cache)
|
|
255
263
|
lookups_cache = create_lookups_cache(small_labels)
|
|
256
264
|
attrs_cache = create_attrs_cache(filters, options)
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
265
|
+
create_filter_proc = proc do |login, f|
|
|
266
|
+
expression, errors = create_expression(f, labels_cache, lookups_cache, attrs_cache, options)
|
|
267
|
+
profiles_uri = if options[:type] == :muf
|
|
268
|
+
'/gdc/account/profile/' + login
|
|
269
|
+
elsif options[:type] == :variable
|
|
270
|
+
(users_cache[login] && users_cache[login].uri)
|
|
271
|
+
else
|
|
272
|
+
fail 'Unsuported type in maqlify_filters.'
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
if profiles_uri && expression
|
|
276
|
+
[create_user_filter(expression, profiles_uri)] + errors
|
|
277
|
+
else
|
|
278
|
+
[] + errors
|
|
268
279
|
end
|
|
269
280
|
end
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
281
|
+
|
|
282
|
+
# if fail early process until first error
|
|
283
|
+
results = if fail_early
|
|
284
|
+
x = filters.inject([true, []]) do |(enough, a), e|
|
|
285
|
+
login = e[:login]
|
|
286
|
+
if enough
|
|
287
|
+
y = e[:filters].pmapcat { |f| create_filter_proc.call(login, f) }
|
|
288
|
+
[!y.any? { |r| r[:type] == :error }, a.concat(y)]
|
|
289
|
+
else
|
|
290
|
+
[false, a]
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
x.last
|
|
294
|
+
else
|
|
295
|
+
filters.flat_map do |filter|
|
|
296
|
+
login = filter[:login]
|
|
297
|
+
filter[:filters].pmapcat { |f| create_filter_proc.call(login, f) }
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
results.group_by { |i| i[:type] }.values_at(:filter, :error).map { |i| i || [] }
|
|
273
301
|
end
|
|
274
302
|
|
|
275
303
|
def self.resolve_user_filter(user = [], project = [])
|
|
@@ -325,19 +353,26 @@ module GoodData
|
|
|
325
353
|
[to_create, to_delete]
|
|
326
354
|
end
|
|
327
355
|
|
|
328
|
-
def self.execute_mufs(
|
|
356
|
+
def self.execute_mufs(user_filters, options = {})
|
|
329
357
|
client = options[:client]
|
|
330
358
|
project = options[:project]
|
|
331
|
-
|
|
359
|
+
ignore_missing_values = options[:ignore_missing_values]
|
|
360
|
+
users_must_exist = options[:users_must_exist] == false ? false : true
|
|
332
361
|
dry_run = options[:dry_run]
|
|
333
|
-
|
|
362
|
+
|
|
363
|
+
filters = normalize_filters(user_filters)
|
|
364
|
+
user_filters, errors = maqlify_filters(filters, options.merge(users_must_exist: users_must_exist, type: :muf))
|
|
365
|
+
|
|
366
|
+
fail GoodData::FilterMaqlizationError, errors if !ignore_missing_values && !errors.empty?
|
|
367
|
+
filters = user_filters.map { |data| client.create(MandatoryUserFilter, data, project: project) }
|
|
368
|
+
to_create, to_delete = resolve_user_filters(filters, project.data_permissions)
|
|
369
|
+
|
|
334
370
|
GoodData.logger.warn("Data permissions computed: #{to_create.count} to create and #{to_delete.count} to delete")
|
|
335
|
-
return
|
|
371
|
+
return { created: to_create, deleted: to_delete } if dry_run
|
|
336
372
|
|
|
337
|
-
to_create.each_slice(100).flat_map do |batch|
|
|
338
|
-
batch.
|
|
373
|
+
create_results = to_create.each_slice(100).flat_map do |batch|
|
|
374
|
+
batch.pmapcat do |related_uri, group|
|
|
339
375
|
group.each(&:save)
|
|
340
|
-
|
|
341
376
|
res = client.get("/gdc/md/#{project.pid}/userfilters?users=#{related_uri}")
|
|
342
377
|
items = res['userFilters']['items'].empty? ? [] : res['userFilters']['items'].first['userFilters']
|
|
343
378
|
|
|
@@ -349,32 +384,40 @@ module GoodData
|
|
|
349
384
|
}]
|
|
350
385
|
}
|
|
351
386
|
}
|
|
352
|
-
client.post("/gdc/md/#{project.pid}/userfilters", payload)
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
to_delete.each_slice(100).flat_map do |batch|
|
|
357
|
-
batch.peach do |related_uri, group|
|
|
358
|
-
if related_uri
|
|
359
|
-
res = client.get("/gdc/md/#{project.pid}/userfilters?users=#{related_uri}")
|
|
360
|
-
items = res['userFilters']['items'].empty? ? [] : res['userFilters']['items'].first['userFilters']
|
|
361
|
-
payload = {
|
|
362
|
-
'userFilters' => {
|
|
363
|
-
'items' => [
|
|
364
|
-
{
|
|
365
|
-
'user' => related_uri,
|
|
366
|
-
'userFilters' => items - group.map(&:uri)
|
|
367
|
-
}
|
|
368
|
-
]
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
client.post("/gdc/md/#{project.pid}/userfilters", payload)
|
|
372
|
-
end
|
|
373
|
-
group.peach(&:delete)
|
|
374
|
-
end
|
|
387
|
+
res = client.post("/gdc/md/#{project.pid}/userfilters", payload)
|
|
388
|
+
|
|
389
|
+
# turn the errors from hashes into array of hashes
|
|
390
|
+
res['userFiltersUpdateResult'].flat_map { |k, v| v.map { |r| { status: k.to_sym, user: r, type: :create } } }.map { |result| result[:status] == :failed ? result.merge(GoodData::Helpers.symbolize_keys(result[:user])) : result }
|
|
375
391
|
end
|
|
376
392
|
end
|
|
377
|
-
[
|
|
393
|
+
delete_results = unless options[:do_not_touch_filters_that_are_not_mentioned]
|
|
394
|
+
to_delete.each_slice(100).flat_map do |batch|
|
|
395
|
+
batch.flat_map do |related_uri, group|
|
|
396
|
+
results = []
|
|
397
|
+
if related_uri
|
|
398
|
+
res = client.get("/gdc/md/#{project.pid}/userfilters?users=#{related_uri}")
|
|
399
|
+
items = res['userFilters']['items'].empty? ? [] : res['userFilters']['items'].first['userFilters']
|
|
400
|
+
payload = {
|
|
401
|
+
'userFilters' => {
|
|
402
|
+
'items' => [
|
|
403
|
+
{
|
|
404
|
+
'user' => related_uri,
|
|
405
|
+
'userFilters' => items - group.map(&:uri)
|
|
406
|
+
}
|
|
407
|
+
]
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
res = client.post("/gdc/md/#{project.pid}/userfilters", payload)
|
|
411
|
+
results.concat(res['userFiltersUpdateResult']
|
|
412
|
+
.flat_map { |k, v| v.map { |r| { status: k.to_sym, user: r, type: :delete } } }
|
|
413
|
+
.map { |result| result[:status] == :failed ? result.merge(GoodData::Helpers.symbolize_keys(result[:user])) : result })
|
|
414
|
+
end
|
|
415
|
+
group.peach(&:delete)
|
|
416
|
+
results
|
|
417
|
+
end
|
|
418
|
+
end
|
|
419
|
+
end
|
|
420
|
+
{ created: to_create, deleted: to_delete, results: create_results + (delete_results || []) }
|
|
378
421
|
end
|
|
379
422
|
|
|
380
423
|
private
|
|
@@ -421,25 +464,24 @@ module GoodData
|
|
|
421
464
|
ignore_missing_values = options[:ignore_missing_values]
|
|
422
465
|
users_must_exist = options[:users_must_exist] == false ? false : true
|
|
423
466
|
filters = normalize_filters(user_filters)
|
|
424
|
-
domain = options[:domain]
|
|
425
|
-
users = project.users
|
|
467
|
+
# domain = options[:domain]
|
|
426
468
|
# users = domain ? project.users : project.users
|
|
469
|
+
users = project.users
|
|
427
470
|
users_cache = create_cache(users, :login)
|
|
428
471
|
missing_users = get_missing_users(filters, options.merge(users_cache: users_cache))
|
|
429
472
|
user_filters, errors = if missing_users.empty?
|
|
430
473
|
verify_existing_users(filters, project: project, users_must_exist: users_must_exist, users_cache: users_cache)
|
|
431
474
|
maqlify_filters(filters, options.merge(users_cache: users_cache, users_must_exist: users_must_exist))
|
|
432
475
|
elsif missing_users.count < 100
|
|
433
|
-
verify_existing_users(filters, project: project, users_must_exist: users_must_exist, users_cache: users_cache
|
|
434
|
-
maqlify_filters(filters, options.merge(users_cache: users_cache, users_must_exist: users_must_exist
|
|
476
|
+
verify_existing_users(filters, project: project, users_must_exist: users_must_exist, users_cache: users_cache)
|
|
477
|
+
maqlify_filters(filters, options.merge(users_cache: users_cache, users_must_exist: users_must_exist))
|
|
435
478
|
else
|
|
436
|
-
users += domain.users
|
|
437
479
|
users_cache = create_cache(users, :login)
|
|
438
|
-
verify_existing_users(filters, project: project, users_must_exist: users_must_exist, users_cache: users_cache
|
|
439
|
-
maqlify_filters(filters, options.merge(users_cache: users_cache, users_must_exist: users_must_exist
|
|
480
|
+
verify_existing_users(filters, project: project, users_must_exist: users_must_exist, users_cache: users_cache)
|
|
481
|
+
maqlify_filters(filters, options.merge(users_cache: users_cache, users_must_exist: users_must_exist))
|
|
440
482
|
end
|
|
441
483
|
|
|
442
|
-
fail
|
|
484
|
+
fail GoodData::FilterMaqlizationError, errors if !ignore_missing_values && !errors.empty?
|
|
443
485
|
filters = user_filters.map { |data| client.create(klass, data, project: project) }
|
|
444
486
|
resolve_user_filters(filters, project_filters)
|
|
445
487
|
end
|