gooddata-edge 0.6.27.edge
Sign up to get free protection for your applications and to get access to all the features.
- 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,134 @@
|
|
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 '../metadata'
|
8
|
+
|
9
|
+
require_relative 'metadata'
|
10
|
+
|
11
|
+
require_relative '../../mixins/is_attribute'
|
12
|
+
|
13
|
+
module GoodData
|
14
|
+
class Attribute < MdObject
|
15
|
+
include Mixin::IsAttribute
|
16
|
+
|
17
|
+
ATTRIBUTE_BASE_AGGREGATIONS = [:count]
|
18
|
+
|
19
|
+
class << self
|
20
|
+
# Method intended to get all objects of that type in a specified project
|
21
|
+
#
|
22
|
+
# @param options [Hash] the options hash
|
23
|
+
# @option options [Boolean] :full if passed true the subclass can decide to pull in full objects. This is desirable from the usability POV but unfortunately has negative impact on performance so it is not the default
|
24
|
+
# @return [Array<GoodData::MdObject> | Array<Hash>] Return the appropriate metadata objects or their representation
|
25
|
+
def all(options = { :client => GoodData.connection, :project => GoodData.project })
|
26
|
+
query('attribute', Attribute, options)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Finds the value of an atribute and gives you the textual form for the label that is acquired by calling primary_label method
|
30
|
+
#
|
31
|
+
# @param uri [String] Uri of the element. in the form of /gdc/md/PID/obj/OBJ_ID/elements?id=21
|
32
|
+
# @return [String] Textual representation of a particular attribute element
|
33
|
+
def find_element_value(stuff, opts = { :project => GoodData.project })
|
34
|
+
stuff.scan(%r{([^\[\]]*)\/elements\?id=(\d+)}).pmap do |a, id|
|
35
|
+
opts[:project].attributes(a).primary_label.find_element_value(id.to_i)
|
36
|
+
end.first
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns the labels of an attribute
|
41
|
+
# @return [Array<GoodData::Label>]
|
42
|
+
def display_forms
|
43
|
+
content['displayForms'].pmap { |df| project.labels(df['meta']['uri']) }
|
44
|
+
end
|
45
|
+
alias_method :labels, :display_forms
|
46
|
+
|
47
|
+
def dimension
|
48
|
+
uri = content['dimension']
|
49
|
+
return nil if uri.nil?
|
50
|
+
GoodData::Dimension[uri, client: client, project: project]
|
51
|
+
end
|
52
|
+
|
53
|
+
# Tells you if an attribute is a date dimension. This happens by inspecting
|
54
|
+
# an identifier if it conforms to a particular scheme.
|
55
|
+
#
|
56
|
+
# @return [Boolean] Is the attribute a date attribute?
|
57
|
+
def date_attribute?
|
58
|
+
things = [
|
59
|
+
'week',
|
60
|
+
'euweek.in.year',
|
61
|
+
'day.in.week',
|
62
|
+
'day.in.month',
|
63
|
+
'day.in.quarter',
|
64
|
+
'day.in.euweek',
|
65
|
+
'date',
|
66
|
+
'quarter.in.year',
|
67
|
+
'week.in.year',
|
68
|
+
'day.in.year',
|
69
|
+
'month',
|
70
|
+
'quarter',
|
71
|
+
'month.in.quarter',
|
72
|
+
'week.in.quarter',
|
73
|
+
'year',
|
74
|
+
'euweek',
|
75
|
+
'euweek.in.quarter',
|
76
|
+
'month.in.year'
|
77
|
+
]
|
78
|
+
potential_id = identifier.split('.')[1..-1].join('.')
|
79
|
+
things.include?(potential_id) ? true : false
|
80
|
+
end
|
81
|
+
|
82
|
+
# Returns the first display form which is the primary one
|
83
|
+
# @return [GoodData::Label] Primary label
|
84
|
+
def primary_display_form
|
85
|
+
labels.first
|
86
|
+
end
|
87
|
+
alias_method :primary_label, :primary_display_form
|
88
|
+
|
89
|
+
# Creates the basic count metric with the attribute used. If you need to compute the attribute on a different dataset you can specify that in params. The metric created is not saved.
|
90
|
+
# @param [Hash] options the options to pass to the value list
|
91
|
+
# @option options [Symbol] :type type of aggregation function.
|
92
|
+
# @option options [Symbol] :attribute Use this attribute if you need to express different dataset for performing the computation on. It basically serves for creating metrics like SELECT COUNT(User, Opportunity).
|
93
|
+
# @return [GoodData::Metric]
|
94
|
+
def create_metric(options = {})
|
95
|
+
an_attribute = options[:attribute]
|
96
|
+
a_type = options[:type] || :count
|
97
|
+
fail "Suggested aggreagtion function (#{a_type}) does not exist for base metric created out of attribute. You can use only one of #{ATTRIBUTE_BASE_AGGREGATIONS.map { |x| ':' + x.to_s }.join(',')}" unless ATTRIBUTE_BASE_AGGREGATIONS.include?(a_type)
|
98
|
+
a_title = options[:title] || "#{a_type} of #{title}"
|
99
|
+
if an_attribute
|
100
|
+
project.create_metric("SELECT #{a_type.to_s.upcase}([#{uri}], [#{an_attribute.uri}])", title: a_title, extended_notation: false)
|
101
|
+
else
|
102
|
+
project.create_metric("SELECT #{a_type.to_s.upcase}([#{uri}])", title: a_title, extended_notation: false)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
alias_method :create_measure, :create_metric
|
107
|
+
|
108
|
+
# For an element id find values (titles) for all display forms. Element id can be given as both number id or URI as a string beginning with /
|
109
|
+
# @param [Object] element_id Element identifier either Number or a uri as a String
|
110
|
+
# @return [Array] list of values for certain element. Returned in the same order as is the order of labels
|
111
|
+
def values_for(element_id)
|
112
|
+
# element_id = element_id.is_a?(String) ? element_id.match(/\?id=(\d)/)[1] : element_id
|
113
|
+
labels.map do |label|
|
114
|
+
label.find_element_value(element_id)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# Returns all values for all labels. This is for inspection purposes only since obviously there can be huge number of elements.
|
119
|
+
# @param [Hash] options the options to pass to the value list
|
120
|
+
# @option options [Number] :limit limits the number of values to certain number. Default is 100
|
121
|
+
# @return [Array]
|
122
|
+
def values
|
123
|
+
results = labels.map(&:values)
|
124
|
+
results.first.zip(*results[1..-1])
|
125
|
+
end
|
126
|
+
|
127
|
+
# Allows to search in attribute labels by name. It uses the string as a basis for regexp and tries to match either a title or an identifier. Returns first match.
|
128
|
+
# @param name [String] name used as a basis for regular expression
|
129
|
+
# @return [GoodData::Label]
|
130
|
+
def label_by_name(name)
|
131
|
+
labels.find { |label| label.title =~ /#{name}/ || label.identifier =~ /#{name}/ }
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,108 @@
|
|
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_tab'
|
8
|
+
require_relative 'dashboard/filter_item'
|
9
|
+
require_relative 'dashboard/report_item'
|
10
|
+
|
11
|
+
require_relative '../../core/core'
|
12
|
+
require_relative '../../helpers/global_helpers'
|
13
|
+
require_relative '../metadata'
|
14
|
+
require_relative 'metadata'
|
15
|
+
require_relative 'report'
|
16
|
+
|
17
|
+
require 'multi_json'
|
18
|
+
|
19
|
+
module GoodData
|
20
|
+
class Dashboard < GoodData::MdObject
|
21
|
+
include Mixin::Lockable
|
22
|
+
|
23
|
+
EMPTY_OBJECT = {
|
24
|
+
'projectDashboard' => {
|
25
|
+
'content' => {
|
26
|
+
'tabs' => [],
|
27
|
+
'filters' => []
|
28
|
+
},
|
29
|
+
'meta' => {
|
30
|
+
'tags' => '',
|
31
|
+
'summary' => '',
|
32
|
+
'title' => ''
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
ASSIGNABLE_MEMBERS = [
|
38
|
+
:filters,
|
39
|
+
:tabs,
|
40
|
+
:tags,
|
41
|
+
:summary,
|
42
|
+
:title
|
43
|
+
]
|
44
|
+
|
45
|
+
class << self
|
46
|
+
# Method intended to get all objects of that type in a specified project
|
47
|
+
#
|
48
|
+
# @param options [Hash] the options hash
|
49
|
+
# @option options [Boolean] :full if passed true the subclass can decide to pull in full objects. This is desirable from the usability POV but unfortunately has negative impact on performance so it is not the default
|
50
|
+
# @return [Array<GoodData::MdObject> | Array<Hash>] Return the appropriate metadata objects or their representation
|
51
|
+
def all(options = { :client => GoodData.connection, :project => GoodData.project })
|
52
|
+
query('projectDashboard', Dashboard, options)
|
53
|
+
end
|
54
|
+
|
55
|
+
def create(dashboard = {}, options = { :client => GoodData.client, :project => GoodData.project })
|
56
|
+
client, project = GoodData.get_client_and_project(options)
|
57
|
+
|
58
|
+
res = client.create(Dashboard, GoodData::Helpers.deep_dup(GoodData::Helpers.deep_stringify_keys(EMPTY_OBJECT)), :project => project)
|
59
|
+
dashboard.each do |k, v|
|
60
|
+
res.send("#{k}=", v) if ASSIGNABLE_MEMBERS.include? k
|
61
|
+
end
|
62
|
+
res
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def add_tab(tab)
|
67
|
+
new_tab = GoodData::DashboardTab.create(self, tab)
|
68
|
+
content['tabs'] << new_tab.json
|
69
|
+
new_tab
|
70
|
+
end
|
71
|
+
|
72
|
+
alias_method :create_tab, :add_tab
|
73
|
+
|
74
|
+
def exportable?
|
75
|
+
true
|
76
|
+
end
|
77
|
+
|
78
|
+
def export(format, options = {})
|
79
|
+
supported_formats = [:pdf]
|
80
|
+
fail "Wrong format provied \"#{format}\". Only supports formats #{supported_formats.join(', ')}" unless supported_formats.include?(format)
|
81
|
+
tab = options[:tab] || ''
|
82
|
+
|
83
|
+
req_uri = "/gdc/projects/#{project.pid}/clientexport"
|
84
|
+
x = client.post(req_uri, 'clientExport' => { 'url' => "#{client.connection.server_url}/dashboard.html#project=#{project.uri}&dashboard=#{uri}&tab=#{tab}&export=1", 'name' => title })
|
85
|
+
client.poll_on_code(x['asyncTask']['link']['poll'], options.merge(process: false))
|
86
|
+
end
|
87
|
+
|
88
|
+
# Method used for replacing values in their state according to mapping. Can be used to replace any values but it is typically used to replace the URIs. Returns a new object of the same type.
|
89
|
+
#
|
90
|
+
# @param [Array<Array>]Mapping specifying what should be exchanged for what. As mapping should be used output of GoodData::Helpers.prepare_mapping.
|
91
|
+
# @return [GoodData::Dashboard]
|
92
|
+
def replace(mapping)
|
93
|
+
x = GoodData::MdObject.replace_quoted(self, mapping)
|
94
|
+
vals = GoodData::MdObject.find_replaceable_values(self, mapping)
|
95
|
+
GoodData::MdObject.replace_quoted(x, vals)
|
96
|
+
end
|
97
|
+
|
98
|
+
def tabs
|
99
|
+
content['tabs'].map do |tab|
|
100
|
+
GoodData::DashboardTab.new(self, tab)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def tabs_ids
|
105
|
+
tabs.map { |t| t['identifier'] }
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,76 @@
|
|
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 DashboardItem < Rest::Resource
|
11
|
+
attr_reader :tab
|
12
|
+
attr_accessor :json
|
13
|
+
|
14
|
+
ASSIGNABLE_MEMBERS = [
|
15
|
+
:pos_x,
|
16
|
+
:pos_y,
|
17
|
+
:position_x,
|
18
|
+
:position_y,
|
19
|
+
:size_x,
|
20
|
+
:size_y
|
21
|
+
]
|
22
|
+
|
23
|
+
def initialize(tab, json)
|
24
|
+
@tab = tab
|
25
|
+
@json = json
|
26
|
+
end
|
27
|
+
|
28
|
+
def filters
|
29
|
+
data['filters']
|
30
|
+
end
|
31
|
+
|
32
|
+
def filters=(new_filters)
|
33
|
+
data['filters'] = new_filters
|
34
|
+
end
|
35
|
+
|
36
|
+
def position_x
|
37
|
+
data['positionX']
|
38
|
+
end
|
39
|
+
|
40
|
+
alias_method :pos_x, :position_x
|
41
|
+
|
42
|
+
def position_x=(new_position_x)
|
43
|
+
data['positionX'] = new_position_x
|
44
|
+
end
|
45
|
+
|
46
|
+
alias_method :pos_x=, :position_x=
|
47
|
+
|
48
|
+
def position_y
|
49
|
+
data['positionY']
|
50
|
+
end
|
51
|
+
|
52
|
+
alias_method :pos_y, :position_y
|
53
|
+
|
54
|
+
def position_y=(new_position_y)
|
55
|
+
data['positionY'] = new_position_y
|
56
|
+
end
|
57
|
+
|
58
|
+
alias_method :pos_y=, :position_y=
|
59
|
+
|
60
|
+
def size_x
|
61
|
+
data['sizeX']
|
62
|
+
end
|
63
|
+
|
64
|
+
def size_x=(new_size_x)
|
65
|
+
data['sizeX'] = new_size_x
|
66
|
+
end
|
67
|
+
|
68
|
+
def size_y
|
69
|
+
data['sizeY']
|
70
|
+
end
|
71
|
+
|
72
|
+
def size_y=(new_size_y)
|
73
|
+
data['sizeY'] = new_size_y
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,37 @@
|
|
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_item'
|
8
|
+
|
9
|
+
module GoodData
|
10
|
+
class FilterApplyItem < DashboardItem
|
11
|
+
EMPTY_OBJECT = {
|
12
|
+
'filterApplyItem' => {
|
13
|
+
'positionX' => 0,
|
14
|
+
'sizeY' => 200,
|
15
|
+
'sizeX' => 300,
|
16
|
+
'positionY' => 0
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
ASSIGNABLE_MEMBERS = DashboardItem::ASSIGNABLE_MEMBERS + [
|
21
|
+
]
|
22
|
+
|
23
|
+
class << self
|
24
|
+
def create(tab, item)
|
25
|
+
res = GoodData::FilterApply.new(tab, GoodData::Helpers.deep_dup(GoodData::Helpers.deep_stringify_keys(EMPTY_OBJECT)))
|
26
|
+
item.each do |k, v|
|
27
|
+
res.send("#{k}=", v) if ASSIGNABLE_MEMBERS.include? k
|
28
|
+
end
|
29
|
+
res
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize(tab, json)
|
34
|
+
super
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,64 @@
|
|
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_item'
|
8
|
+
|
9
|
+
module GoodData
|
10
|
+
class FilterItem < DashboardItem
|
11
|
+
EMPTY_OBJECT = {
|
12
|
+
'filterItem' => {
|
13
|
+
'positionX' => 0,
|
14
|
+
'sizeY' => 200,
|
15
|
+
'sizeX' => 300,
|
16
|
+
'positionY' => 0
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
ASSIGNABLE_MEMBERS = DashboardItem::ASSIGNABLE_MEMBERS + [
|
21
|
+
:id,
|
22
|
+
:content_id,
|
23
|
+
:parent_filters
|
24
|
+
]
|
25
|
+
|
26
|
+
class << self
|
27
|
+
def create(tab, item)
|
28
|
+
res = GoodData::FilterItem.new(tab, GoodData::Helpers.deep_dup(GoodData::Helpers.deep_stringify_keys(EMPTY_OBJECT)))
|
29
|
+
item.each do |k, v|
|
30
|
+
res.send("#{k}=", v) if ASSIGNABLE_MEMBERS.include? k
|
31
|
+
end
|
32
|
+
res
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def initialize(tab, json)
|
37
|
+
super
|
38
|
+
end
|
39
|
+
|
40
|
+
def id
|
41
|
+
data['id']
|
42
|
+
end
|
43
|
+
|
44
|
+
def id=(new_id)
|
45
|
+
data['id'] = new_id
|
46
|
+
end
|
47
|
+
|
48
|
+
def content_id
|
49
|
+
data['contentId']
|
50
|
+
end
|
51
|
+
|
52
|
+
def content_id=(new_content_id)
|
53
|
+
data['contentId'] = new_content_id
|
54
|
+
end
|
55
|
+
|
56
|
+
def parent_filters
|
57
|
+
data['parentFilters']
|
58
|
+
end
|
59
|
+
|
60
|
+
def parent_filters=(new_parent_filters)
|
61
|
+
data['parentFilters'] = new_parent_filters
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,56 @@
|
|
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_item'
|
8
|
+
|
9
|
+
module GoodData
|
10
|
+
class GeoChartItem < DashboardItem
|
11
|
+
EMPTY_OBJECT = {
|
12
|
+
'geoChartItem' => {
|
13
|
+
'positionX' => 0,
|
14
|
+
'sizeY' => 200,
|
15
|
+
'sizeX' => 300,
|
16
|
+
'positionY' => 0
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
ASSIGNABLE_MEMBERS = DashboardItem::ASSIGNABLE_MEMBERS + [
|
21
|
+
:id,
|
22
|
+
:metric,
|
23
|
+
:layers_base_color
|
24
|
+
]
|
25
|
+
|
26
|
+
class << self
|
27
|
+
def create(tab, item)
|
28
|
+
res = GoodData::GeoChartItem.new(tab, GoodData::Helpers.deep_dup(GoodData::Helpers.deep_stringify_keys(EMPTY_OBJECT)))
|
29
|
+
item.each do |k, v|
|
30
|
+
res.send("#{k}=", v) if ASSIGNABLE_MEMBERS.include? k
|
31
|
+
end
|
32
|
+
res
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def initialize(tab, json)
|
37
|
+
super
|
38
|
+
end
|
39
|
+
|
40
|
+
def metric
|
41
|
+
data['metric']
|
42
|
+
end
|
43
|
+
|
44
|
+
def metric=(new_metric)
|
45
|
+
data['metric'] = new_metric.respond_to?(:uri) ? new_metric.uri : new_metric
|
46
|
+
end
|
47
|
+
|
48
|
+
def layers_base_color
|
49
|
+
data['layersBaseColor']
|
50
|
+
end
|
51
|
+
|
52
|
+
def layers_base_color=(new_layers_base_color)
|
53
|
+
data['layersBaseColor'] = new_layers_base_color
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|