gooddata 1.0.0-java
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/.editorconfig +12 -0
- data/.flayignore +6 -0
- data/.gitignore +38 -0
- data/.pronto.yml +3 -0
- data/.rspec +5 -0
- data/.rubocop.yml +101 -0
- data/.travis.yml +9 -0
- data/.yardopts +22 -0
- data/CHANGELOG.md +272 -0
- data/CLI.md +435 -0
- data/CONTRIBUTING.md +38 -0
- data/DEPENDENCIES.md +880 -0
- data/Dockerfile.jruby +17 -0
- data/Dockerfile.ruby +19 -0
- data/Gemfile +4 -0
- data/Guardfile +5 -0
- data/LICENSE +22 -0
- data/LICENSE.rb +5 -0
- data/README.md +78 -0
- data/Rakefile +204 -0
- data/TODO.md +32 -0
- data/authors.sh +4 -0
- data/bin/gooddata +7 -0
- data/ci.rake +47 -0
- data/dependency_decisions.yml +104 -0
- data/docker-compose.yml +34 -0
- data/gooddata +9 -0
- data/gooddata.gemspec +72 -0
- data/lib/gooddata.rb +34 -0
- data/lib/gooddata/app/app.rb +16 -0
- data/lib/gooddata/bricks/base_downloader.rb +86 -0
- data/lib/gooddata/bricks/brick.rb +37 -0
- data/lib/gooddata/bricks/bricks.rb +17 -0
- data/lib/gooddata/bricks/middleware/aws_middleware.rb +41 -0
- data/lib/gooddata/bricks/middleware/base_middleware.rb +57 -0
- data/lib/gooddata/bricks/middleware/bench_middleware.rb +25 -0
- data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +37 -0
- data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +21 -0
- data/lib/gooddata/bricks/middleware/dwh_middleware.rb +41 -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 +112 -0
- data/lib/gooddata/bricks/middleware/logger_middleware.rb +33 -0
- data/lib/gooddata/bricks/middleware/middleware.rb +12 -0
- data/lib/gooddata/bricks/middleware/restforce_middleware.rb +58 -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 +25 -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 +28 -0
- data/lib/gooddata/cli/hooks.rb +56 -0
- data/lib/gooddata/cli/shared.rb +66 -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 +144 -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 +32 -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/export_clone.rb +4 -0
- data/lib/gooddata/exceptions/filter_maqlization.rb +16 -0
- data/lib/gooddata/exceptions/import_clone.rb +4 -0
- data/lib/gooddata/exceptions/malformed_user.rb +15 -0
- data/lib/gooddata/exceptions/maql_execution.rb +16 -0
- data/lib/gooddata/exceptions/no_project_error.rb +19 -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/class.rb +11 -0
- data/lib/gooddata/extensions/enumerable.rb +39 -0
- data/lib/gooddata/extensions/extensions.rb +10 -0
- data/lib/gooddata/extensions/false.rb +23 -0
- data/lib/gooddata/extensions/hash.rb +49 -0
- data/lib/gooddata/extensions/integer.rb +5 -0
- data/lib/gooddata/extensions/nil.rb +19 -0
- data/lib/gooddata/extensions/numeric.rb +15 -0
- data/lib/gooddata/extensions/object.rb +31 -0
- data/lib/gooddata/extensions/string.rb +7 -0
- data/lib/gooddata/extensions/symbol.rb +15 -0
- data/lib/gooddata/extensions/true.rb +23 -0
- data/lib/gooddata/extract.rb +21 -0
- data/lib/gooddata/goodzilla/goodzilla.rb +160 -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 +129 -0
- data/lib/gooddata/helpers/erb_helper.rb +23 -0
- data/lib/gooddata/helpers/global_helpers.rb +266 -0
- data/lib/gooddata/helpers/global_helpers_params.rb +292 -0
- data/lib/gooddata/helpers/helpers.rb +10 -0
- data/lib/gooddata/lcm/actions/actions.rb +12 -0
- data/lib/gooddata/lcm/actions/apply_custom_maql.rb +80 -0
- data/lib/gooddata/lcm/actions/associate_clients.rb +87 -0
- data/lib/gooddata/lcm/actions/base_action.rb +23 -0
- data/lib/gooddata/lcm/actions/collect_ca_metrics.rb +53 -0
- data/lib/gooddata/lcm/actions/collect_client_projects.rb +78 -0
- data/lib/gooddata/lcm/actions/collect_clients.rb +128 -0
- data/lib/gooddata/lcm/actions/collect_data_product.rb +57 -0
- data/lib/gooddata/lcm/actions/collect_dynamic_schedule_params.rb +62 -0
- data/lib/gooddata/lcm/actions/collect_ldm_objects.rb +56 -0
- data/lib/gooddata/lcm/actions/collect_meta.rb +88 -0
- data/lib/gooddata/lcm/actions/collect_segment_clients.rb +113 -0
- data/lib/gooddata/lcm/actions/collect_segments.rb +72 -0
- data/lib/gooddata/lcm/actions/collect_tagged_objects.rb +80 -0
- data/lib/gooddata/lcm/actions/collect_users_brick_users.rb +46 -0
- data/lib/gooddata/lcm/actions/create_segment_masters.rb +160 -0
- data/lib/gooddata/lcm/actions/ensure_data_product.rb +53 -0
- data/lib/gooddata/lcm/actions/ensure_release_table.rb +53 -0
- data/lib/gooddata/lcm/actions/ensure_segments.rb +32 -0
- data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +70 -0
- data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +83 -0
- data/lib/gooddata/lcm/actions/execute_schedules.rb +128 -0
- data/lib/gooddata/lcm/actions/hello_world.rb +41 -0
- data/lib/gooddata/lcm/actions/import_object_collections.rb +60 -0
- data/lib/gooddata/lcm/actions/print_actions.rb +58 -0
- data/lib/gooddata/lcm/actions/print_modes.rb +69 -0
- data/lib/gooddata/lcm/actions/print_types.rb +52 -0
- data/lib/gooddata/lcm/actions/provision_clients.rb +89 -0
- data/lib/gooddata/lcm/actions/purge_clients.rb +58 -0
- data/lib/gooddata/lcm/actions/rename_existing_client_projects.rb +70 -0
- data/lib/gooddata/lcm/actions/segments_filter.rb +50 -0
- data/lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb +64 -0
- data/lib/gooddata/lcm/actions/synchronize_cas.rb +72 -0
- data/lib/gooddata/lcm/actions/synchronize_clients.rb +94 -0
- data/lib/gooddata/lcm/actions/synchronize_color_palette.rb +67 -0
- data/lib/gooddata/lcm/actions/synchronize_etls_in_segment.rb +155 -0
- data/lib/gooddata/lcm/actions/synchronize_label_types.rb +64 -0
- data/lib/gooddata/lcm/actions/synchronize_ldm.rb +82 -0
- data/lib/gooddata/lcm/actions/synchronize_meta.rb +52 -0
- data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +61 -0
- data/lib/gooddata/lcm/actions/synchronize_processes.rb +66 -0
- data/lib/gooddata/lcm/actions/synchronize_schedules.rb +91 -0
- data/lib/gooddata/lcm/actions/synchronize_tag_objects.rb +64 -0
- data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +210 -0
- data/lib/gooddata/lcm/actions/synchronize_user_groups.rb +53 -0
- data/lib/gooddata/lcm/actions/synchronize_users.rb +336 -0
- data/lib/gooddata/lcm/actions/update_release_table.rb +77 -0
- data/lib/gooddata/lcm/data/create_lcm_release.sql.erb +6 -0
- data/lib/gooddata/lcm/data/insert_into_lcm_release.sql.erb +11 -0
- data/lib/gooddata/lcm/data/select_from_lcm_release.sql.erb +8 -0
- data/lib/gooddata/lcm/data/update_lcm_release.sql.erb +7 -0
- data/lib/gooddata/lcm/dsl/dsl.rb +50 -0
- data/lib/gooddata/lcm/dsl/params_dsl.rb +61 -0
- data/lib/gooddata/lcm/dsl/type_dsl.rb +62 -0
- data/lib/gooddata/lcm/helpers/check_helper.rb +41 -0
- data/lib/gooddata/lcm/helpers/helpers.rb +12 -0
- data/lib/gooddata/lcm/helpers/tags_helper.rb +36 -0
- data/lib/gooddata/lcm/lcm.rb +325 -0
- data/lib/gooddata/lcm/lcm2.rb +400 -0
- data/lib/gooddata/lcm/types/base_type.rb +29 -0
- data/lib/gooddata/lcm/types/class/ads_client.rb +35 -0
- data/lib/gooddata/lcm/types/class/class.rb +21 -0
- data/lib/gooddata/lcm/types/class/gd_client.rb +35 -0
- data/lib/gooddata/lcm/types/class/types.rb +12 -0
- data/lib/gooddata/lcm/types/complex/complex.rb +33 -0
- data/lib/gooddata/lcm/types/complex/release_query.rb +35 -0
- data/lib/gooddata/lcm/types/complex/segment.rb +40 -0
- data/lib/gooddata/lcm/types/complex/synchronization_info.rb +35 -0
- data/lib/gooddata/lcm/types/complex/tokens.rb +31 -0
- data/lib/gooddata/lcm/types/complex/types.rb +12 -0
- data/lib/gooddata/lcm/types/complex/update_preference.rb +38 -0
- data/lib/gooddata/lcm/types/complex/users_brick_config.rb +32 -0
- data/lib/gooddata/lcm/types/param.rb +16 -0
- data/lib/gooddata/lcm/types/scalar/bool.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/hash.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/integer.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/object.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/string.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/types.rb +12 -0
- data/lib/gooddata/lcm/types/special/array.rb +33 -0
- data/lib/gooddata/lcm/types/special/enum.rb +15 -0
- data/lib/gooddata/lcm/types/special/types.rb +12 -0
- data/lib/gooddata/lcm/types/types.rb +12 -0
- data/lib/gooddata/lcm/user_bricks_helper.rb +32 -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_folder.rb +11 -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 +79 -0
- data/lib/gooddata/mixins/md_grantees.rb +42 -0
- data/lib/gooddata/mixins/md_id_to_uri.rb +39 -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 +74 -0
- data/lib/gooddata/mixins/md_object_query.rb +134 -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/ads_output_stage.rb +85 -0
- data/lib/gooddata/models/automated_data_distribution.rb +36 -0
- data/lib/gooddata/models/blueprint/anchor_field.rb +65 -0
- data/lib/gooddata/models/blueprint/attribute_field.rb +45 -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 +455 -0
- data/lib/gooddata/models/blueprint/date_dimension.rb +20 -0
- data/lib/gooddata/models/blueprint/fact_field.rb +20 -0
- data/lib/gooddata/models/blueprint/label_field.rb +47 -0
- data/lib/gooddata/models/blueprint/project_blueprint.rb +791 -0
- data/lib/gooddata/models/blueprint/project_builder.rb +103 -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 +185 -0
- data/lib/gooddata/models/blueprint/to_wire.rb +173 -0
- data/lib/gooddata/models/channel_configuration.rb +112 -0
- data/lib/gooddata/models/client.rb +236 -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/data_product.rb +149 -0
- data/lib/gooddata/models/datawarehouse.rb +114 -0
- data/lib/gooddata/models/domain.rb +505 -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 +173 -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 +324 -0
- data/lib/gooddata/models/metadata/attribute.rb +155 -0
- data/lib/gooddata/models/metadata/dashboard.rb +120 -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 +67 -0
- data/lib/gooddata/models/metadata/dimension.rb +57 -0
- data/lib/gooddata/models/metadata/fact.rb +51 -0
- data/lib/gooddata/models/metadata/folder.rb +49 -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 +206 -0
- data/lib/gooddata/models/metadata/report.rb +268 -0
- data/lib/gooddata/models/metadata/report_definition.rb +272 -0
- data/lib/gooddata/models/metadata/scheduled_mail.rb +277 -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 +96 -0
- data/lib/gooddata/models/model.rb +293 -0
- data/lib/gooddata/models/models.rb +12 -0
- data/lib/gooddata/models/module_constants.rb +31 -0
- data/lib/gooddata/models/notification_rule.rb +113 -0
- data/lib/gooddata/models/process.rb +371 -0
- data/lib/gooddata/models/profile.rb +451 -0
- data/lib/gooddata/models/project.rb +2030 -0
- data/lib/gooddata/models/project_creator.rb +209 -0
- data/lib/gooddata/models/project_log_formatter.rb +204 -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 +270 -0
- data/lib/gooddata/models/schedule.rb +538 -0
- data/lib/gooddata/models/segment.rb +274 -0
- data/lib/gooddata/models/style_setting.rb +62 -0
- data/lib/gooddata/models/subscription.rb +188 -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 +101 -0
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +553 -0
- data/lib/gooddata/models/user_filters/user_filters.rb +13 -0
- data/lib/gooddata/models/user_filters/variable_user_filter.rb +33 -0
- data/lib/gooddata/models/user_group.rb +250 -0
- data/lib/gooddata/rest/README.md +37 -0
- data/lib/gooddata/rest/client.rb +396 -0
- data/lib/gooddata/rest/connection.rb +776 -0
- data/lib/gooddata/rest/object.rb +69 -0
- data/lib/gooddata/rest/object_factory.rb +51 -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/.rubocop.yml +16 -0
- data/spec/bricks/bricks_spec.rb +110 -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/attribute_sort_order_blueprint.json +72 -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 +39 -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/dynamic_schedule_params_table.csv +7 -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/attribute_sort_by_model.json +73 -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 +66 -0
- data/spec/data/wire_test_project.json +150 -0
- data/spec/data/workspace_table.csv +3 -0
- data/spec/environment/default.rb +43 -0
- data/spec/environment/development.rb +32 -0
- data/spec/environment/environment.rb +38 -0
- data/spec/environment/production.rb +27 -0
- data/spec/environment/staging.rb +33 -0
- data/spec/environment/testing.rb +32 -0
- data/spec/helpers/blueprint_helper.rb +27 -0
- data/spec/helpers/cli_helper.rb +38 -0
- data/spec/helpers/connection_helper.rb +43 -0
- data/spec/helpers/crypto_helper.rb +19 -0
- data/spec/helpers/csv_helper.rb +20 -0
- data/spec/helpers/process_helper.rb +35 -0
- data/spec/helpers/project_helper.rb +74 -0
- data/spec/helpers/schedule_helper.rb +33 -0
- data/spec/helpers/spec_helper.rb +17 -0
- data/spec/integration/ads_output_stage_spec.rb +45 -0
- data/spec/integration/blueprint_updates_spec.rb +107 -0
- data/spec/integration/blueprint_with_ca_spec.rb +56 -0
- data/spec/integration/blueprint_with_grain_spec.rb +74 -0
- data/spec/integration/channel_configuration_spec.rb +67 -0
- data/spec/integration/clients_spec.rb +164 -0
- data/spec/integration/command_datawarehouse_spec.rb +45 -0
- data/spec/integration/command_projects_spec.rb +32 -0
- data/spec/integration/commands/command_projects_spec.rb +22 -0
- data/spec/integration/core/connection_spec.rb +56 -0
- data/spec/integration/core/logging_spec.rb +130 -0
- data/spec/integration/core/project_spec.rb +54 -0
- data/spec/integration/create_from_template_spec.rb +29 -0
- data/spec/integration/create_project_spec.rb +27 -0
- data/spec/integration/date_dim_switch_spec.rb +150 -0
- data/spec/integration/deprecated_load_spec.rb +60 -0
- data/spec/integration/full_process_schedule_spec.rb +367 -0
- data/spec/integration/full_project_spec.rb +592 -0
- data/spec/integration/helpers_spec.rb +16 -0
- data/spec/integration/lcm_spec.rb +54 -0
- data/spec/integration/mixins/id_to_uri_spec.rb +44 -0
- data/spec/integration/models/data_product_spec.rb +71 -0
- data/spec/integration/models/domain_spec.rb +162 -0
- data/spec/integration/models/invitation_spec.rb +17 -0
- data/spec/integration/models/membership_spec.rb +127 -0
- data/spec/integration/models/metadata/report_spec.rb +54 -0
- data/spec/integration/models/params_spec.rb +118 -0
- data/spec/integration/models/profile_spec.rb +210 -0
- data/spec/integration/models/project_role_spec.rb +94 -0
- data/spec/integration/models/project_spec.rb +225 -0
- data/spec/integration/models/schedule_spec.rb +485 -0
- data/spec/integration/models/unit_project_spec.rb +130 -0
- data/spec/integration/over_to_user_filters_spec.rb +98 -0
- data/spec/integration/partial_md_export_import_spec.rb +41 -0
- data/spec/integration/project_spec.rb +381 -0
- data/spec/integration/rest_spec.rb +214 -0
- data/spec/integration/schedule_spec.rb +613 -0
- data/spec/integration/segments_spec.rb +100 -0
- data/spec/integration/subscription_spec.rb +88 -0
- data/spec/integration/urn_date_dim_spec.rb +53 -0
- data/spec/integration/user_filters_spec.rb +306 -0
- data/spec/integration/user_group_spec.rb +147 -0
- data/spec/integration/variables_spec.rb +189 -0
- data/spec/logging_in_logging_out_spec.rb +91 -0
- data/spec/spec_helper.rb +66 -0
- data/spec/unit/actions/associate_clients_spec.rb +47 -0
- data/spec/unit/actions/collect_client_projects_spec.rb +47 -0
- data/spec/unit/actions/collect_clients_spec.rb +65 -0
- data/spec/unit/actions/collect_data_product_spec.rb +56 -0
- data/spec/unit/actions/collect_dynamic_schedule_params_spec.rb +56 -0
- data/spec/unit/actions/collect_meta_spec.rb +88 -0
- data/spec/unit/actions/collect_segment_clients_spec.rb +81 -0
- data/spec/unit/actions/collect_tagged_objects_spec.rb +126 -0
- data/spec/unit/actions/collect_users_brick_users_spec.rb +36 -0
- data/spec/unit/actions/create_segment_masters_spec.rb +64 -0
- data/spec/unit/actions/ensure_data_product_spec.rb +38 -0
- data/spec/unit/actions/ensure_technical_users_domain_spec.rb +51 -0
- data/spec/unit/actions/ensure_technical_users_project_spec.rb +72 -0
- data/spec/unit/actions/execute_schedules_spec.rb +94 -0
- data/spec/unit/actions/provision_clients_spec.rb +45 -0
- data/spec/unit/actions/purge_clients_spec.rb +47 -0
- data/spec/unit/actions/rename_existing_client_projects_spec.rb +54 -0
- data/spec/unit/actions/segments_filter_spec.rb +46 -0
- data/spec/unit/actions/shared_examples_for_user_actions.rb +26 -0
- data/spec/unit/actions/synchronize_cas_spec.rb +58 -0
- data/spec/unit/actions/synchronize_etls_in_segment_spec.rb +212 -0
- data/spec/unit/actions/synchronize_ldm_spec.rb +57 -0
- data/spec/unit/actions/synchronize_user_filters_spec.rb +146 -0
- data/spec/unit/actions/synchronize_user_groups_spec.rb +49 -0
- data/spec/unit/actions/synchronize_users_spec.rb +134 -0
- data/spec/unit/bricks/bricks_spec.rb +34 -0
- data/spec/unit/bricks/middleware/aws_middelware_spec.rb +98 -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 +30 -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/core/nil_logger_spec.rb +13 -0
- data/spec/unit/extensions/hash_spec.rb +22 -0
- data/spec/unit/godzilla/goodzilla_spec.rb +74 -0
- data/spec/unit/helpers/csv_helper_spec.rb +22 -0
- data/spec/unit/helpers/data_helper_spec.rb +67 -0
- data/spec/unit/helpers/global_helpers_spec.rb +264 -0
- data/spec/unit/helpers_spec.rb +254 -0
- data/spec/unit/lcm/user_bricks_helper_spec.rb +58 -0
- data/spec/unit/models/blueprint/attribute_sort_by_spec.rb +20 -0
- data/spec/unit/models/blueprint/attributes_spec.rb +28 -0
- data/spec/unit/models/blueprint/dataset_spec.rb +120 -0
- data/spec/unit/models/blueprint/labels_spec.rb +43 -0
- data/spec/unit/models/blueprint/project_blueprint_spec.rb +642 -0
- data/spec/unit/models/blueprint/reference_spec.rb +28 -0
- data/spec/unit/models/blueprint/schema_builder_spec.rb +36 -0
- data/spec/unit/models/blueprint/to_wire_spec.rb +195 -0
- data/spec/unit/models/execution_spec.rb +109 -0
- data/spec/unit/models/from_wire_spec.rb +301 -0
- data/spec/unit/models/metadata_spec.rb +140 -0
- data/spec/unit/models/metric_spec.rb +129 -0
- data/spec/unit/models/model_spec.rb +77 -0
- data/spec/unit/models/project_creator_spec.rb +90 -0
- data/spec/unit/models/project_spec.rb +94 -0
- data/spec/unit/models/report_result_data_spec.rb +194 -0
- data/spec/unit/models/to_manifest_spec.rb +136 -0
- data/spec/unit/models/user_filters/user_filter_builder_spec.rb +110 -0
- data/spec/unit/models/user_filters_spec.rb +95 -0
- data/spec/unit/models/variable_spec.rb +280 -0
- data/spec/unit/rest/polling_spec.rb +101 -0
- data/spec/unit/rest/resource_spec.rb +10 -0
- data/yard-server.sh +3 -0
- metadata +1207 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 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
|
+
module GoodData
|
|
10
|
+
class Dataset < MdObject
|
|
11
|
+
class << self
|
|
12
|
+
# Method intended to get all objects of that type in a specified project
|
|
13
|
+
#
|
|
14
|
+
# @param options [Hash] the options hash
|
|
15
|
+
# @option options [Boolean] :full if passed true the subclass can decide
|
|
16
|
+
# to pull in full objects. This is desirable from the usability POV
|
|
17
|
+
# but unfortunately has negative impact on performance so it is
|
|
18
|
+
# not the default.
|
|
19
|
+
# @return [Array<GoodData::MdObject> | Array<Hash>] Return the appropriate metadata objects or their representation
|
|
20
|
+
def all(options = { :client => GoodData.connection, :project => GoodData.project })
|
|
21
|
+
query('dataSet', Dataset, options)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Gives you list of attributes on a dataset
|
|
26
|
+
#
|
|
27
|
+
# @return [Array<GoodData::Attribute>]
|
|
28
|
+
def attributes
|
|
29
|
+
attribute_uris.pmap { |a_uri| project.attributes(a_uri) }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Gives you list of attribute uris on a dataset
|
|
33
|
+
#
|
|
34
|
+
# @return [Array<String>]
|
|
35
|
+
def attribute_uris
|
|
36
|
+
content['attributes']
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Gives you list of facts on a dataset
|
|
40
|
+
#
|
|
41
|
+
# @return [Array<GoodData::Fact>]
|
|
42
|
+
def facts
|
|
43
|
+
fact_uris.pmap { |a_uri| project.facts(a_uri) }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Gives you list of fact uris on a dataset
|
|
47
|
+
#
|
|
48
|
+
# @return [Array<String>]
|
|
49
|
+
def fact_uris
|
|
50
|
+
content['facts']
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Tells you if a dataset is a date dimension. This is done by looking at
|
|
54
|
+
# the attributes and inspecting their identifiers.
|
|
55
|
+
#
|
|
56
|
+
# @return [Boolean]
|
|
57
|
+
def date_dimension?
|
|
58
|
+
content['urn'] && !content['urn'].empty? && fact_uris.empty?
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Delete the data in a dataset
|
|
62
|
+
def synchronize
|
|
63
|
+
project.execute_maql("SYNCHRONIZE {#{identifier}}")
|
|
64
|
+
end
|
|
65
|
+
alias_method :delete_data, :synchronize
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 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
|
+
require_relative '../../mixins/is_dimension'
|
|
9
|
+
require_relative 'metadata'
|
|
10
|
+
|
|
11
|
+
module GoodData
|
|
12
|
+
class Dimension < GoodData::MdObject
|
|
13
|
+
include Mixin::IsDimension
|
|
14
|
+
|
|
15
|
+
class << self
|
|
16
|
+
# Method intended to get all objects of that type in a specified project
|
|
17
|
+
#
|
|
18
|
+
# @param options [Hash] the options hash
|
|
19
|
+
# @option options [Boolean] :full if passed true the subclass can
|
|
20
|
+
# decide to pull in full objects. This is desirable from the usability
|
|
21
|
+
# POV but unfortunately has negative impact on performance so it is
|
|
22
|
+
# not the default.
|
|
23
|
+
# @return [Array<GoodData::MdObject> | Array<Hash>] Return the appropriate metadata objects or their representation
|
|
24
|
+
def all(options = { :client => GoodData.connection, :project => GoodData.project })
|
|
25
|
+
query('dimension', Dimension, options)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Returns a Project object identified by given string
|
|
29
|
+
# The following identifiers are accepted
|
|
30
|
+
# - /gdc/md/<id>
|
|
31
|
+
# - /gdc/projects/<id>
|
|
32
|
+
# - <id>
|
|
33
|
+
#
|
|
34
|
+
def [](id, opts = { client: GoodData.connection })
|
|
35
|
+
return id if id.instance_of?(GoodData::Dimension) || id.respond_to?(:dimension?) && id.dimension?
|
|
36
|
+
|
|
37
|
+
if id == :all
|
|
38
|
+
Dimension.all({ client: GoodData.connection }.merge(opts))
|
|
39
|
+
else
|
|
40
|
+
uri = id
|
|
41
|
+
|
|
42
|
+
c = client(opts)
|
|
43
|
+
fail ArgumentError, 'No :client specified' if c.nil?
|
|
44
|
+
|
|
45
|
+
response = c.get(uri)
|
|
46
|
+
c.factory.create(Dimension, response)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def attributes
|
|
52
|
+
content['attributes'].map do |attribute|
|
|
53
|
+
client.create(Attribute, { 'attribute' => attribute }, project: project)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 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
|
+
require_relative '../../core/rest'
|
|
9
|
+
require_relative '../../mixins/is_fact'
|
|
10
|
+
|
|
11
|
+
require_relative 'metadata'
|
|
12
|
+
|
|
13
|
+
module GoodData
|
|
14
|
+
class Fact < GoodData::MdObject
|
|
15
|
+
include Mixin::IsFact
|
|
16
|
+
|
|
17
|
+
# TODO: verify that we have all (which we do not right now)
|
|
18
|
+
FACT_BASE_AGGREGATIONS = [:sum, :min, :max, :avg, :median, :runsum, :runmin, :runmax, :runavg, :runstdev, :runstdevp, :runvar, :runvarp, :stdev, :stdevp, :var, :varp]
|
|
19
|
+
|
|
20
|
+
class << self
|
|
21
|
+
# Method intended to get all objects of that type in a specified project
|
|
22
|
+
#
|
|
23
|
+
# @param options [Hash] the options hash
|
|
24
|
+
# @option options [Boolean] :full if passed true the subclass can decide
|
|
25
|
+
# to pull in full objects. This is desirable from the usability POV
|
|
26
|
+
# but unfortunately has negative impact on performance so it is
|
|
27
|
+
# not the default.
|
|
28
|
+
# @return [Array<GoodData::MdObject> | Array<Hash>] Return the appropriate metadata objects or their representation
|
|
29
|
+
def all(options = { :client => GoodData.connection, :project => GoodData.project })
|
|
30
|
+
query('fact', Fact, options)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Creates the basic count metric with the fact used. The metric created is not saved.
|
|
35
|
+
# @param [Hash] options the options to pass to the value list
|
|
36
|
+
# @option options [Symbol] :type type of aggregation function. Default is :sum
|
|
37
|
+
# @return [GoodData::Metric]
|
|
38
|
+
def create_metric(options = { :type => :sum })
|
|
39
|
+
a_type = options[:type] || :sum
|
|
40
|
+
unless FACT_BASE_AGGREGATIONS.include?(a_type)
|
|
41
|
+
fail "Suggested aggreagtion function (#{a_type}) does not exist for " /
|
|
42
|
+
'base metric created out of fact. You can use only one of ' /
|
|
43
|
+
"#{FACT_BASE_AGGREGATIONS.map { |x| ':' + x.to_s }.join(',')}"
|
|
44
|
+
end
|
|
45
|
+
a_title = options[:title] || "#{a_type} of #{title}"
|
|
46
|
+
project.create_metric("SELECT #{a_type.to_s.upcase}([#{uri}])", title: a_title, extended_notation: false)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
alias_method :create_measure, :create_metric
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 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
|
+
require_relative '../../core/rest'
|
|
9
|
+
require_relative '../../mixins/is_folder'
|
|
10
|
+
|
|
11
|
+
require_relative 'metadata'
|
|
12
|
+
|
|
13
|
+
module GoodData
|
|
14
|
+
class Folder < GoodData::MdObject
|
|
15
|
+
include Mixin::IsFolder
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
# Method intended to get all objects of that type in a specified project
|
|
19
|
+
#
|
|
20
|
+
# @param options [Hash] the options hash
|
|
21
|
+
# @option options [Boolean] :full if passed true the subclass can decide
|
|
22
|
+
# to pull in full objects. This is desirable from the usability POV
|
|
23
|
+
# but unfortunately has negative impact on performance so it is not
|
|
24
|
+
# the default.
|
|
25
|
+
# @return [Array<GoodData::MdObject> | Array<Hash>] Return the appropriate metadata objects or their representation
|
|
26
|
+
def all(options = { :client => GoodData.connection, :project => GoodData.project })
|
|
27
|
+
query('folder', Folder, options)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def entries
|
|
32
|
+
(json['folder']['content']['entries'] || []).pmap do |entry|
|
|
33
|
+
res = case json['folder']['content']['type'].first
|
|
34
|
+
when 'fact'
|
|
35
|
+
GoodData::Fact[entry['link'], :client => client, :project => project]
|
|
36
|
+
when 'metric'
|
|
37
|
+
GoodData::Metric[entry['link'], :client => client, :project => project]
|
|
38
|
+
else
|
|
39
|
+
GoodData::MdObject[entry['link'], :client => client, :project => project]
|
|
40
|
+
end
|
|
41
|
+
res
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def type
|
|
46
|
+
json['folder']['content']['type'][0]
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 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
|
+
require_relative '../../mixins/is_label'
|
|
9
|
+
require_relative 'metadata'
|
|
10
|
+
|
|
11
|
+
module GoodData
|
|
12
|
+
class Label < GoodData::MdObject
|
|
13
|
+
include Mixin::IsLabel
|
|
14
|
+
|
|
15
|
+
# Finds an attribute element URI for given value. This URI can be used by find_element_value to find the original value again
|
|
16
|
+
# @param [String] value value of an label you are looking for
|
|
17
|
+
# @return [String]
|
|
18
|
+
def find_value_uri(value)
|
|
19
|
+
results = get_valid_elements(filter: value)
|
|
20
|
+
items = results['validElements']['items']
|
|
21
|
+
if items.empty?
|
|
22
|
+
fail(AttributeElementNotFound, value)
|
|
23
|
+
else
|
|
24
|
+
items.first['element']['uri']
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# For an element id find values (titles) for this label. Element id can be given as both number id or URI as a string beginning with /
|
|
29
|
+
# @param [Object] element_id Element identifier either Number or a uri as a String
|
|
30
|
+
# @return [String] value of the element if found
|
|
31
|
+
def find_element_value(element_id)
|
|
32
|
+
element_id = element_id.is_a?(String) ? element_id.match(/\?id=(\d+)/)[1] : element_id
|
|
33
|
+
uri = links['elements']
|
|
34
|
+
result = client.get(uri + "/?id=#{element_id}")
|
|
35
|
+
items = result['attributeElements']['elements']
|
|
36
|
+
if items.empty?
|
|
37
|
+
fail(AttributeElementNotFound, element_id)
|
|
38
|
+
else
|
|
39
|
+
items.first['title']
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Gets valid elements using /validElements? API
|
|
44
|
+
# @return [Array] Results
|
|
45
|
+
def get_valid_elements(url_or_params = {}, request_payload = {})
|
|
46
|
+
final_url = url_or_params
|
|
47
|
+
|
|
48
|
+
if url_or_params.is_a?(Hash)
|
|
49
|
+
default_params = {
|
|
50
|
+
limit: 1,
|
|
51
|
+
offset: 0,
|
|
52
|
+
order: 'asc'
|
|
53
|
+
}
|
|
54
|
+
params = default_params.merge(url_or_params).map { |x, v| "#{x}=#{CGI.escape(v.to_s)}" }.reduce { |acc, elem| "#{acc}&#{elem}" }
|
|
55
|
+
final_url = "#{uri}/validElements?#{params}"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
results = client.post(final_url, 'validElementsRequest' => request_payload)
|
|
59
|
+
|
|
60
|
+
# Implementation of polling is based on
|
|
61
|
+
# https://opengrok.intgdc.com/source/xref/gdc-backend/src/test/java/com/gooddata/service/dao/ValidElementsDaoTest.java
|
|
62
|
+
status_url = results['uri']
|
|
63
|
+
if status_url
|
|
64
|
+
results = client.poll_on_response(status_url) do |body|
|
|
65
|
+
status = body['taskState'] && body['taskState']['status']
|
|
66
|
+
status == 'RUNNING' || status == 'PREPARED'
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
results
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Finds if a label has an attribute element for given value.
|
|
74
|
+
# @param [String] value value of an label you are looking for
|
|
75
|
+
# @return [Boolean]
|
|
76
|
+
def value?(value)
|
|
77
|
+
find_value_uri(value)
|
|
78
|
+
true
|
|
79
|
+
rescue AttributeElementNotFound
|
|
80
|
+
false
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Returns all values for this label. This is for inspection purposes only since obviously there can be huge number of elements.
|
|
84
|
+
# @param [Hash] options the options to pass to the value list
|
|
85
|
+
# @option options [Number] :limit limits the number of values to certain number. Default is 100
|
|
86
|
+
# @return [Array]
|
|
87
|
+
def values(options = {})
|
|
88
|
+
Enumerator.new do |y|
|
|
89
|
+
offset = options[:offset] || 0
|
|
90
|
+
page_limit = options[:limit] || 100
|
|
91
|
+
loop do
|
|
92
|
+
results = get_valid_elements(limit: page_limit, offset: offset)
|
|
93
|
+
|
|
94
|
+
elements = results['validElements']
|
|
95
|
+
elements['items'].map do |el|
|
|
96
|
+
v = el['element']
|
|
97
|
+
y << {
|
|
98
|
+
:value => v['title'],
|
|
99
|
+
:uri => v['uri']
|
|
100
|
+
}
|
|
101
|
+
end
|
|
102
|
+
break if elements['items'].count < page_limit
|
|
103
|
+
offset += page_limit
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def values_count
|
|
109
|
+
results = get_valid_elements
|
|
110
|
+
count = GoodData::Helpers.get_path(results, %w(validElements paging total))
|
|
111
|
+
count && count.to_i
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Gives an attribute of current label
|
|
115
|
+
# @return [GoodData::Attibute]
|
|
116
|
+
def attribute
|
|
117
|
+
project.attributes(content['formOf'])
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Gives an attribute url of current label. Useful for mass actions when it does not introduce HTTP call.
|
|
121
|
+
# @return [GoodData::Attibute]
|
|
122
|
+
def attribute_uri
|
|
123
|
+
content['formOf']
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
GoodData::DisplayForm = GoodData::Label
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 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 'pathname'
|
|
8
|
+
|
|
9
|
+
base = Pathname(__FILE__).dirname.expand_path
|
|
10
|
+
Dir.glob(base + '*.rb').each do |file|
|
|
11
|
+
require file
|
|
12
|
+
end
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 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 '../../goodzilla/goodzilla'
|
|
8
|
+
require_relative '../../mixins/mixins'
|
|
9
|
+
require_relative '../metadata'
|
|
10
|
+
require_relative 'metadata'
|
|
11
|
+
|
|
12
|
+
module GoodData
|
|
13
|
+
# Metric representation
|
|
14
|
+
class Metric < MdObject
|
|
15
|
+
include Mixin::Lockable
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
# Method intended to get all objects of that type in a specified project
|
|
19
|
+
#
|
|
20
|
+
# @param options [Hash] the options hash
|
|
21
|
+
# @option options [Boolean] :full if passed true the subclass can decide
|
|
22
|
+
# to pull in full objects. This is desirable from the usability POV
|
|
23
|
+
# but unfortunately has negative impact on performance so it is not
|
|
24
|
+
# the default.
|
|
25
|
+
# @return [Array<GoodData::MdObject> | Array<Hash>] Return the appropriate metadata objects or their representation
|
|
26
|
+
def all(options = { :client => GoodData.connection, :project => GoodData.project })
|
|
27
|
+
query('metric', Metric, options)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def xcreate(metric, options = { :client => GoodData.connection, :project => GoodData.project })
|
|
31
|
+
create(metric, { extended_notation: true }.merge(options))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def create(metric, options = { :client => GoodData.connection, :project => GoodData.project })
|
|
35
|
+
client, project = GoodData.get_client_and_project(options)
|
|
36
|
+
|
|
37
|
+
if metric.is_a?(String)
|
|
38
|
+
expression = metric || options[:expression]
|
|
39
|
+
extended_notation = options[:extended_notation] || false
|
|
40
|
+
title = options[:title]
|
|
41
|
+
summary = options[:summary]
|
|
42
|
+
else
|
|
43
|
+
metric ||= options
|
|
44
|
+
title = metric[:title] || options[:title]
|
|
45
|
+
summary = metric[:summary] || options[:summary]
|
|
46
|
+
expression = metric[:expression] || options[:expression] || fail('Metric has to have its expression defined')
|
|
47
|
+
extended_notation = metric[:extended_notation] || options[:extended_notation] || false
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
expression = if extended_notation
|
|
51
|
+
dict = {
|
|
52
|
+
:facts => project.facts.reduce({}) do |memo, item|
|
|
53
|
+
memo[item.title] = item.uri
|
|
54
|
+
memo
|
|
55
|
+
end,
|
|
56
|
+
:attributes => project.attributes.reduce({}) do |memo, item|
|
|
57
|
+
memo[item.title] = item.uri
|
|
58
|
+
memo
|
|
59
|
+
end,
|
|
60
|
+
:metrics => project.metrics.reduce({}) do |memo, item|
|
|
61
|
+
memo[item.title] = item.uri
|
|
62
|
+
memo
|
|
63
|
+
end
|
|
64
|
+
}
|
|
65
|
+
interpolated_metric = GoodData::SmallGoodZilla.interpolate_metric(expression, dict, options)
|
|
66
|
+
interpolated_metric
|
|
67
|
+
else
|
|
68
|
+
expression
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
metric = {
|
|
72
|
+
'metric' => {
|
|
73
|
+
'content' => {
|
|
74
|
+
'format' => '#,##0',
|
|
75
|
+
'expression' => expression
|
|
76
|
+
},
|
|
77
|
+
'meta' => {
|
|
78
|
+
'tags' => '',
|
|
79
|
+
'summary' => summary,
|
|
80
|
+
'title' => title
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
# TODO: add test for explicitly provided identifier
|
|
85
|
+
metric['metric']['meta']['identifier'] = options[:identifier] if options[:identifier]
|
|
86
|
+
|
|
87
|
+
client.create(Metric, metric, :project => project)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def execute(expression, options = { :client => GoodData.connection })
|
|
91
|
+
# client = options[:client]
|
|
92
|
+
# fail ArgumentError, 'No :client specified' if client.nil?
|
|
93
|
+
|
|
94
|
+
options = expression if expression.is_a?(Hash)
|
|
95
|
+
|
|
96
|
+
m = if expression.is_a?(String)
|
|
97
|
+
tmp = {
|
|
98
|
+
:title => 'Temporary metric to be deleted',
|
|
99
|
+
:expression => expression
|
|
100
|
+
}.merge(options)
|
|
101
|
+
|
|
102
|
+
GoodData::Metric.create(tmp, options)
|
|
103
|
+
else
|
|
104
|
+
tmp = {
|
|
105
|
+
:title => 'Temporary metric to be deleted'
|
|
106
|
+
}.merge(expression)
|
|
107
|
+
GoodData::Metric.create(tmp, options)
|
|
108
|
+
end
|
|
109
|
+
m.execute
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def xexecute(expression, opts = { :client => GoodData.connection, :project => GoodData.project })
|
|
113
|
+
GoodData.get_client_and_project(opts)
|
|
114
|
+
|
|
115
|
+
execute(expression, opts.merge(:extended_notation => true))
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def execute
|
|
120
|
+
opts = {
|
|
121
|
+
:client => client,
|
|
122
|
+
:project => project
|
|
123
|
+
}
|
|
124
|
+
res = GoodData::ReportDefinition.execute(opts.merge(:left => self))
|
|
125
|
+
res.data[0][0] if res && !res.empty?
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def expression
|
|
129
|
+
content['expression']
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def expression=(value)
|
|
133
|
+
content['expression'] = value
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def validate
|
|
137
|
+
fail 'Metric needs to have title' if title.nil?
|
|
138
|
+
true
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def metric?
|
|
142
|
+
true
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Checks that the expression contains certain metadata object.
|
|
146
|
+
# The difference between this and used_by using is in the fact that this
|
|
147
|
+
# is not a transitive closure. it searches only inside the expression
|
|
148
|
+
#
|
|
149
|
+
# @param [GoodData::MdObject] item Object that is going to be looked up
|
|
150
|
+
# @return [Boolean]
|
|
151
|
+
def contain?(item)
|
|
152
|
+
uri = item.respond_to?(:uri) ? item.uri : item
|
|
153
|
+
expression[uri] != nil
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Checks that the expression contains certain element of an attribute. The value is looked up through given label.
|
|
157
|
+
# @param [GoodData::Label] label Label though which the value is looked up
|
|
158
|
+
# @param [String] value Value that will be looked up through the label.
|
|
159
|
+
# @return [Boolean]
|
|
160
|
+
def contain_value?(label, value)
|
|
161
|
+
uri = label.find_value_uri(value)
|
|
162
|
+
contain?(uri)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Method used for replacing values in their state according to mapping.
|
|
166
|
+
# Can be used to replace any values but it is typically used to replace
|
|
167
|
+
# the URIs. Returns a new object of the same type.
|
|
168
|
+
#
|
|
169
|
+
# @param [Array<Array>]Mapping specifying what should be exchanged for what. As mapping should be used output of GoodData::Helpers.prepare_mapping.
|
|
170
|
+
# @return [GoodData::Metric]
|
|
171
|
+
def replace(mapping)
|
|
172
|
+
x = GoodData::MdObject.replace_quoted(self, mapping)
|
|
173
|
+
x = GoodData::MdObject.replace_bracketed(x, mapping)
|
|
174
|
+
vals = GoodData::MdObject.find_replaceable_values(x, mapping)
|
|
175
|
+
GoodData::MdObject.replace_bracketed(x, vals)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Method used for replacing attribute element values. Looks up certain value of a label in the MAQL expression and exchanges it for a different value of the same label.
|
|
179
|
+
# @param [GoodData::Label] label Label through which the value and for_value are resolved
|
|
180
|
+
# @param [String] value value that is going to be replaced
|
|
181
|
+
# @param [String] for_value value that is going to be the new one
|
|
182
|
+
# @return [GoodData::Metric]
|
|
183
|
+
def replace_value(label, value, for_label, for_value = nil)
|
|
184
|
+
label = label.respond_to?(:primary_label) ? label.primary_label : label
|
|
185
|
+
if for_value
|
|
186
|
+
for_label = for_label.respond_to?(:primary_label) ? for_label.primary_label : for_label
|
|
187
|
+
value_uri = label.find_value_uri(value)
|
|
188
|
+
for_value_uri = for_label.find_value_uri(for_value)
|
|
189
|
+
self.expression = expression.gsub(value_uri, for_value_uri)
|
|
190
|
+
self.expression = expression.gsub(label.attribute.uri, for_label.attribute.uri)
|
|
191
|
+
else
|
|
192
|
+
for_value = for_label
|
|
193
|
+
value_uri = label.find_value_uri(value)
|
|
194
|
+
for_value_uri = label.find_value_uri(for_value)
|
|
195
|
+
self.expression = expression.gsub(value_uri, for_value_uri)
|
|
196
|
+
end
|
|
197
|
+
self
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# Looks up the readable values of the objects used inside of MAQL epxpressions. Labels and elements titles are based on the primary label.
|
|
201
|
+
# @return [String] Ther resulting MAQL like expression
|
|
202
|
+
def pretty_expression
|
|
203
|
+
SmallGoodZilla.pretty_print(expression, client: client, project: project)
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|