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,154 @@
|
|
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 ToWire
|
10
|
+
# Converts anchor to wire format. There is difference between datsets that
|
11
|
+
# do not have anchor and those that do. Even if there is no acnhor you
|
12
|
+
# stil have to generate. If there is anchor it behaves exactly like am
|
13
|
+
# attribute
|
14
|
+
#
|
15
|
+
# @param project [Hash] Project blueprint hash represenation
|
16
|
+
# @param dataset [Hash] Dataset blueprint hash represenation
|
17
|
+
# @return [Hash] Manifest for a particular reference
|
18
|
+
def self.anchor_to_wire(_project, dataset)
|
19
|
+
attribute_to_wire(dataset, DatasetBlueprint.anchor(dataset))
|
20
|
+
end
|
21
|
+
|
22
|
+
# Converts atttribute to wire format.
|
23
|
+
#
|
24
|
+
# @param project [Hash] Project blueprint hash represenation
|
25
|
+
# @param dataset [Hash] Dataset blueprint hash represenation
|
26
|
+
# @return [Hash] Manifest for a particular reference
|
27
|
+
def self.attributes_to_wire(_project, dataset)
|
28
|
+
DatasetBlueprint.attributes(dataset).map do |a|
|
29
|
+
attribute_to_wire(dataset, a)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Converts atttribute to wire format.
|
34
|
+
#
|
35
|
+
# @param dataset [Hash] Dataset blueprint hash represenation
|
36
|
+
# @param attribute [Hash] Attribute
|
37
|
+
# @return [Hash] Manifest for a particular reference
|
38
|
+
def self.attribute_to_wire(dataset, attribute)
|
39
|
+
ls = DatasetBlueprint.labels_for_attribute(dataset, attribute)
|
40
|
+
labels = ls.map do |l|
|
41
|
+
{
|
42
|
+
label: {
|
43
|
+
identifier: l[:id],
|
44
|
+
title: GoodData::Model.title(l),
|
45
|
+
type: l[:gd_type] || Model::DEFAULT_TYPE,
|
46
|
+
dataType: GoodData::Model.normalize_gd_data_type(l[:gd_data_type]) || Model::DEFAULT_ATTRIBUTE_DATATYPE
|
47
|
+
}
|
48
|
+
}
|
49
|
+
end
|
50
|
+
{}.tap do |a|
|
51
|
+
a[:attribute] = {}
|
52
|
+
a[:attribute][:identifier] = attribute[:id]
|
53
|
+
a[:attribute][:title] = Model.title(attribute)
|
54
|
+
a[:attribute][:folder] = attribute[:folder] || dataset[:folder] || GoodData::Model.title(dataset)
|
55
|
+
a[:attribute][:labels] = labels unless labels.empty?
|
56
|
+
a[:attribute][:description] = GoodData::Model.description(attribute) if GoodData::Model.description(attribute)
|
57
|
+
if attribute[:grain]
|
58
|
+
a[:attribute][:grain] = attribute[:grain].map do |g|
|
59
|
+
case g.keys.first
|
60
|
+
when :date
|
61
|
+
{ dateDimension: g.values.first }
|
62
|
+
else
|
63
|
+
g
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
default = ls.find { |l| l[:default_label] }
|
68
|
+
a[:attribute][:defaultLabel] = (default && default[:id]) || ls.first[:id] unless ls.empty?
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Converts dataset to wire format.
|
73
|
+
#
|
74
|
+
# @param project [Hash] Project blueprint hash represenation
|
75
|
+
# @param dataset [Hash] Dataset blueprint hash represenation
|
76
|
+
# @return [Hash] Manifest for a particular reference
|
77
|
+
def self.dataset_to_wire(project, dataset)
|
78
|
+
{
|
79
|
+
dataset: {
|
80
|
+
identifier: dataset[:id],
|
81
|
+
title: GoodData::Model.title(dataset),
|
82
|
+
anchor: anchor_to_wire(project, dataset),
|
83
|
+
attributes: attributes_to_wire(project, dataset),
|
84
|
+
facts: DatasetBlueprint.facts(dataset).map { |f| fact_to_wire(dataset, f) },
|
85
|
+
references: references_to_wire(project, dataset)
|
86
|
+
}
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
# Converts date dimension to wire format.
|
91
|
+
#
|
92
|
+
# @param project [Hash] Project blueprint hash represenation
|
93
|
+
# @param dataset [Hash] Dataset blueprint hash represenation
|
94
|
+
# @return [Hash] Manifest for a particular reference
|
95
|
+
def self.date_dimension_to_wire(_project, dataset)
|
96
|
+
payload = {}.tap do |dd|
|
97
|
+
dd[:name] = dataset[:id]
|
98
|
+
dd[:urn] = dataset[:urn] if dataset[:urn]
|
99
|
+
dd[:title] = GoodData::Model.title(dataset)
|
100
|
+
end
|
101
|
+
{ dateDimension: payload }
|
102
|
+
end
|
103
|
+
|
104
|
+
# Converts fact to wire format.
|
105
|
+
#
|
106
|
+
# @param dataset [Hash] Dataset blueprint hash represenation
|
107
|
+
# @param fact [Hash] Fact blueprint
|
108
|
+
# @return [Hash] Manifest for a particular reference
|
109
|
+
def self.fact_to_wire(dataset, fact)
|
110
|
+
payload = {
|
111
|
+
fact: {
|
112
|
+
identifier: fact[:id],
|
113
|
+
title: GoodData::Model.title(fact),
|
114
|
+
folder: fact[:folder] || dataset[:folder] || GoodData::Model.title(dataset),
|
115
|
+
dataType: GoodData::Model.normalize_gd_data_type(fact[:gd_data_type]) || DEFAULT_FACT_DATATYPE
|
116
|
+
}
|
117
|
+
}
|
118
|
+
payload.tap do |p|
|
119
|
+
p[:fact][:description] = GoodData::Model.description(fact) if GoodData::Model.description(fact)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# Converts references to wire format.
|
124
|
+
#
|
125
|
+
# @param fact [Hash] Project blueprint hash represenation
|
126
|
+
# @param dataset [Hash] Dataset blueprint hash represenation
|
127
|
+
# @return [Hash] Manifest for a particular reference
|
128
|
+
def self.references_to_wire(_project, dataset)
|
129
|
+
DatasetBlueprint.references(dataset).map do |r|
|
130
|
+
r[:dataset]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# Entry method. Converts ProjectBlueprint representation into wire format
|
135
|
+
# which is understood by the API
|
136
|
+
#
|
137
|
+
# @param fact [Hash] Project blueprint represenation
|
138
|
+
# @param dataset [Hash] Dataset blueprint hash represenation
|
139
|
+
# @return [Hash] Manifest for a particular reference
|
140
|
+
def self.to_wire(what)
|
141
|
+
{
|
142
|
+
diffRequest: {
|
143
|
+
targetModel: {
|
144
|
+
projectModel: {
|
145
|
+
datasets: (what[:datasets] || []).map { |d| dataset_to_wire(what, d) },
|
146
|
+
dateDimensions: (what[:date_dimensions] || []).map { |d| date_dimension_to_wire(what, d) }
|
147
|
+
}
|
148
|
+
}
|
149
|
+
}
|
150
|
+
}
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -0,0 +1,182 @@
|
|
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 '../rest/resource'
|
8
|
+
|
9
|
+
require_relative '../mixins/data_property_reader'
|
10
|
+
require_relative '../mixins/links'
|
11
|
+
require_relative '../mixins/rest_resource'
|
12
|
+
require_relative '../mixins/uri_getter'
|
13
|
+
|
14
|
+
module GoodData
|
15
|
+
class Client < Rest::Resource
|
16
|
+
data_property_reader 'id'
|
17
|
+
|
18
|
+
attr_accessor :domain
|
19
|
+
|
20
|
+
include Mixin::Links
|
21
|
+
include Mixin::UriGetter
|
22
|
+
|
23
|
+
CLIENT_TEMPLATE = {
|
24
|
+
client: {
|
25
|
+
id: nil,
|
26
|
+
segment: nil,
|
27
|
+
project: nil
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
class << self
|
32
|
+
def [](id, opts = {})
|
33
|
+
domain = opts[:domain]
|
34
|
+
segment = opts[:segment]
|
35
|
+
fail ArgumentError, 'No :domain specified' if domain.nil?
|
36
|
+
fail ArgumentError, 'No :segment specified' if domain.nil?
|
37
|
+
|
38
|
+
client = domain.client
|
39
|
+
fail ArgumentError, 'No client specified' if client.nil?
|
40
|
+
|
41
|
+
if id == :all
|
42
|
+
tenants_uri = domain.segments_uri + "/clients?segment=#{CGI.escape(segment.segment_id)}"
|
43
|
+
Enumerator.new do |y|
|
44
|
+
loop do
|
45
|
+
res = client.get tenants_uri
|
46
|
+
res['clients']['paging']['next']
|
47
|
+
res['clients']['items'].each do |i|
|
48
|
+
p = i['client']['project']
|
49
|
+
tenant = client.create(GoodData::Client, i.merge('domain' => domain))
|
50
|
+
tenant.project = p
|
51
|
+
y << tenant
|
52
|
+
end
|
53
|
+
url = res['clients']['paging']['next']
|
54
|
+
break unless url
|
55
|
+
end
|
56
|
+
end
|
57
|
+
else
|
58
|
+
id = id.respond_to?(:client_id) ? id.client_id : id
|
59
|
+
data = client.get(domain.segments_uri + "/clients/#{CGI.escape(id)}")
|
60
|
+
client.create(GoodData::Client, data.merge('domain' => domain))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Creates new client from parameters passed
|
65
|
+
#
|
66
|
+
# @param options [Hash] Optional options
|
67
|
+
# @return [GoodData::Schedule] New GoodData::Schedule instance
|
68
|
+
def create(data = {}, options = {})
|
69
|
+
segment = options[:segment]
|
70
|
+
domain = segment.domain
|
71
|
+
tenant = client.create(GoodData::Client, GoodData::Helpers.deep_stringify_keys(CLIENT_TEMPLATE.merge(domain: domain)), domain: domain)
|
72
|
+
tenant.tap do |s|
|
73
|
+
s.project = data[:project]
|
74
|
+
s.client_id = data[:id]
|
75
|
+
s.segment = segment.uri
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def initialize(data)
|
81
|
+
super(data)
|
82
|
+
@domain = data.delete('domain')
|
83
|
+
@json = data
|
84
|
+
end
|
85
|
+
|
86
|
+
# Segment id getter for the Segment. Called segment_id since id is a reserved word in ruby world
|
87
|
+
#
|
88
|
+
# @return [String] Segment id
|
89
|
+
def client_id
|
90
|
+
data['id']
|
91
|
+
end
|
92
|
+
|
93
|
+
def client_id=(a_name)
|
94
|
+
data['id'] = a_name
|
95
|
+
self
|
96
|
+
end
|
97
|
+
|
98
|
+
# Setter for the project this client has set
|
99
|
+
#
|
100
|
+
# @param a_project [String|GoodData::Project] Id or an instance of a project
|
101
|
+
# @return [GoodData::Cliet] Returns the instance of the client
|
102
|
+
def project=(a_project)
|
103
|
+
data['project'] = a_project.respond_to?(:uri) ? a_project.uri : a_project
|
104
|
+
self
|
105
|
+
end
|
106
|
+
|
107
|
+
# Project URI this client has set
|
108
|
+
#
|
109
|
+
# @return [String] Returns the URI of the project this client has set
|
110
|
+
def project_uri
|
111
|
+
data['project']
|
112
|
+
end
|
113
|
+
|
114
|
+
# Project this client has set
|
115
|
+
#
|
116
|
+
# @return [GoodData::Project] Returns the instance of the client's project
|
117
|
+
def project
|
118
|
+
client.projects(project_uri) if project?
|
119
|
+
end
|
120
|
+
|
121
|
+
# Returns boolean if client has a project provisioned
|
122
|
+
#
|
123
|
+
# @return [Boolean] Returns true if client has a project provisioned. False otherwise
|
124
|
+
def project?
|
125
|
+
project_uri != nil
|
126
|
+
end
|
127
|
+
|
128
|
+
# Reloads the client from the URI
|
129
|
+
#
|
130
|
+
# @return [GoodData::Client] Returns the updated client object
|
131
|
+
def reload!
|
132
|
+
res = client.get(uri)
|
133
|
+
@json = res
|
134
|
+
self
|
135
|
+
end
|
136
|
+
|
137
|
+
# Segment id setter which this client is connected to.
|
138
|
+
#
|
139
|
+
# @param a_segment [String] Id of the segment.
|
140
|
+
# @return [GoodData::Client] Returns the instance of the client
|
141
|
+
def segment=(a_segment)
|
142
|
+
data['segment'] = a_segment.respond_to?(:uri) ? a_segment.uri : a_segment
|
143
|
+
self
|
144
|
+
end
|
145
|
+
|
146
|
+
# Segment this client is connected to.
|
147
|
+
#
|
148
|
+
# @return [GoodData::Segment] Segment
|
149
|
+
def segment
|
150
|
+
segment_res = client.get(data['segment'])
|
151
|
+
client.create(GoodData::Segment, segment_res)
|
152
|
+
end
|
153
|
+
|
154
|
+
# Segment URI this client is connected to.
|
155
|
+
#
|
156
|
+
# @return [String] Segment URI
|
157
|
+
def segment_uri
|
158
|
+
data['segment']
|
159
|
+
end
|
160
|
+
|
161
|
+
# Creates or updates a client instance on the API.
|
162
|
+
#
|
163
|
+
# @return [GoodData::Client] Client instance
|
164
|
+
def save
|
165
|
+
if uri
|
166
|
+
client.put(uri, json)
|
167
|
+
else
|
168
|
+
res = client.post(domain.segments_uri + '/clients', json)
|
169
|
+
@json = res
|
170
|
+
end
|
171
|
+
self
|
172
|
+
end
|
173
|
+
|
174
|
+
# Deletes a client instance on the API.
|
175
|
+
#
|
176
|
+
# @return [GoodData::Client] Segment instance
|
177
|
+
def delete
|
178
|
+
project.delete if project && !project.deleted?
|
179
|
+
client.delete(uri) if uri
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -0,0 +1,31 @@
|
|
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 './client_synchronization_result_details'
|
8
|
+
|
9
|
+
require_relative '../mixins/data_property_reader'
|
10
|
+
require_relative '../mixins/links'
|
11
|
+
|
12
|
+
require_relative '../rest/resource'
|
13
|
+
|
14
|
+
module GoodData
|
15
|
+
class ClientSynchronizationResult < Rest::Resource
|
16
|
+
include Mixin::Links
|
17
|
+
|
18
|
+
# Initializes object instance from raw wire JSON
|
19
|
+
#
|
20
|
+
# @param json Json used for initialization
|
21
|
+
def initialize(json, opts = {})
|
22
|
+
super(opts)
|
23
|
+
@json = json
|
24
|
+
end
|
25
|
+
|
26
|
+
def details
|
27
|
+
res = client.get(links['details'])
|
28
|
+
client.create(GoodData::ClientSynchronizationResultDetails, res) if res
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,41 @@
|
|
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 './client'
|
8
|
+
|
9
|
+
require_relative '../mixins/data_property_reader'
|
10
|
+
require_relative '../mixins/links'
|
11
|
+
|
12
|
+
require_relative '../rest/resource'
|
13
|
+
|
14
|
+
module GoodData
|
15
|
+
class ClientSynchronizationResultDetails < Rest::Resource
|
16
|
+
include Mixin::Links
|
17
|
+
|
18
|
+
attr_accessor :synchronization_result
|
19
|
+
|
20
|
+
# Initializes object instance from raw wire JSON
|
21
|
+
#
|
22
|
+
# @param json Json used for initialization
|
23
|
+
def initialize(json, opts = { :synchronization_result => nil })
|
24
|
+
super(opts)
|
25
|
+
@json = json
|
26
|
+
@synchronization_result = opts[:synchronization_result]
|
27
|
+
end
|
28
|
+
|
29
|
+
def items
|
30
|
+
data['items']
|
31
|
+
end
|
32
|
+
|
33
|
+
def next
|
34
|
+
paging && paging['next']
|
35
|
+
end
|
36
|
+
|
37
|
+
def paging
|
38
|
+
data['paging']
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,92 @@
|
|
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 '../rest/resource'
|
8
|
+
|
9
|
+
module GoodData
|
10
|
+
class DataWarehouse < Rest::Resource
|
11
|
+
class << self
|
12
|
+
CREATE_URL = '/gdc/datawarehouse/instances'
|
13
|
+
|
14
|
+
# Create a data warehouse from given attributes
|
15
|
+
# Expected keys:
|
16
|
+
# - :title (mandatory)
|
17
|
+
# - :auth_token (mandatory)
|
18
|
+
# - :summary
|
19
|
+
def create(opts)
|
20
|
+
GoodData.logger.info "Creating warehouse #{opts[:title]}"
|
21
|
+
|
22
|
+
c = client(opts)
|
23
|
+
fail ArgumentError, 'No :client specified' if c.nil?
|
24
|
+
|
25
|
+
opts = { :auth_token => Helpers::AuthHelper.read_token }.merge(opts)
|
26
|
+
auth_token = opts[:auth_token] || opts[:token]
|
27
|
+
fail ArgumentError, 'You have to provide your token for creating projects as :auth_token parameter' if auth_token.nil? || auth_token.empty?
|
28
|
+
|
29
|
+
title = opts[:title]
|
30
|
+
fail ArgumentError, 'You have to provide a title for creating warehouse as :title parameter' if title.nil? || title.empty?
|
31
|
+
|
32
|
+
json = {
|
33
|
+
'instance' => {
|
34
|
+
'title' => title,
|
35
|
+
'description' => opts[:description] || opts[:summary] || 'No summary',
|
36
|
+
'authorizationToken' => auth_token
|
37
|
+
}
|
38
|
+
}
|
39
|
+
# do the first post
|
40
|
+
res = c.post(CREATE_URL, json)
|
41
|
+
|
42
|
+
# wait until the instance is created
|
43
|
+
final_res = c.poll_on_response(res['asyncTask']['links']['poll'], opts.merge(sleep_interval: 3)) do |r|
|
44
|
+
r['asyncTask']['links']['instance'].nil?
|
45
|
+
end
|
46
|
+
|
47
|
+
# get the json of the created instance
|
48
|
+
final_json = c.get(final_res['asyncTask']['links']['instance'])
|
49
|
+
|
50
|
+
# create the public facing object
|
51
|
+
c.create(DataWarehouse, final_json)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def initialize(json)
|
56
|
+
super
|
57
|
+
@json = json
|
58
|
+
end
|
59
|
+
|
60
|
+
def title
|
61
|
+
json['instance']['title']
|
62
|
+
end
|
63
|
+
|
64
|
+
def summary
|
65
|
+
json['instance']['description']
|
66
|
+
end
|
67
|
+
|
68
|
+
def status
|
69
|
+
json['instance']['status']
|
70
|
+
end
|
71
|
+
|
72
|
+
def uri
|
73
|
+
json['instance']['links']['self']
|
74
|
+
end
|
75
|
+
|
76
|
+
def id
|
77
|
+
uri.split('/')[-1]
|
78
|
+
end
|
79
|
+
|
80
|
+
def delete
|
81
|
+
if state == 'DELETED'
|
82
|
+
fail "Warehouse '#{title}' with id #{uri} is already deleted"
|
83
|
+
end
|
84
|
+
client.delete(uri)
|
85
|
+
end
|
86
|
+
|
87
|
+
# alias methods to prevent confusion and support the same keys
|
88
|
+
# project has.
|
89
|
+
alias_method :state, :status
|
90
|
+
alias_method :description, :summary
|
91
|
+
end
|
92
|
+
end
|