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,449 @@
|
|
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 'schema_builder'
|
8
|
+
require_relative 'schema_blueprint'
|
9
|
+
|
10
|
+
module GoodData
|
11
|
+
module Model
|
12
|
+
class DatasetBlueprint < SchemaBlueprint
|
13
|
+
# Checks if a dataset has an anchor.
|
14
|
+
#
|
15
|
+
# @param dataset [Hash] Dataset blueprint
|
16
|
+
# @return [Boolean] returns true if dataset has an anchor
|
17
|
+
def self.anchor?(dataset)
|
18
|
+
columns(dataset).any? { |c| c[:type].to_s == 'anchor' }
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns anchor of a dataset
|
22
|
+
#
|
23
|
+
# @param dataset [Hash] Dataset blueprint
|
24
|
+
# @return [Hash] returns the anchor or nil
|
25
|
+
def self.anchor(dataset)
|
26
|
+
find_column_by_type(dataset, :anchor)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Returns attributes of a dataset
|
30
|
+
#
|
31
|
+
# @param dataset [Hash] Dataset blueprint
|
32
|
+
# @return [Array<Hash>] returns the attribute or an empty array
|
33
|
+
def self.attributes(dataset)
|
34
|
+
find_columns_by_type(dataset, :attribute, :all)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns attributes and anchor defined on a dataset
|
38
|
+
#
|
39
|
+
# @param dataset [Hash] Dataset blueprint
|
40
|
+
# @return [Array<Hash>] returns the attributes
|
41
|
+
def self.attributes_and_anchors(dataset)
|
42
|
+
[anchor(dataset)] + attributes(dataset)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns all labels that is referenced by a label
|
46
|
+
#
|
47
|
+
# @param dataset [Hash] Dataset blueprint
|
48
|
+
# @return [Array<Hash>] returns the labels or an empty array
|
49
|
+
def self.attribute_for_label(dataset, label)
|
50
|
+
find_columns_by_type(dataset, :attribute, :anchor).find { |a| label[:reference] == a[:id] }
|
51
|
+
end
|
52
|
+
|
53
|
+
# Returns all the fields of a dataset. This means facts, attributes, references
|
54
|
+
#
|
55
|
+
# @param ds [Hash] Dataset blueprint
|
56
|
+
# @return [Boolean]
|
57
|
+
def self.columns(ds)
|
58
|
+
(ds.to_hash[:columns] || [])
|
59
|
+
end
|
60
|
+
singleton_class.send(:alias_method, :fields, :columns)
|
61
|
+
|
62
|
+
# Tells you if the object is a dataset. It consumes both Hash represenation
|
63
|
+
# or the GoodData::Model::DatasetBlueprint
|
64
|
+
#
|
65
|
+
# @param ds [Object] Value to be tested
|
66
|
+
# @return [Boolean]
|
67
|
+
def self.dataset_blueprint?(ds)
|
68
|
+
if ds.is_a?(DatasetBlueprint)
|
69
|
+
true
|
70
|
+
elsif ds.respond_to?(:[]) && ds.is_a?(Hash) && ds[:type].to_sym == :dataset
|
71
|
+
true
|
72
|
+
else
|
73
|
+
false
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Returns date facts of a dataset
|
78
|
+
#
|
79
|
+
# @param dataset [Hash] Dataset blueprint
|
80
|
+
# @return [Array<Hash>] returns the attribute or an empty array
|
81
|
+
def self.date_facts(dataset)
|
82
|
+
find_column_by_type(dataset, :date_fact)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns label that is marked as default for a particular attribtue.
|
86
|
+
# This does not necessarily need to be the first one. This is a default label
|
87
|
+
# in terms of what is displayed on the UI
|
88
|
+
#
|
89
|
+
# @param dataset [Hash] Dataset blueprint
|
90
|
+
# @return [Array<Hash>] returns the labels or an empty array
|
91
|
+
def self.default_label_for_attribute(dataset, attribute)
|
92
|
+
default_label = labels_for_attribute(dataset, attribute).find { |l| l[:default_label] == true }
|
93
|
+
default_label
|
94
|
+
end
|
95
|
+
|
96
|
+
# Returns facts of a dataset
|
97
|
+
#
|
98
|
+
# @param dataset [Hash] Dataset blueprint
|
99
|
+
# @return [Array<Hash>] returns the attribute or an empty array
|
100
|
+
def self.facts(dataset)
|
101
|
+
find_columns_by_type(dataset, :fact, :date_fact)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Finds a specific column given a name
|
105
|
+
#
|
106
|
+
# @param dataset [Hash] Dataset blueprint
|
107
|
+
# @param name [String] Name of a field
|
108
|
+
# @param all [Symbol] if :all is passed all mathching objects are returned
|
109
|
+
# Otherwise only the first one is
|
110
|
+
# @return [Array<Hash>] matching fields
|
111
|
+
def self.find_column_by_id(dataset, name, all = nil)
|
112
|
+
if all == :all
|
113
|
+
columns(dataset).select { |c| c[:id].to_s == name }
|
114
|
+
else
|
115
|
+
columns(dataset).find { |c| c[:id].to_s == name }
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# Returns first field of a specified type.
|
120
|
+
#
|
121
|
+
# @param dataset [Hash | GoodData::Model::ProjectBlueprint] Dataset blueprint
|
122
|
+
# @param types [String | Symbol | Array[Symbol] | Array[String]] Type or types you would like to get
|
123
|
+
# as third parameter it return all object otherwise it returns the first one
|
124
|
+
# @return [Array<Hash>] matching fields
|
125
|
+
def self.find_column_by_type(dataset, *types)
|
126
|
+
columns(dataset).find { |c| types.any? { |t| t.to_s == c[:type].to_s } }
|
127
|
+
end
|
128
|
+
|
129
|
+
# Returns all the fields of a specified type. You can specify more types
|
130
|
+
# if you need more than one type.
|
131
|
+
#
|
132
|
+
# @param dataset [Hash | GoodData::Model::ProjectBlueprint] Dataset blueprint
|
133
|
+
# @param types [String | Symbol | Array[Symmbol] | Array[String]] Type or types you would like to get
|
134
|
+
# @return [Array<Hash>] matching fields
|
135
|
+
def self.find_columns_by_type(dataset, *types)
|
136
|
+
columns(dataset).select { |c| types.any? { |t| t.to_s == c[:type].to_s } }
|
137
|
+
end
|
138
|
+
|
139
|
+
# Returns labels facts of a dataset
|
140
|
+
#
|
141
|
+
# @param dataset [Hash] Dataset blueprint
|
142
|
+
# @return [Array<Hash>] returns the label or an empty array
|
143
|
+
def self.labels(dataset)
|
144
|
+
find_columns_by_type(dataset, :label)
|
145
|
+
end
|
146
|
+
|
147
|
+
# Returns labels for a particular attribute
|
148
|
+
#
|
149
|
+
# @param dataset [Hash] Dataset blueprint
|
150
|
+
# @param attribute [Hash] Attribute
|
151
|
+
# @return [Array<Hash>] returns the labels or an empty array
|
152
|
+
def self.labels_for_attribute(dataset, attribute)
|
153
|
+
labels(dataset).select { |l| l[:reference] == attribute[:id] }
|
154
|
+
end
|
155
|
+
|
156
|
+
# Returns references of a dataset
|
157
|
+
#
|
158
|
+
# @param dataset [Hash] Dataset blueprint
|
159
|
+
# @return [Array<Hash>] returns the references or an empty array
|
160
|
+
def self.references(dataset)
|
161
|
+
find_columns_by_type(dataset, :reference, :date)
|
162
|
+
end
|
163
|
+
|
164
|
+
# Returns anchor of a dataset
|
165
|
+
#
|
166
|
+
# @return [Hash] returns the anchor or nil
|
167
|
+
def anchor
|
168
|
+
find_column_by_type(:anchor)
|
169
|
+
end
|
170
|
+
|
171
|
+
# Checks if a dataset has an anchor.
|
172
|
+
#
|
173
|
+
# @return [Boolean] returns true if dataset has an anchor
|
174
|
+
def anchor?
|
175
|
+
columns.any? { |c| c.type == :anchor }
|
176
|
+
end
|
177
|
+
|
178
|
+
# Returns attributes of a dataset
|
179
|
+
#
|
180
|
+
# @return [Array<Hash>] returns the attribute or an empty array
|
181
|
+
def attributes(id = :all)
|
182
|
+
return id if id.is_a?(AttributeBlueprintField)
|
183
|
+
ats = find_columns_by_type(:attribute)
|
184
|
+
id == :all ? ats : ats.find { |a| a.id == id }
|
185
|
+
end
|
186
|
+
|
187
|
+
# Returns attributes and anchor defined on a dataset
|
188
|
+
#
|
189
|
+
# @return [Array<GoodData::Model::DatasetBlueprint>] returns the attributes
|
190
|
+
def attributes_and_anchors
|
191
|
+
attributes + [anchor]
|
192
|
+
end
|
193
|
+
|
194
|
+
# Changes the dataset through a builder. You provide a block and an istance of
|
195
|
+
# GoodData::Model::SchemaBuilder is passed in as the only parameter
|
196
|
+
#
|
197
|
+
# @return [GoodData::Model::SchemaBlueprint] returns changed dataset blueprint
|
198
|
+
def change(&block)
|
199
|
+
builder = SchemaBuilder.create_from_data(self)
|
200
|
+
block.call(builder)
|
201
|
+
@data = builder.to_hash
|
202
|
+
self
|
203
|
+
end
|
204
|
+
|
205
|
+
# Returns all the fields of a dataset. This means anchor, facts, attributes, references
|
206
|
+
# This method will cast them to correct types
|
207
|
+
#
|
208
|
+
# @return [Boolean]
|
209
|
+
def columns
|
210
|
+
DatasetBlueprint.columns(to_hash).map do |c|
|
211
|
+
case c[:type].to_sym
|
212
|
+
when :anchor
|
213
|
+
GoodData::Model::AnchorBlueprintField.new(c, self)
|
214
|
+
when :attribute
|
215
|
+
GoodData::Model::AttributeBlueprintField.new(c, self)
|
216
|
+
when :fact
|
217
|
+
GoodData::Model::FactBlueprintField.new(c, self)
|
218
|
+
when :label
|
219
|
+
GoodData::Model::LabelBlueprintField.new(c, self)
|
220
|
+
when :reference
|
221
|
+
GoodData::Model::ReferenceBlueprintField.new(c, self)
|
222
|
+
when :date
|
223
|
+
GoodData::Model::ReferenceBlueprintField.new(c, self)
|
224
|
+
else
|
225
|
+
GoodData::Model::BlueprintField.new(c, self)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
alias_method :fields, :columns
|
230
|
+
|
231
|
+
# Creates a metric which counts numnber of lines in dataset. Works for both
|
232
|
+
# datasets with or without anchor
|
233
|
+
#
|
234
|
+
# @return [Boolean]
|
235
|
+
def count(project)
|
236
|
+
anchor.in_project(project).create_metric.execute
|
237
|
+
end
|
238
|
+
|
239
|
+
# Returns date facts of a dataset
|
240
|
+
#
|
241
|
+
# @return [Array<Hash>] returns the attribute or an empty array
|
242
|
+
def date_facts
|
243
|
+
find_columns_by_type(:date_fact)
|
244
|
+
end
|
245
|
+
|
246
|
+
# Duplicates the DatasetBlueprint. It is done as a deep duplicate
|
247
|
+
#
|
248
|
+
# @return [GoodData::Model::DatasetBlueprint] matching fields
|
249
|
+
def dup
|
250
|
+
DatasetBlueprint.new(GoodData::Helpers.deep_dup(data), project_blueprint)
|
251
|
+
end
|
252
|
+
|
253
|
+
# Returns facts of a dataset
|
254
|
+
#
|
255
|
+
# @return [Array<Hash>] returns the attribute or an empty array
|
256
|
+
def facts(id = :all)
|
257
|
+
return id if id.is_a?(FactBlueprintField)
|
258
|
+
fs = find_columns_by_type(:fact)
|
259
|
+
id == :all ? fs : fs.find { |a| a.id == id }
|
260
|
+
end
|
261
|
+
|
262
|
+
# Finds a specific column given a col
|
263
|
+
#
|
264
|
+
# @param col [GoodData::Model::BlueprintField | Hash] Field
|
265
|
+
# @return [GoodData::Model::BlueprintField] matching fields
|
266
|
+
def find_column(col)
|
267
|
+
columns.find { |c| c == col }
|
268
|
+
end
|
269
|
+
|
270
|
+
# Finds a specific column given an id
|
271
|
+
#
|
272
|
+
# @param id [String] Id of a field
|
273
|
+
# @param all [Symbol] if :all is passed all mathching objects are returned
|
274
|
+
# Otherwise only the first one is
|
275
|
+
# @return [Array<Hash>] matching fields
|
276
|
+
def find_column_by_id(id)
|
277
|
+
id = id.respond_to?(:id) ? id.id : id
|
278
|
+
columns.find { |c| c.id == id }
|
279
|
+
end
|
280
|
+
|
281
|
+
# Returns first field of a specified type.
|
282
|
+
#
|
283
|
+
# @param type [String | Symbol | Array[Symmbol] | Array[String]] Type or types you would like to get
|
284
|
+
# @return [GoodData::Model::BlueprintField] returns matching field
|
285
|
+
def find_column_by_type(*types)
|
286
|
+
columns.find { |c| types.any? { |t| t.downcase.to_sym == c.type } }
|
287
|
+
end
|
288
|
+
|
289
|
+
# Returns all the fields of a specified type. You can specify more types
|
290
|
+
# as an array if you need more than one type.
|
291
|
+
#
|
292
|
+
# @param type [String | Symbol | Array[Symmbol] | Array[String]] Type or types you would like to get
|
293
|
+
# as third parameter it return all object otherwise it returns the first one
|
294
|
+
# @return [Array<GoodData::Model::BlueprintField>] matching fields
|
295
|
+
def find_columns_by_type(*types)
|
296
|
+
columns.select { |c| types.any? { |t| t.downcase.to_sym == c.type } }
|
297
|
+
end
|
298
|
+
|
299
|
+
# Creates a DatasetBlueprint
|
300
|
+
#
|
301
|
+
# @param dataset [Hash] Dataset blueprint
|
302
|
+
# @return [DatasetBlueprint] returns the labels or an empty array
|
303
|
+
def initialize(init_data, blueprint)
|
304
|
+
super
|
305
|
+
@data[:type] = @data.key?('type') ? @data['type'].to_sym : @data[:type]
|
306
|
+
@data[:columns].each do |c|
|
307
|
+
c[:type] = c[:type].to_sym
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
# Returns labels facts of a dataset
|
312
|
+
#
|
313
|
+
# @param dataset [Hash] Dataset blueprint
|
314
|
+
# @return [Array<Hash>] returns the label or an empty array
|
315
|
+
def labels(id = :all)
|
316
|
+
return id if id.is_a?(LabelBlueprintField)
|
317
|
+
labs = find_columns_by_type(:label)
|
318
|
+
id == :all ? labs : labs.find { |l| l.id == id }
|
319
|
+
end
|
320
|
+
|
321
|
+
def attribute_for_label(label)
|
322
|
+
l = labels(label)
|
323
|
+
attributes_and_anchors.find { |a| a.id == l.reference }
|
324
|
+
end
|
325
|
+
|
326
|
+
def labels_for_attribute(attribute)
|
327
|
+
a = attributes(attribute)
|
328
|
+
labels.select { |l| l.reference == a.id }
|
329
|
+
end
|
330
|
+
|
331
|
+
# Merges two schemas together. This method changes the blueprint
|
332
|
+
# in place. If you would prefer the method that generates a new blueprint
|
333
|
+
# use merge method
|
334
|
+
#
|
335
|
+
# @param a_blueprint [GoodData::Model::DatasetBlueprint] Dataset blueprint to be merged
|
336
|
+
# @return [GoodData::Model::DatasetBlueprint] returns itself changed
|
337
|
+
def merge!(a_blueprint)
|
338
|
+
new_blueprint = GoodData::Model.merge_dataset_columns(self, a_blueprint)
|
339
|
+
@data = new_blueprint
|
340
|
+
self
|
341
|
+
end
|
342
|
+
|
343
|
+
# Returns references of a dataset
|
344
|
+
#
|
345
|
+
# @return [Array<Hash>] returns the references or an empty array
|
346
|
+
def references
|
347
|
+
find_columns_by_type(:reference, :date)
|
348
|
+
end
|
349
|
+
|
350
|
+
# Removes column from from the blueprint
|
351
|
+
#
|
352
|
+
# @param id [String] Id of the column to be removed
|
353
|
+
# @return [GoodData::Model::ProjectBlueprint] Returns changed blueprint
|
354
|
+
def remove_column!(id)
|
355
|
+
@project_blueprint.remove_column!(self, id)
|
356
|
+
end
|
357
|
+
|
358
|
+
# Removes all the labels from the anchor. This is a typical operation that people want to perform
|
359
|
+
#
|
360
|
+
# @return [GoodData::Model::ProjectBlueprint] Returns changed blueprint
|
361
|
+
def strip_anchor!
|
362
|
+
@project_blueprint.strip_anchor!(self)
|
363
|
+
end
|
364
|
+
|
365
|
+
# Method for suggest a couple of metrics that might get you started
|
366
|
+
# Idea is that we will provide couple of strategies. Currently the metrics
|
367
|
+
# are created in the random way but they should work.
|
368
|
+
#
|
369
|
+
# @return [Array<GoodData::Metric>] matching fields
|
370
|
+
def suggest_metrics
|
371
|
+
identifiers = facts.map { |f| identifier_for(f) }
|
372
|
+
identifiers.zip(facts).map do |id, fact|
|
373
|
+
Metric.xcreate(
|
374
|
+
:title => GoodData::Helpers.titleize(fact[:name]),
|
375
|
+
:expression => "SELECT SUM(![#{id}])")
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
379
|
+
alias_method :suggest_measures, :suggest_metrics
|
380
|
+
|
381
|
+
def to_blueprint
|
382
|
+
GoodData::Model::ProjectBlueprint.new(datasets: [to_hash])
|
383
|
+
end
|
384
|
+
|
385
|
+
# Validate the blueprint return array of errors that are found.
|
386
|
+
#
|
387
|
+
# @return [Array] array of errors
|
388
|
+
def validate
|
389
|
+
errors = []
|
390
|
+
errors.concat(validate_more_anchors)
|
391
|
+
errors.concat(validate_some_anchors)
|
392
|
+
errors.concat(validate_label_references)
|
393
|
+
errors.concat(validate_gd_data_type_errors)
|
394
|
+
errors.concat(fields.flat_map(&:validate))
|
395
|
+
errors.concat(validate_attribute_has_one_label)
|
396
|
+
errors
|
397
|
+
end
|
398
|
+
|
399
|
+
# Validate if the dataset has more than zero anchors defined.
|
400
|
+
#
|
401
|
+
# @return [Array] array of errors
|
402
|
+
def validate_some_anchors
|
403
|
+
find_columns_by_type(:anchor).count == 0 ? [{ type: :no_anchor, dataset: id }] : []
|
404
|
+
end
|
405
|
+
|
406
|
+
# Validate if the dataset does not have more than one anchor defined.
|
407
|
+
#
|
408
|
+
# @return [Array] array of errors
|
409
|
+
def validate_more_anchors
|
410
|
+
find_columns_by_type(:anchor).count > 1 ? [{ type: :more_than_on_anchor, dataset: id }] : []
|
411
|
+
end
|
412
|
+
|
413
|
+
# Validate if the attribute does have at least one label
|
414
|
+
#
|
415
|
+
# @return [Array] array of errors
|
416
|
+
def validate_attribute_has_one_label
|
417
|
+
find_columns_by_type(:attribute)
|
418
|
+
.select { |a| a.labels.empty? }
|
419
|
+
.map { |e| { type: :attribute_without_label, attribute: e.id } }
|
420
|
+
end
|
421
|
+
|
422
|
+
# Validate the that any labels are pointing to the existing attribute. If not returns the list of errors. Currently just violating labels.
|
423
|
+
#
|
424
|
+
# @return [Array] array of errors
|
425
|
+
def validate_label_references
|
426
|
+
labels.select { |r| r.attribute.nil? }
|
427
|
+
.map { |er_ref| { type: :wrong_label_reference, label: er_ref.id, wrong_reference: er_ref.data[:reference] } }
|
428
|
+
end
|
429
|
+
|
430
|
+
# Validate the the used gd_data_types are one of the allowed types. The data types are checked on lables and facts.
|
431
|
+
#
|
432
|
+
# @return [Array] array of errors
|
433
|
+
def validate_gd_data_type_errors
|
434
|
+
(labels + facts)
|
435
|
+
.select { |x| x.gd_data_type && !GoodData::Model.check_gd_data_type(x.gd_data_type) }
|
436
|
+
.map { |e| { :error => :invalid_gd_data_type_specified, :column => e.id } }
|
437
|
+
end
|
438
|
+
|
439
|
+
# Helper methods to decide wheather the dataset is considered wide.
|
440
|
+
# Currently the wider datasets have both performance and usability
|
441
|
+
# penalty
|
442
|
+
#
|
443
|
+
# @return [Boolean] matching fields
|
444
|
+
def wide?
|
445
|
+
fields.count > 32
|
446
|
+
end
|
447
|
+
end
|
448
|
+
end
|
449
|
+
end
|
@@ -0,0 +1,14 @@
|
|
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 'schema_blueprint'
|
8
|
+
|
9
|
+
module GoodData
|
10
|
+
module Model
|
11
|
+
class DateDimension < GoodData::Model::SchemaBlueprint
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|