gooddata-edge 0.6.27.edge
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 +7 -0
- data/.document +5 -0
- data/.gitignore +36 -0
- data/.rspec +3 -0
- data/.rubocop.yml +89 -0
- data/.yardopts +22 -0
- data/CHANGELOG.md +196 -0
- data/CLI.md +439 -0
- data/DEPENDENCIES.md +817 -0
- data/Gemfile +4 -0
- data/Guardfile +5 -0
- data/LICENSE +22 -0
- data/LICENSE.rb +5 -0
- data/README.md +75 -0
- data/Rakefile +179 -0
- data/TODO.md +32 -0
- data/authors.sh +4 -0
- data/bin/gooddata +7 -0
- data/dependency_decisions.yml +104 -0
- data/gooddata +9 -0
- data/gooddata.gemspec +63 -0
- data/lib/gooddata.rb +31 -0
- data/lib/gooddata/app/app.rb +16 -0
- data/lib/gooddata/bricks/base_downloader.rb +86 -0
- data/lib/gooddata/bricks/brick.rb +38 -0
- data/lib/gooddata/bricks/bricks.rb +15 -0
- data/lib/gooddata/bricks/middleware/aws_middleware.rb +29 -0
- data/lib/gooddata/bricks/middleware/base_middleware.rb +56 -0
- data/lib/gooddata/bricks/middleware/bench_middleware.rb +24 -0
- data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +37 -0
- data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +20 -0
- data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +48 -0
- data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +36 -0
- data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +39 -0
- data/lib/gooddata/bricks/middleware/logger_middleware.rb +29 -0
- data/lib/gooddata/bricks/middleware/middleware.rb +12 -0
- data/lib/gooddata/bricks/middleware/restforce_middleware.rb +61 -0
- data/lib/gooddata/bricks/middleware/stdout_middleware.rb +23 -0
- data/lib/gooddata/bricks/middleware/twitter_middleware.rb +29 -0
- data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +37 -0
- data/lib/gooddata/bricks/pipeline.rb +32 -0
- data/lib/gooddata/bricks/utils.rb +18 -0
- data/lib/gooddata/cli/cli.rb +27 -0
- data/lib/gooddata/cli/commands/auth_cmd.rb +29 -0
- data/lib/gooddata/cli/commands/domain_cmd.rb +28 -0
- data/lib/gooddata/cli/commands/project_cmd.rb +45 -0
- data/lib/gooddata/cli/hooks.rb +57 -0
- data/lib/gooddata/cli/shared.rb +61 -0
- data/lib/gooddata/cli/terminal.rb +20 -0
- data/lib/gooddata/client.rb +67 -0
- data/lib/gooddata/commands/api.rb +64 -0
- data/lib/gooddata/commands/auth.rb +107 -0
- data/lib/gooddata/commands/base.rb +12 -0
- data/lib/gooddata/commands/commands.rb +12 -0
- data/lib/gooddata/commands/datasets.rb +148 -0
- data/lib/gooddata/commands/datawarehouse.rb +20 -0
- data/lib/gooddata/commands/domain.rb +40 -0
- data/lib/gooddata/commands/process.rb +67 -0
- data/lib/gooddata/commands/project.rb +175 -0
- data/lib/gooddata/commands/projects.rb +20 -0
- data/lib/gooddata/commands/role.rb +36 -0
- data/lib/gooddata/commands/runners.rb +47 -0
- data/lib/gooddata/commands/scaffold.rb +69 -0
- data/lib/gooddata/commands/user.rb +39 -0
- data/lib/gooddata/connection.rb +127 -0
- data/lib/gooddata/core/core.rb +12 -0
- data/lib/gooddata/core/logging.rb +105 -0
- data/lib/gooddata/core/nil_logger.rb +23 -0
- data/lib/gooddata/core/project.rb +74 -0
- data/lib/gooddata/core/rest.rb +149 -0
- data/lib/gooddata/core/user.rb +20 -0
- data/lib/gooddata/data/data.rb +12 -0
- data/lib/gooddata/data/guesser.rb +122 -0
- data/lib/gooddata/exceptions/attr_element_not_found.rb +16 -0
- data/lib/gooddata/exceptions/command_failed.rb +11 -0
- data/lib/gooddata/exceptions/exceptions.rb +12 -0
- data/lib/gooddata/exceptions/execution_limit_exceeded.rb +13 -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 +15 -0
- data/lib/gooddata/exceptions/object_migration.rb +32 -0
- data/lib/gooddata/exceptions/project_not_found.rb +13 -0
- data/lib/gooddata/exceptions/segment_not_empty.rb +18 -0
- data/lib/gooddata/exceptions/uncomputable_report.rb +13 -0
- data/lib/gooddata/exceptions/user_in_different_domain.rb +15 -0
- data/lib/gooddata/exceptions/validation_error.rb +16 -0
- data/lib/gooddata/extensions/big_decimal.rb +17 -0
- data/lib/gooddata/extensions/enumerable.rb +39 -0
- data/lib/gooddata/extensions/extensions.rb +10 -0
- data/lib/gooddata/extensions/false.rb +15 -0
- data/lib/gooddata/extensions/hash.rb +38 -0
- data/lib/gooddata/extensions/nil.rb +15 -0
- data/lib/gooddata/extensions/numeric.rb +15 -0
- data/lib/gooddata/extensions/object.rb +27 -0
- data/lib/gooddata/extensions/symbol.rb +15 -0
- data/lib/gooddata/extensions/true.rb +15 -0
- data/lib/gooddata/extract.rb +21 -0
- data/lib/gooddata/goodzilla/goodzilla.rb +159 -0
- data/lib/gooddata/helpers/auth_helpers.rb +75 -0
- data/lib/gooddata/helpers/csv_helper.rb +61 -0
- data/lib/gooddata/helpers/data_helper.rb +116 -0
- data/lib/gooddata/helpers/global_helpers.rb +331 -0
- data/lib/gooddata/helpers/global_helpers_params.rb +172 -0
- data/lib/gooddata/helpers/helpers.rb +10 -0
- data/lib/gooddata/mixins/author.rb +26 -0
- data/lib/gooddata/mixins/content_getter.rb +15 -0
- data/lib/gooddata/mixins/content_property_reader.rb +17 -0
- data/lib/gooddata/mixins/content_property_writer.rb +17 -0
- data/lib/gooddata/mixins/contributor.rb +20 -0
- data/lib/gooddata/mixins/data_getter.rb +15 -0
- data/lib/gooddata/mixins/data_property_reader.rb +19 -0
- data/lib/gooddata/mixins/data_property_writer.rb +19 -0
- data/lib/gooddata/mixins/inspector.rb +53 -0
- data/lib/gooddata/mixins/is_attribute.rb +17 -0
- data/lib/gooddata/mixins/is_dimension.rb +17 -0
- data/lib/gooddata/mixins/is_fact.rb +17 -0
- data/lib/gooddata/mixins/is_label.rb +19 -0
- data/lib/gooddata/mixins/links.rb +15 -0
- data/lib/gooddata/mixins/md_finders.rb +77 -0
- data/lib/gooddata/mixins/md_grantees.rb +42 -0
- data/lib/gooddata/mixins/md_id_to_uri.rb +34 -0
- data/lib/gooddata/mixins/md_json.rb +15 -0
- data/lib/gooddata/mixins/md_lock.rb +87 -0
- data/lib/gooddata/mixins/md_object_id.rb +15 -0
- data/lib/gooddata/mixins/md_object_indexer.rb +64 -0
- data/lib/gooddata/mixins/md_object_query.rb +128 -0
- data/lib/gooddata/mixins/md_relations.rb +43 -0
- data/lib/gooddata/mixins/meta_getter.rb +17 -0
- data/lib/gooddata/mixins/meta_property_reader.rb +19 -0
- data/lib/gooddata/mixins/meta_property_writer.rb +19 -0
- data/lib/gooddata/mixins/mixins.rb +19 -0
- data/lib/gooddata/mixins/not_attribute.rb +17 -0
- data/lib/gooddata/mixins/not_exportable.rb +15 -0
- data/lib/gooddata/mixins/not_fact.rb +17 -0
- data/lib/gooddata/mixins/not_group.rb +17 -0
- data/lib/gooddata/mixins/not_label.rb +19 -0
- data/lib/gooddata/mixins/not_metric.rb +19 -0
- data/lib/gooddata/mixins/obj_id.rb +15 -0
- data/lib/gooddata/mixins/rest_getters.rb +17 -0
- data/lib/gooddata/mixins/rest_resource.rb +47 -0
- data/lib/gooddata/mixins/root_key_getter.rb +15 -0
- data/lib/gooddata/mixins/root_key_setter.rb +15 -0
- data/lib/gooddata/mixins/timestamps.rb +19 -0
- data/lib/gooddata/mixins/to_json.rb +11 -0
- data/lib/gooddata/mixins/uri_getter.rb +9 -0
- data/lib/gooddata/models/blueprint/anchor_field.rb +64 -0
- data/lib/gooddata/models/blueprint/attribute_field.rb +29 -0
- data/lib/gooddata/models/blueprint/blueprint.rb +11 -0
- data/lib/gooddata/models/blueprint/blueprint_field.rb +70 -0
- data/lib/gooddata/models/blueprint/dashboard_builder.rb +30 -0
- data/lib/gooddata/models/blueprint/dataset_blueprint.rb +449 -0
- data/lib/gooddata/models/blueprint/date_dimension.rb +14 -0
- data/lib/gooddata/models/blueprint/fact_field.rb +20 -0
- data/lib/gooddata/models/blueprint/label_field.rb +43 -0
- data/lib/gooddata/models/blueprint/project_blueprint.rb +746 -0
- data/lib/gooddata/models/blueprint/project_builder.rb +83 -0
- data/lib/gooddata/models/blueprint/reference_field.rb +43 -0
- data/lib/gooddata/models/blueprint/schema_blueprint.rb +160 -0
- data/lib/gooddata/models/blueprint/schema_builder.rb +89 -0
- data/lib/gooddata/models/blueprint/to_manifest.rb +181 -0
- data/lib/gooddata/models/blueprint/to_wire.rb +154 -0
- data/lib/gooddata/models/client.rb +182 -0
- data/lib/gooddata/models/client_synchronization_result.rb +31 -0
- data/lib/gooddata/models/client_synchronization_result_details.rb +41 -0
- data/lib/gooddata/models/datawarehouse.rb +92 -0
- data/lib/gooddata/models/domain.rb +479 -0
- data/lib/gooddata/models/execution.rb +115 -0
- data/lib/gooddata/models/execution_detail.rb +81 -0
- data/lib/gooddata/models/from_wire.rb +160 -0
- data/lib/gooddata/models/invitation.rb +75 -0
- data/lib/gooddata/models/links.rb +50 -0
- data/lib/gooddata/models/membership.rb +441 -0
- data/lib/gooddata/models/metadata.rb +272 -0
- data/lib/gooddata/models/metadata/attribute.rb +134 -0
- data/lib/gooddata/models/metadata/dashboard.rb +108 -0
- data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +76 -0
- data/lib/gooddata/models/metadata/dashboard/filter_apply_item.rb +37 -0
- data/lib/gooddata/models/metadata/dashboard/filter_item.rb +64 -0
- data/lib/gooddata/models/metadata/dashboard/geo_chart_item.rb +56 -0
- data/lib/gooddata/models/metadata/dashboard/headline_item.rb +56 -0
- data/lib/gooddata/models/metadata/dashboard/iframe_item.rb +46 -0
- data/lib/gooddata/models/metadata/dashboard/report_item.rb +92 -0
- data/lib/gooddata/models/metadata/dashboard/text_item.rb +55 -0
- data/lib/gooddata/models/metadata/dashboard_tab.rb +141 -0
- data/lib/gooddata/models/metadata/dataset.rb +64 -0
- data/lib/gooddata/models/metadata/dimension.rb +54 -0
- data/lib/gooddata/models/metadata/fact.rb +44 -0
- data/lib/gooddata/models/metadata/label.rb +128 -0
- data/lib/gooddata/models/metadata/metadata.rb +12 -0
- data/lib/gooddata/models/metadata/metric.rb +198 -0
- data/lib/gooddata/models/metadata/report.rb +247 -0
- data/lib/gooddata/models/metadata/report_definition.rb +264 -0
- data/lib/gooddata/models/metadata/scheduled_mail.rb +274 -0
- data/lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb +62 -0
- data/lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb +64 -0
- data/lib/gooddata/models/metadata/variable.rb +91 -0
- data/lib/gooddata/models/model.rb +282 -0
- data/lib/gooddata/models/models.rb +12 -0
- data/lib/gooddata/models/module_constants.rb +31 -0
- data/lib/gooddata/models/process.rb +316 -0
- data/lib/gooddata/models/profile.rb +426 -0
- data/lib/gooddata/models/project.rb +1514 -0
- data/lib/gooddata/models/project_creator.rb +126 -0
- data/lib/gooddata/models/project_metadata.rb +67 -0
- data/lib/gooddata/models/project_role.rb +79 -0
- data/lib/gooddata/models/report_data_result.rb +266 -0
- data/lib/gooddata/models/schedule.rb +518 -0
- data/lib/gooddata/models/segment.rb +201 -0
- data/lib/gooddata/models/tab_builder.rb +27 -0
- data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +76 -0
- data/lib/gooddata/models/user_filters/user_filter.rb +100 -0
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +512 -0
- data/lib/gooddata/models/user_filters/user_filters.rb +13 -0
- data/lib/gooddata/models/user_filters/variable_user_filter.rb +31 -0
- data/lib/gooddata/models/user_group.rb +241 -0
- data/lib/gooddata/rest/README.md +37 -0
- data/lib/gooddata/rest/client.rb +389 -0
- data/lib/gooddata/rest/connection.rb +765 -0
- data/lib/gooddata/rest/object.rb +69 -0
- data/lib/gooddata/rest/object_factory.rb +76 -0
- data/lib/gooddata/rest/resource.rb +27 -0
- data/lib/gooddata/rest/rest.rb +24 -0
- data/lib/gooddata/version.rb +23 -0
- data/lib/templates/bricks/brick.rb.erb +7 -0
- data/lib/templates/bricks/main.rb.erb +5 -0
- data/lib/templates/project/Goodfile.erb +4 -0
- data/lib/templates/project/data/commits.csv +4 -0
- data/lib/templates/project/data/devs.csv +4 -0
- data/lib/templates/project/data/repos.csv +3 -0
- data/lib/templates/project/model/model.rb.erb +20 -0
- data/spec/bricks/bricks_spec.rb +112 -0
- data/spec/bricks/default-config.json +8 -0
- data/spec/data/.gooddata +4 -0
- data/spec/data/blueprints/additional_dataset_module.json +32 -0
- data/spec/data/blueprints/big_blueprint_not_pruned.json +2079 -0
- data/spec/data/blueprints/invalid_blueprint.json +103 -0
- data/spec/data/blueprints/m_n_model.json +104 -0
- data/spec/data/blueprints/model_module.json +25 -0
- data/spec/data/blueprints/test_blueprint.json +38 -0
- data/spec/data/blueprints/test_project_model_spec.json +106 -0
- data/spec/data/cc/data/source/commits.csv +4 -0
- data/spec/data/cc/data/source/devs.csv +4 -0
- data/spec/data/cc/data/source/repos.csv +3 -0
- data/spec/data/cc/devel.prm +0 -0
- data/spec/data/cc/graph/graph.grf +11 -0
- data/spec/data/cc/workspace.prm +19 -0
- data/spec/data/column_based_permissions.csv +7 -0
- data/spec/data/column_based_permissions2.csv +6 -0
- data/spec/data/gd_gse_data_blueprint.json +1371 -0
- data/spec/data/gd_gse_data_manifest.json +1424 -0
- data/spec/data/gd_gse_data_model.json +1772 -0
- data/spec/data/gooddata_version_process/gooddata_version.rb +9 -0
- data/spec/data/gooddata_version_process/gooddata_version.zip +0 -0
- data/spec/data/hello_world_process/hello_world.rb +9 -0
- data/spec/data/hello_world_process/hello_world.zip +0 -0
- data/spec/data/line_based_permissions.csv +3 -0
- data/spec/data/manifests/test_blueprint.json +32 -0
- data/spec/data/manifests/test_project.json +107 -0
- 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 +9 -0
- data/spec/data/ruby_process/deep_files/deep_stuff.txt +1 -0
- data/spec/data/ruby_process/process.rb +8 -0
- data/spec/data/ruby_process/stuff.txt +1 -0
- data/spec/data/superfluous_titles_view.json +81 -0
- data/spec/data/test-ci-data.csv +2 -0
- data/spec/data/users.csv +12 -0
- data/spec/data/wire_models/model_view.json +1775 -0
- data/spec/data/wire_models/nu_model.json +3046 -0
- data/spec/data/wire_models/test_blueprint.json +63 -0
- data/spec/data/wire_test_project.json +150 -0
- data/spec/environment/default.rb +41 -0
- data/spec/environment/develop.rb +31 -0
- data/spec/environment/environment.rb +18 -0
- data/spec/environment/hotfix.rb +21 -0
- data/spec/environment/production.rb +35 -0
- data/spec/environment/release.rb +21 -0
- data/spec/environment/staging.rb +30 -0
- data/spec/environment/staging_3.rb +36 -0
- data/spec/helpers/blueprint_helper.rb +26 -0
- data/spec/helpers/cli_helper.rb +36 -0
- data/spec/helpers/connection_helper.rb +41 -0
- data/spec/helpers/crypto_helper.rb +17 -0
- data/spec/helpers/csv_helper.rb +18 -0
- data/spec/helpers/process_helper.rb +33 -0
- data/spec/helpers/project_helper.rb +59 -0
- data/spec/helpers/schedule_helper.rb +31 -0
- data/spec/helpers/spec_helper.rb +15 -0
- data/spec/integration/blueprint_updates_spec.rb +101 -0
- data/spec/integration/blueprint_with_grain_spec.rb +72 -0
- data/spec/integration/clients_spec.rb +134 -0
- data/spec/integration/command_datawarehouse_spec.rb +39 -0
- data/spec/integration/command_projects_spec.rb +32 -0
- data/spec/integration/create_from_template_spec.rb +22 -0
- data/spec/integration/create_project_spec.rb +24 -0
- data/spec/integration/date_dim_switch_spec.rb +142 -0
- data/spec/integration/deprecated_load_spec.rb +58 -0
- data/spec/integration/full_process_schedule_spec.rb +298 -0
- data/spec/integration/full_project_spec.rb +569 -0
- data/spec/integration/over_to_user_filters_spec.rb +94 -0
- data/spec/integration/partial_md_export_import_spec.rb +42 -0
- data/spec/integration/project_spec.rb +264 -0
- data/spec/integration/rest_spec.rb +213 -0
- data/spec/integration/schedule_spec.rb +626 -0
- data/spec/integration/segments_spec.rb +141 -0
- data/spec/integration/user_filters_spec.rb +290 -0
- data/spec/integration/user_group_spec.rb +127 -0
- data/spec/integration/variables_spec.rb +188 -0
- data/spec/logging_in_logging_out_spec.rb +93 -0
- data/spec/spec_helper.rb +95 -0
- data/spec/unit/bricks/bricks_spec.rb +35 -0
- data/spec/unit/bricks/middleware/aws_middelware_spec.rb +51 -0
- data/spec/unit/bricks/middleware/bench_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/logger_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +15 -0
- data/spec/unit/cli/cli_spec.rb +17 -0
- data/spec/unit/cli/commands/cmd_auth_spec.rb +17 -0
- data/spec/unit/commands/command_projects_spec.rb +22 -0
- data/spec/unit/core/connection_spec.rb +57 -0
- data/spec/unit/core/logging_spec.rb +133 -0
- data/spec/unit/core/nil_logger_spec.rb +13 -0
- data/spec/unit/core/project_spec.rb +54 -0
- data/spec/unit/extensions/hash_spec.rb +23 -0
- data/spec/unit/godzilla/goodzilla_spec.rb +78 -0
- data/spec/unit/helpers/csv_helper_spec.rb +22 -0
- data/spec/unit/helpers/data_helper_spec.rb +61 -0
- data/spec/unit/helpers/global_helpers_spec.rb +111 -0
- data/spec/unit/helpers_spec.rb +86 -0
- data/spec/unit/models/blueprint/attributes_spec.rb +29 -0
- data/spec/unit/models/blueprint/dataset_spec.rb +121 -0
- data/spec/unit/models/blueprint/labels_spec.rb +44 -0
- data/spec/unit/models/blueprint/project_blueprint_spec.rb +648 -0
- data/spec/unit/models/blueprint/reference_spec.rb +29 -0
- data/spec/unit/models/blueprint/schema_builder_spec.rb +38 -0
- data/spec/unit/models/blueprint/to_wire_spec.rb +174 -0
- data/spec/unit/models/domain_spec.rb +144 -0
- data/spec/unit/models/execution_spec.rb +108 -0
- data/spec/unit/models/from_wire_spec.rb +296 -0
- data/spec/unit/models/invitation_spec.rb +17 -0
- data/spec/unit/models/membership_spec.rb +132 -0
- data/spec/unit/models/metadata_spec.rb +104 -0
- data/spec/unit/models/metric_spec.rb +117 -0
- data/spec/unit/models/model_spec.rb +82 -0
- data/spec/unit/models/params_spec.rb +118 -0
- data/spec/unit/models/profile_spec.rb +215 -0
- data/spec/unit/models/project_creator_spec.rb +127 -0
- data/spec/unit/models/project_role_spec.rb +94 -0
- data/spec/unit/models/project_spec.rb +162 -0
- data/spec/unit/models/report_result_data_spec.rb +199 -0
- data/spec/unit/models/schedule_spec.rb +418 -0
- data/spec/unit/models/to_manifest_spec.rb +63 -0
- data/spec/unit/models/unit_project_spec.rb +125 -0
- data/spec/unit/models/user_filters_spec.rb +95 -0
- data/spec/unit/models/variable_spec.rb +265 -0
- data/spec/unit/rest/polling_spec.rb +89 -0
- data/spec/unit/rest/resource_spec.rb +10 -0
- data/yard-server.sh +3 -0
- metadata +1125 -0
@@ -0,0 +1,83 @@
|
|
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.
|
6
|
+
|
7
|
+
require_relative 'dashboard_builder'
|
8
|
+
require_relative 'schema_builder'
|
9
|
+
|
10
|
+
module GoodData
|
11
|
+
module Model
|
12
|
+
class ProjectBuilder
|
13
|
+
attr_accessor :data
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def create_from_data(blueprint, title = 'Title')
|
17
|
+
pb = ProjectBuilder.new(title)
|
18
|
+
pb.data = blueprint.to_hash
|
19
|
+
pb
|
20
|
+
end
|
21
|
+
|
22
|
+
def create(title, _options = {}, &block)
|
23
|
+
pb = ProjectBuilder.new(title)
|
24
|
+
block.call(pb)
|
25
|
+
pb
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize(title, options = {})
|
30
|
+
@data = {}
|
31
|
+
@data[:title] = title
|
32
|
+
@data[:datasets] = []
|
33
|
+
@data[:date_dimensions] = []
|
34
|
+
@data.merge(options)
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_date_dimension(id, options = {})
|
38
|
+
dimension = {
|
39
|
+
type: :date_dimension,
|
40
|
+
urn: options[:urn],
|
41
|
+
id: id,
|
42
|
+
title: options[:title]
|
43
|
+
}
|
44
|
+
|
45
|
+
data[:date_dimensions] << dimension
|
46
|
+
end
|
47
|
+
|
48
|
+
def add_dataset(id, options = {}, &block)
|
49
|
+
builder = GoodData::Model::SchemaBuilder.new(id, options)
|
50
|
+
block.call(builder) if block
|
51
|
+
fail 'Dataset has to have id defined' if id.blank?
|
52
|
+
datasets = data[:datasets]
|
53
|
+
if datasets.any? { |item| item[:id] == id }
|
54
|
+
ds = datasets.find { |item| item[:id] == id }
|
55
|
+
index = datasets.index(ds)
|
56
|
+
stuff = GoodData::Model.merge_dataset_columns(ds, builder.to_hash)
|
57
|
+
datasets.delete_at(index)
|
58
|
+
datasets.insert(index, stuff)
|
59
|
+
else
|
60
|
+
datasets << builder.to_hash
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_json(options = {})
|
65
|
+
eliminate_empty = options[:eliminate_empty] || false
|
66
|
+
|
67
|
+
if eliminate_empty
|
68
|
+
JSON.pretty_generate(to_hash.reject { |_k, v| v.is_a?(Enumerable) && v.empty? })
|
69
|
+
else
|
70
|
+
JSON.pretty_generate(to_hash)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def to_blueprint
|
75
|
+
GoodData::Model::ProjectBlueprint.new(to_hash)
|
76
|
+
end
|
77
|
+
|
78
|
+
def to_hash
|
79
|
+
data
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,43 @@
|
|
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.
|
6
|
+
|
7
|
+
require_relative 'blueprint_field'
|
8
|
+
|
9
|
+
module GoodData
|
10
|
+
module Model
|
11
|
+
class ReferenceBlueprintField < BlueprintField
|
12
|
+
# Returns the schema that is referenced by this ref
|
13
|
+
#
|
14
|
+
# @return [GoodData::Model::SchemaBlueprint] the referencesd schema
|
15
|
+
def dataset
|
16
|
+
dataset_blueprint.find_dataset(reference, include_date_dimensions: true)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns the string reference of the ref which is string Id of dataset that is referenced.
|
20
|
+
#
|
21
|
+
# @return [String] Id of the referenced dataset
|
22
|
+
def reference
|
23
|
+
data[:dataset]
|
24
|
+
end
|
25
|
+
|
26
|
+
# Validates the fields in the ref
|
27
|
+
#
|
28
|
+
# @return [Array] returns list of the errors represented by hash structures
|
29
|
+
def validate
|
30
|
+
validate_presence_of(:dataset).map do |e|
|
31
|
+
{ type: :error, message: "Field \"#{e}\" is not defined or empty for reference \"#{data}\"" }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns the md object in associated project or throws error if not present
|
36
|
+
#
|
37
|
+
# @return [GoodData::MdObject] md object that is represented in the blueprint
|
38
|
+
def in_project(_project)
|
39
|
+
fail NotImplementedError, 'Reference does not have representation as an object in datamart'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,160 @@
|
|
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.
|
6
|
+
|
7
|
+
module GoodData
|
8
|
+
module Model
|
9
|
+
class SchemaBlueprint
|
10
|
+
attr_accessor :data, :project_blueprint
|
11
|
+
|
12
|
+
def initialize(dim, blueprint)
|
13
|
+
@data = dim
|
14
|
+
@project_blueprint = blueprint
|
15
|
+
end
|
16
|
+
|
17
|
+
# Returns true if anchor is present. Currently returns always true. Probably good to remove
|
18
|
+
#
|
19
|
+
# @return [Boolean] is anchor on schema?l70
|
20
|
+
def anchor?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns anchor
|
25
|
+
#
|
26
|
+
# @return [GoodData::Model::AnchorBlueprintField] anchor on schema
|
27
|
+
def anchor
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns list of all references defined on the schema.
|
32
|
+
#
|
33
|
+
# @return [Array<GoodData::Model::ReferenceBlueprintField>] refs on schema
|
34
|
+
def references
|
35
|
+
[]
|
36
|
+
end
|
37
|
+
|
38
|
+
# Returns list of all facts defined on the schema.
|
39
|
+
#
|
40
|
+
# @return [Array<GoodData::Model::FactBlueprintField>] facts on schema
|
41
|
+
def facts(_id = :all, _options = {})
|
42
|
+
[]
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns list of all attributes defined on the schema.
|
46
|
+
#
|
47
|
+
# @return [Array<GoodData::Model::AttributeBlueprintField>] attributes on schema
|
48
|
+
def attributes(_id = :all, _options = {})
|
49
|
+
[]
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns list of all labels defined on the schema.
|
53
|
+
#
|
54
|
+
# @return [Array<GoodData::Model::LabelBlueprintField>] labels on schema
|
55
|
+
def labels(_id = :all, _options = {})
|
56
|
+
[]
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns list of all fields defined on the schema.
|
60
|
+
#
|
61
|
+
# @return [Array<GoodData::Model::BlueprintField>] all fields on schema
|
62
|
+
def fields
|
63
|
+
[]
|
64
|
+
end
|
65
|
+
|
66
|
+
# Returns list of attributes and anchor.
|
67
|
+
#
|
68
|
+
# @return [Array<GoodData::Model::AnchorBlueprintField | GoodData::Model::AttributeBlueprintField>]
|
69
|
+
def attributes_and_anchors
|
70
|
+
[]
|
71
|
+
end
|
72
|
+
|
73
|
+
# Returns list of attributes that can break facts in a given dataset.
|
74
|
+
# This basically means that it is giving you all attributes from this
|
75
|
+
# dataset and datasets that are referenced by given dataset transitively.
|
76
|
+
# Includes only anchors that have labels.
|
77
|
+
#
|
78
|
+
# @return [Array<GoodData::Model::BlueprintField>]
|
79
|
+
def broken_by
|
80
|
+
attrs = attributes_and_anchors.reject { |a| a.labels.empty? }
|
81
|
+
attrs + references.map(&:dataset).flat_map(&:broken_by)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Returns list of attributes that are broken by attributes in this dataset. This means
|
85
|
+
# all anchors and attributes from this dataset and the ones that are referenced by any
|
86
|
+
# dataset. It works transitively. Includes only anchors that have labels.
|
87
|
+
#
|
88
|
+
# @return [Array<GoodData::Model::AnchorBlueprintField | GoodData::Model::AttributeBlueprintField>]
|
89
|
+
def breaks
|
90
|
+
attrs = attributes_and_anchors.reject { |a| a.labels.empty? }
|
91
|
+
referenced_by.empty? ? attrs : attrs + referenced_by.flat_map(&:breaks)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Relays request on finding a dataset in the associated project blueprint. Used by reference fields
|
95
|
+
#
|
96
|
+
# @param dataset [String] Name of a dataset
|
97
|
+
# @param options [Hash] additional options. See ProjectBlueprint form more
|
98
|
+
# @return [GoodData::Model::DatasetBlueprint] returns matching dataset or throws an error
|
99
|
+
def find_dataset(dataset, options = {})
|
100
|
+
project_blueprint.find_dataset(dataset, options)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Returns id of the schema
|
104
|
+
#
|
105
|
+
# @return [String] returns id
|
106
|
+
def id
|
107
|
+
data[:id]
|
108
|
+
end
|
109
|
+
|
110
|
+
# Returns dataset that are referencing this dataset (directly through references not transitively).
|
111
|
+
#
|
112
|
+
# @return [Array<GoodData::Model::SchemaBlueprint>] returns id
|
113
|
+
def referenced_by
|
114
|
+
@project_blueprint.referencing(self)
|
115
|
+
end
|
116
|
+
|
117
|
+
# Returns dataset that are referenced by this dataset (directly through references not transitively).
|
118
|
+
#
|
119
|
+
# @return [Array<GoodData::Model::SchemaBlueprint>] returns id
|
120
|
+
def referencing
|
121
|
+
references.map(&:dataset)
|
122
|
+
end
|
123
|
+
|
124
|
+
# Returns title of the dataset. If it is not set up. It is generated for you
|
125
|
+
# based on the name which is titleized
|
126
|
+
#
|
127
|
+
# @return [String]
|
128
|
+
def title
|
129
|
+
data[:title] || GoodData::Helpers.titleize(data[:id])
|
130
|
+
end
|
131
|
+
|
132
|
+
# Validates the blueprint and returns true if model is valid. False otherwise.
|
133
|
+
#
|
134
|
+
# @return [Boolean] is model valid?
|
135
|
+
def valid?
|
136
|
+
validate.empty?
|
137
|
+
end
|
138
|
+
|
139
|
+
# Validates the blueprint and returns array of errors.
|
140
|
+
#
|
141
|
+
# @return [Array<Hash>] returns array of errors or empty array
|
142
|
+
def validate
|
143
|
+
fields.flat_map(&:validate)
|
144
|
+
end
|
145
|
+
|
146
|
+
# Compares two blueprints. This is done by comapring the hash represenatation.
|
147
|
+
# It has to be exacty identical including the order of the columns
|
148
|
+
#
|
149
|
+
# @param name [GoodData::Model::DatasetBlueprint] Name of a field
|
150
|
+
# @return [Boolean] matching fields
|
151
|
+
def ==(other)
|
152
|
+
to_hash == other.to_hash
|
153
|
+
end
|
154
|
+
|
155
|
+
def to_hash
|
156
|
+
@data
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -0,0 +1,89 @@
|
|
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.
|
6
|
+
|
7
|
+
module GoodData
|
8
|
+
module Model
|
9
|
+
class SchemaBuilder
|
10
|
+
attr_accessor :data
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def create_from_data(blueprint)
|
14
|
+
sc = SchemaBuilder.new
|
15
|
+
sc.data = blueprint.to_hash
|
16
|
+
sc
|
17
|
+
end
|
18
|
+
|
19
|
+
def create(id, options = {}, &block)
|
20
|
+
pb = SchemaBuilder.new(id, options)
|
21
|
+
block.call(pb)
|
22
|
+
pb
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(id = nil, options = {})
|
27
|
+
@data = {
|
28
|
+
id: id,
|
29
|
+
type: :dataset,
|
30
|
+
columns: []
|
31
|
+
}.merge(options)
|
32
|
+
end
|
33
|
+
|
34
|
+
def name
|
35
|
+
data[:name]
|
36
|
+
end
|
37
|
+
|
38
|
+
def columns
|
39
|
+
data[:columns]
|
40
|
+
end
|
41
|
+
|
42
|
+
def add_column(column_def)
|
43
|
+
columns.push(column_def)
|
44
|
+
self
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_anchor(id, options = {})
|
48
|
+
add_column({ type: :anchor, id: id }.merge(options))
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_attribute(id, options = {})
|
53
|
+
add_column({ type: :attribute, id: id }.merge(options))
|
54
|
+
self
|
55
|
+
end
|
56
|
+
|
57
|
+
def add_fact(id, options = {})
|
58
|
+
data = { type: :fact, id: id }.merge(options)
|
59
|
+
add_column(data)
|
60
|
+
self
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_label(id, options = {})
|
64
|
+
add_column({ type: :label, id: id }.merge(options))
|
65
|
+
self
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_date(dataset_id, options = {})
|
69
|
+
add_column({ type: :date, dataset: dataset_id, format: GoodData::Model::DEFAULT_DATE_FORMAT }.merge(options))
|
70
|
+
end
|
71
|
+
|
72
|
+
def add_reference(dataset, options = {})
|
73
|
+
add_column({ type: :reference, dataset: dataset }.merge(options))
|
74
|
+
end
|
75
|
+
|
76
|
+
def to_json
|
77
|
+
JSON.pretty_generate(to_hash)
|
78
|
+
end
|
79
|
+
|
80
|
+
def to_hash
|
81
|
+
data
|
82
|
+
end
|
83
|
+
|
84
|
+
def to_blueprint
|
85
|
+
GoodData::Model::ProjectBlueprint.new(datasets: [to_hash])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,181 @@
|
|
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.
|
6
|
+
|
7
|
+
module GoodData
|
8
|
+
module Model
|
9
|
+
module ToManifest
|
10
|
+
# Converts attribute or anchor to manifest
|
11
|
+
#
|
12
|
+
# @param project [GoodData::Model::ProjectBlueprint] Project blueprint
|
13
|
+
# @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
|
14
|
+
# @param attribute [Hash] Attribute or Anchor
|
15
|
+
# @param mode [String] Mode of the load. Either FULL or INCREMENTAL
|
16
|
+
# @return [Hash] Manifest for a particular reference
|
17
|
+
def self.attribute_to_manifest(_project, dataset, a, mode)
|
18
|
+
labels = DatasetBlueprint.labels_for_attribute(dataset, a)
|
19
|
+
[{
|
20
|
+
'referenceKey' => 1,
|
21
|
+
'populates' => [labels.first[:id]],
|
22
|
+
'mode' => mode,
|
23
|
+
'columnName' => labels.first[:column_name] || labels.first[:id]
|
24
|
+
}]
|
25
|
+
end
|
26
|
+
|
27
|
+
# Sets the active project
|
28
|
+
#
|
29
|
+
# @param project A project identifier
|
30
|
+
#
|
31
|
+
# ### Examples
|
32
|
+
#
|
33
|
+
# The following calls are equivalent
|
34
|
+
#
|
35
|
+
def self.column_to_manifest(project, dataset, c, mode)
|
36
|
+
case c[:type].to_sym
|
37
|
+
when :label
|
38
|
+
label_to_manifest(project, dataset, c, mode)
|
39
|
+
when :fact
|
40
|
+
fact_to_manifest(project, dataset, c, mode)
|
41
|
+
when :date_fact
|
42
|
+
fact_to_manifest(project, dataset, c, mode)
|
43
|
+
when :reference
|
44
|
+
reference_to_manifest(project, dataset, c, mode)
|
45
|
+
when :date
|
46
|
+
date_ref_to_manifest(project, dataset, c, mode)
|
47
|
+
else
|
48
|
+
[]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Converts dataset into manifest. Since for manifest of a dataset you need to
|
53
|
+
# have access to the whole project blueprint it requires both project and
|
54
|
+
# dataset blueprints. It generates the manifest for blueprint and then selects
|
55
|
+
# only the one for particular dataset
|
56
|
+
#
|
57
|
+
# @param project [GoodData::Model::ProjectBlueprint] Project blueprint
|
58
|
+
# @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
|
59
|
+
# @param mode [String] Mode of the load. Either FULL or INCREMENTAL
|
60
|
+
# @return [Hash] Manifest for a particular dataset
|
61
|
+
def self.dataset_to_manifest(project, dataset, mode = 'FULL')
|
62
|
+
dataset = dataset.is_a?(String) ? Model::ProjectBlueprint.find_dataset(project, dataset) : dataset
|
63
|
+
dataset = dataset.to_hash
|
64
|
+
res = Model::ProjectBlueprint.datasets(project).zip(to_manifest(project, mode)).find do |ds|
|
65
|
+
ds.first == dataset
|
66
|
+
end
|
67
|
+
res[1]
|
68
|
+
end
|
69
|
+
|
70
|
+
# Converts data reference to manifest
|
71
|
+
#
|
72
|
+
# @param project [GoodData::Model::ProjectBlueprint] Project blueprint
|
73
|
+
# @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
|
74
|
+
# @param reference [Hash] Reference
|
75
|
+
# @param mode [String] Mode of the load. Either FULL or INCREMENTAL
|
76
|
+
# @return [Hash] Manifest for a particular date reference
|
77
|
+
def self.date_ref_to_manifest(project, _dataset, reference, mode)
|
78
|
+
referenced_dataset = ProjectBlueprint.find_date_dimension(project, reference[:dataset])
|
79
|
+
ref = "#{referenced_dataset[:id]}.date.mdyy"
|
80
|
+
format = reference[:format] || GoodData::Model::DEFAULT_DATE_FORMAT
|
81
|
+
GoodData.logger.info("Using date format \"#{format}\" for referencing attribute \"#{ref}\" of date dimension \"#{referenced_dataset[:id]}\"")
|
82
|
+
[{
|
83
|
+
'populates' => [ref],
|
84
|
+
'mode' => mode,
|
85
|
+
'constraints' => { 'date' => format },
|
86
|
+
'columnName' => reference[:column_name] || reference[:dataset],
|
87
|
+
'referenceKey' => 1
|
88
|
+
}]
|
89
|
+
end
|
90
|
+
|
91
|
+
# Converts fact to manifest
|
92
|
+
#
|
93
|
+
# @param project [GoodData::Model::ProjectBlueprint] Project blueprint
|
94
|
+
# @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
|
95
|
+
# @param fact [Hash] Fact
|
96
|
+
# @param mode [String] Mode of the load. Either FULL or INCREMENTAL
|
97
|
+
# @return [Hash] Manifest for a particular fact
|
98
|
+
def self.fact_to_manifest(_project, _dataset, fact, mode)
|
99
|
+
[{
|
100
|
+
'populates' => [fact[:id]],
|
101
|
+
'mode' => mode,
|
102
|
+
'columnName' => fact[:column_name] || fact[:id]
|
103
|
+
}]
|
104
|
+
end
|
105
|
+
|
106
|
+
# Generates safe name for upload
|
107
|
+
# @param dataset_path [String] Input name
|
108
|
+
# @return [String] Generated upload filename
|
109
|
+
def self.generate_upload_filename(dataset_path)
|
110
|
+
sanitized_name = dataset_path.gsub(/[^0-9a-z]/i, '_')
|
111
|
+
# ts = DateTime.now.strftime('%Y%m%d%H%M%S%6N')
|
112
|
+
# "#{sanitized_name}-#{ts}.csv"
|
113
|
+
"#{sanitized_name}.csv"
|
114
|
+
end
|
115
|
+
|
116
|
+
# Converts label to manifest
|
117
|
+
#
|
118
|
+
# @param project [GoodData::Model::ProjectBlueprint] Project blueprint
|
119
|
+
# @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
|
120
|
+
# @param label [Hash] Label
|
121
|
+
# @param mode [String] Mode of the load. Either FULL or INCREMENTAL
|
122
|
+
# @return [Hash] Manifest for a particular label
|
123
|
+
def self.label_to_manifest(_project, dataset, label, mode)
|
124
|
+
a = DatasetBlueprint.attribute_for_label(dataset, label)
|
125
|
+
labels = DatasetBlueprint.labels_for_attribute(dataset, a)
|
126
|
+
|
127
|
+
label = {}.tap do |l|
|
128
|
+
l['referenceKey'] = 1 if labels.first == label
|
129
|
+
l['populates'] = [label[:id]]
|
130
|
+
l['mode'] = mode
|
131
|
+
l['columnName'] = label[:column_name] || label[:id]
|
132
|
+
end
|
133
|
+
[label]
|
134
|
+
end
|
135
|
+
|
136
|
+
# The entry function of the module. Converts the ProjectBlueprint to manifest
|
137
|
+
# to be used with SLI (GD loading interface).
|
138
|
+
#
|
139
|
+
# @param project [GoodData::Model::ProjectBlueprint] Project blueprint
|
140
|
+
# @param mode [String] Mode of the load. Either FULL or INCREMENTAL
|
141
|
+
# @return [Hash] Manifest for a particular project
|
142
|
+
def self.to_manifest(project, mode = 'FULL')
|
143
|
+
ProjectBlueprint.datasets(project.to_hash).map do |dataset|
|
144
|
+
columns = GoodData::Model::DatasetBlueprint.columns(dataset)
|
145
|
+
{
|
146
|
+
'dataSetSLIManifest' => {
|
147
|
+
'parts' => columns.mapcat { |c| column_to_manifest(project, dataset, c, mode) },
|
148
|
+
'dataSet' => dataset[:id],
|
149
|
+
'file' => ToManifest.generate_upload_filename(dataset[:id]), # should be configurable
|
150
|
+
'csvParams' => {
|
151
|
+
'quoteChar' => '"',
|
152
|
+
'escapeChar' => '"',
|
153
|
+
'separatorChar' => ',',
|
154
|
+
'endOfLine' => "\n"
|
155
|
+
}
|
156
|
+
}
|
157
|
+
}
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
# Converts reference to manifest
|
162
|
+
#
|
163
|
+
# @param project [GoodData::Model::ProjectBlueprint] Project blueprint
|
164
|
+
# @param dataset [GoodData::Model::SchemaBlueprint] Dataset blueprint
|
165
|
+
# @param reference [Hash] Reference
|
166
|
+
# @param mode [String] Mode of the load. Either FULL or INCREMENTAL
|
167
|
+
# @return [Hash] Manifest for a particular reference
|
168
|
+
def self.reference_to_manifest(project, _dataset, reference, mode)
|
169
|
+
referenced_dataset = ProjectBlueprint.find_dataset(project, reference[:dataset])
|
170
|
+
anchor = DatasetBlueprint.anchor(referenced_dataset)
|
171
|
+
label = DatasetBlueprint.labels_for_attribute(referenced_dataset, anchor).first
|
172
|
+
[{
|
173
|
+
'populates' => [label[:id]],
|
174
|
+
'mode' => mode,
|
175
|
+
'columnName' => reference[:column_name] || reference[:dataset],
|
176
|
+
'referenceKey' => 1
|
177
|
+
}]
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|