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,15 @@
|
|
|
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
|
+
module GoodData
|
|
8
|
+
module Mixin
|
|
9
|
+
module Links
|
|
10
|
+
def links
|
|
11
|
+
data['links']
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
module GoodData
|
|
8
|
+
module Mixin
|
|
9
|
+
module MdFinders
|
|
10
|
+
# Finds a specific type of the object by identifier. Returns first match. Returns full object.
|
|
11
|
+
#
|
|
12
|
+
# @param title [String] identifier that has to match exactly
|
|
13
|
+
# @param title [Regexp] regular expression that has to match
|
|
14
|
+
# @return [Array<GoodData::MdObject>] Array of MdObject
|
|
15
|
+
def find_first_by_identifier(identifier, options = { :client => GoodData.connection, :project => GoodData.project })
|
|
16
|
+
all = self[:all, options.merge(full: false)]
|
|
17
|
+
item = if identifier.is_a?(Regexp)
|
|
18
|
+
all.find { |r| r.identifier =~ identifier }
|
|
19
|
+
else
|
|
20
|
+
all.find { |r| r.identifier == identifier }
|
|
21
|
+
end
|
|
22
|
+
self[item.uri, options] unless item.nil?
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Finds a specific type of the object by identifier. Returns all matches. Returns full object.
|
|
26
|
+
#
|
|
27
|
+
# @param title [String] identifier that has to match exactly
|
|
28
|
+
# @param title [Regexp] regular expression that has to match
|
|
29
|
+
# @return [Array<GoodData::MdObject>] Array of MdObject
|
|
30
|
+
def find_by_identifier(identifier, options = { :client => GoodData.connection, :project => GoodData.project })
|
|
31
|
+
all = self[:all, options]
|
|
32
|
+
items = if identifier.is_a?(Regexp)
|
|
33
|
+
all.select { |r| r.title =~ identifier }
|
|
34
|
+
else
|
|
35
|
+
all.select { |r| r.title == identifier }
|
|
36
|
+
end
|
|
37
|
+
items.pmap { |item| self[item.uri, options] unless item.nil? }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def find_by_tag(tags, opts = { :client => GoodData.connection, :project => GoodData.project })
|
|
41
|
+
client, project = GoodData.get_client_and_project(opts)
|
|
42
|
+
tags = tags.split(',').map(&:strip) unless tags.is_a?(Array)
|
|
43
|
+
|
|
44
|
+
self[:all, client: client, project: project]
|
|
45
|
+
.select { |r| (r.tag_set & tags).any? }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Finds a specific type of the object by title. Returns first match. Returns full object.
|
|
49
|
+
#
|
|
50
|
+
# @param title [String] title that has to match exactly
|
|
51
|
+
# @param title [Regexp] regular expression that has to match
|
|
52
|
+
# @return [Array<GoodData::MdObject>] Array of MdObject
|
|
53
|
+
def find_first_by_title(title, options = { :client => GoodData.connection, :project => GoodData.project })
|
|
54
|
+
all = self[:all, options]
|
|
55
|
+
item = if title.is_a?(Regexp)
|
|
56
|
+
all.find { |r| r.title =~ title }
|
|
57
|
+
else
|
|
58
|
+
all.find { |r| r.title == title }
|
|
59
|
+
end
|
|
60
|
+
self[item.uri, options] unless item.nil?
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Finds a specific type of the object by title. Returns all matches. Returns full object.
|
|
64
|
+
#
|
|
65
|
+
# @param title [String] title that has to match exactly
|
|
66
|
+
# @param title [Regexp] regular expression that has to match
|
|
67
|
+
# @return [Array<GoodData::MdObject>] Array of MdObject
|
|
68
|
+
def find_by_title(title, options = { :client => GoodData.connection, :project => GoodData.project })
|
|
69
|
+
all = self[:all, options]
|
|
70
|
+
items = if title.is_a?(Regexp)
|
|
71
|
+
all.select { |r| r.title =~ title }
|
|
72
|
+
else
|
|
73
|
+
all.select { |r| r.title == title }
|
|
74
|
+
end
|
|
75
|
+
items.pmap { |item| self[item.uri, options] unless item.nil? }
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
module GoodData
|
|
8
|
+
module Mixin
|
|
9
|
+
module MdGrantees
|
|
10
|
+
def grantees(opts = {})
|
|
11
|
+
permission = opts[:permission]
|
|
12
|
+
params = permission ? { permission: permission } : {}
|
|
13
|
+
client.get(uri + '/grantees', params: params)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def grant(opts = {})
|
|
17
|
+
change_permission(opts.merge(operation: :add))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def revoke(opts = {})
|
|
21
|
+
change_permission(opts.merge(operation: :remove))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def change_permission(opts)
|
|
25
|
+
permission = opts[:permission]
|
|
26
|
+
member = opts[:member]
|
|
27
|
+
op = opts[:operation]
|
|
28
|
+
klasses = [GoodData::Profile, GoodData::UserGroup, GoodData::Membership]
|
|
29
|
+
fail "Permission has to be set. Current value '#{permission}'" unless permission
|
|
30
|
+
fail 'Member has to be either user or group' unless klasses.any? { |c| member.is_a?(c) }
|
|
31
|
+
payload = {
|
|
32
|
+
granteeURIs: {
|
|
33
|
+
items: [
|
|
34
|
+
{ aclEntryURI: { permission: permission, grantee: member.uri } }
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
client.post(uri + '/grantees/' + op.to_s, payload)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
module GoodData
|
|
8
|
+
module Mixin
|
|
9
|
+
module MdIdToUri
|
|
10
|
+
IDENTIFIERS_CFG = 'instance-identifiers'
|
|
11
|
+
|
|
12
|
+
def identifier_to_uri(opts = { :client => GoodData.connection, :project => GoodData.project }, *ids)
|
|
13
|
+
client, project = GoodData.get_client_and_project(opts)
|
|
14
|
+
|
|
15
|
+
response = nil
|
|
16
|
+
begin
|
|
17
|
+
uri = project.md[IDENTIFIERS_CFG]
|
|
18
|
+
response = client.post(uri, 'identifierToUri' => ids)
|
|
19
|
+
rescue => ex
|
|
20
|
+
raise ex
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
if response['identifiers'].empty?
|
|
24
|
+
nil
|
|
25
|
+
else
|
|
26
|
+
identifiers = response['identifiers']
|
|
27
|
+
ids_lookup = identifiers.reduce({}) do |a, e|
|
|
28
|
+
a[e['identifier']] = e['uri']
|
|
29
|
+
a
|
|
30
|
+
end
|
|
31
|
+
uris = ids.map { |x| ids_lookup[x] }
|
|
32
|
+
uris.count == 1 ? uris.first : uris
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
alias_method :id_to_uri, :identifier_to_uri
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
module GoodData
|
|
8
|
+
module Mixin
|
|
9
|
+
module MdJson
|
|
10
|
+
def to_json(*args)
|
|
11
|
+
json.to_json(*args)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
module GoodData
|
|
8
|
+
module Mixin
|
|
9
|
+
module Lockable
|
|
10
|
+
# Locks an object. Locked object cannot be changed by certain users.
|
|
11
|
+
#
|
|
12
|
+
# @return [GoodData::Mixin::Lockable]
|
|
13
|
+
def lock
|
|
14
|
+
meta['locked'] = 1
|
|
15
|
+
self
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Sames as #lock. Locks an object and immediately saves it.
|
|
19
|
+
#
|
|
20
|
+
# @return [GoodData::Mixin::Lockable]
|
|
21
|
+
def lock!
|
|
22
|
+
lock
|
|
23
|
+
save
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Unlocks an object.
|
|
27
|
+
#
|
|
28
|
+
# @return [GoodData::Mixin::Lockable]
|
|
29
|
+
def unlock
|
|
30
|
+
meta.delete('locked')
|
|
31
|
+
self
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Same as #unlock. Unlocks an object and immediately saves it
|
|
35
|
+
#
|
|
36
|
+
# @return [GoodData::Mixin::Lockable]
|
|
37
|
+
def unlock!
|
|
38
|
+
unlock
|
|
39
|
+
save
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Locks an object with all used objects. The types of objects that are affected by locks
|
|
43
|
+
# are dashboards, reports and metrics. This means that if you lock a dashboard by this method
|
|
44
|
+
# all used reports and metrics are also locked. If you lock a report all used metrics are also
|
|
45
|
+
# locked. The current object is reloaded. This means that the #locked? will return true.
|
|
46
|
+
#
|
|
47
|
+
# @return [GoodData::Mixin::Lockable]
|
|
48
|
+
def lock_with_dependencies!
|
|
49
|
+
client.post("/gdc/internal/projects/#{project.pid}/objects/setPermissions",
|
|
50
|
+
permissions: {
|
|
51
|
+
lock: true,
|
|
52
|
+
items: [uri]
|
|
53
|
+
})
|
|
54
|
+
reload!
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Unlocks an object with all used objects. The types of objects that are affected by locks
|
|
58
|
+
# are dashboards, reports and metrics. This means that if you unlock a dashboard by this method
|
|
59
|
+
# all used reports and metrics are also unlocked. If you unlock a report all used metrics are also
|
|
60
|
+
# unlocked. The current object is unlocked as well. Beware that certain objects might be in use in
|
|
61
|
+
# multiple contexts. For example one metric can be used in several reports. This method performs no
|
|
62
|
+
# checks to determine if an object should stay locked or not.
|
|
63
|
+
#
|
|
64
|
+
# @return [GoodData::Mixin::Lockable]
|
|
65
|
+
def unlock_with_dependencies!
|
|
66
|
+
using('report').pmap { |link| project.reports(link['link']) }.select(&:locked?).pmap(&:unlock!)
|
|
67
|
+
using('metric').pmap { |link| project.metrics(link['link']) }.select(&:locked?).pmap(&:unlock!)
|
|
68
|
+
using('projectDashboard').pmap { |link| project.dashboards(link['link']) }.select(&:locked?).pmap(&:unlock!)
|
|
69
|
+
unlock!
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Returns true if an object is locked. False otherwise.
|
|
73
|
+
#
|
|
74
|
+
# @return [Boolean]
|
|
75
|
+
def locked?
|
|
76
|
+
meta['locked'] == 1
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Returns true if an object is unlocked. False otherwise.
|
|
80
|
+
#
|
|
81
|
+
# @return [Boolean]
|
|
82
|
+
def unlocked?
|
|
83
|
+
!locked?
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
module GoodData
|
|
8
|
+
module Mixin
|
|
9
|
+
module MdObjId
|
|
10
|
+
def uri_obj_id(uri)
|
|
11
|
+
GoodData::Helpers.last_uri_part(uri)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
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
|
+
module GoodData
|
|
8
|
+
module Mixin
|
|
9
|
+
module MdObjectIndexer
|
|
10
|
+
MD_OBJ_CTG = 'obj'
|
|
11
|
+
|
|
12
|
+
# Returns either list of objects or a specific object.
|
|
13
|
+
# This method is reimplemented in subclasses to leverage specific
|
|
14
|
+
# implementation for specific type of objects. Options is used in
|
|
15
|
+
# subclasses specifically to provide shorthand for getting a full
|
|
16
|
+
# objects after getting a list of hashes from query resource.
|
|
17
|
+
# @param [Object] id id can be either a number a String (as a URI). Subclasses should also be abel to deal with getting the instance of MdObject already and a :all symbol
|
|
18
|
+
# @param [Hash] options the options hash
|
|
19
|
+
# @option options [Boolean] :full if passed true the subclass can decide
|
|
20
|
+
# to pull in full objects. This is desirable from the usability POV
|
|
21
|
+
# but unfortunately has negative impact on performance so it is not
|
|
22
|
+
# the default.
|
|
23
|
+
# @return [MdObject] if id is a String or number single object is returned
|
|
24
|
+
# @return [Array] if :all was provided as an id, list of objects should
|
|
25
|
+
# be returned. Note that this is implemented only in the subclasses.
|
|
26
|
+
# MdObject does not support this since API has no means to return list
|
|
27
|
+
# of all types of objects.
|
|
28
|
+
def [](id, options = { :client => GoodData.connection, :project => GoodData.project })
|
|
29
|
+
client, project = GoodData.get_client_and_project(options)
|
|
30
|
+
|
|
31
|
+
fail "You have to provide an \"id\" to be searched for." unless id
|
|
32
|
+
fail(NoProjectError, 'Connect to a project before searching for an object') unless project
|
|
33
|
+
return all(options) if id == :all
|
|
34
|
+
return id if id.is_a?(MdObject)
|
|
35
|
+
uri = if id.is_a?(Integer) || id =~ /^\d+$/
|
|
36
|
+
"#{project.md[MD_OBJ_CTG]}/#{id}"
|
|
37
|
+
elsif id !~ %r{/}
|
|
38
|
+
identifier_to_uri options, id
|
|
39
|
+
elsif id =~ %r{^/}
|
|
40
|
+
id
|
|
41
|
+
else
|
|
42
|
+
fail 'Unexpected object id format: expected numeric ID, identifier with no slashes or an URI starting with a slash'
|
|
43
|
+
end
|
|
44
|
+
# new(GoodData.get uri) unless uri.nil?
|
|
45
|
+
if uri # rubocop:disable Style/GuardClause
|
|
46
|
+
raw = client.get(uri)
|
|
47
|
+
md_class = self
|
|
48
|
+
case raw.keys.first
|
|
49
|
+
when 'attribute'
|
|
50
|
+
md_class = GoodData::Attribute
|
|
51
|
+
when 'metric'
|
|
52
|
+
md_class = GoodData::Metric
|
|
53
|
+
when 'projectDashboard'
|
|
54
|
+
md_class = GoodData::Dashboard
|
|
55
|
+
when 'report'
|
|
56
|
+
md_class = GoodData::Report
|
|
57
|
+
when 'attributeDisplayForm'
|
|
58
|
+
md_class = GoodData::Label
|
|
59
|
+
when 'reportDefinition'
|
|
60
|
+
md_class = GoodData::ReportDefinition
|
|
61
|
+
when 'dataSet'
|
|
62
|
+
md_class = GoodData::Dataset
|
|
63
|
+
else
|
|
64
|
+
md_class = self
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
client.create(md_class, raw, client: client, project: project)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
alias_method :get_by_id, :[]
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
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
|
+
module GoodData
|
|
8
|
+
module Mixin
|
|
9
|
+
module MdObjectQuery
|
|
10
|
+
# Method intended to get all objects of that type in a specified project
|
|
11
|
+
#
|
|
12
|
+
# @param options [Hash] the options hash
|
|
13
|
+
# @option options [Boolean] :full if passed true the subclass can decide
|
|
14
|
+
# to pull in full objects. This is desirable from the usability POV
|
|
15
|
+
# but unfortunately has negative impact on performance so it is not
|
|
16
|
+
# the default.
|
|
17
|
+
# @return [Array<GoodData::MdObject> | Array<Hash>] Return the appropriate metadata objects or their representation
|
|
18
|
+
def all(_options = { :client => GoodData.connection, :project => GoodData.project })
|
|
19
|
+
fail NotImplementedError, 'Method should be implemented in subclass. Currently there is no way how to get all metadata objects on API.'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Method intended to be called by individual classes in their all
|
|
23
|
+
# implementations. It abstracts the way interacting with query resources.
|
|
24
|
+
# It either returns the array of hashes from query. If asked it also
|
|
25
|
+
# goes and brings the full objects. Due to performance reasons
|
|
26
|
+
# :full => false is the default. This will most likely change
|
|
27
|
+
#
|
|
28
|
+
# @param query_obj_type [String] string used in URI to distinguish different query resources for different objects
|
|
29
|
+
# @param klass [Class] A class used for instantiating the returned data
|
|
30
|
+
# @param options [Hash] the options hash
|
|
31
|
+
# @option options [Boolean] :full if passed true the subclass can
|
|
32
|
+
# decide to pull in full objects. This is desirable from the usability
|
|
33
|
+
# POV but unfortunately has negative impact on performance so it is
|
|
34
|
+
# not the default.
|
|
35
|
+
# @return [Array<GoodData::MdObject> | Array<Hash>] Return the appropriate metadata objects or their representation
|
|
36
|
+
def query(query_obj_type, klass, options = { :client => GoodData.connection, :project => GoodData.project })
|
|
37
|
+
client = options[:client]
|
|
38
|
+
fail ArgumentError, 'No :client specified' if client.nil?
|
|
39
|
+
|
|
40
|
+
p = options[:project]
|
|
41
|
+
fail ArgumentError, 'No :project specified' if p.nil?
|
|
42
|
+
|
|
43
|
+
project = GoodData::Project[p, options]
|
|
44
|
+
fail ArgumentError, 'Wrong :project specified' if project.nil?
|
|
45
|
+
|
|
46
|
+
offset = 0
|
|
47
|
+
page_limit = 50
|
|
48
|
+
Enumerator.new do |y|
|
|
49
|
+
loop do
|
|
50
|
+
result = client.get(project.md['objects'] + '/query', params: { category: query_obj_type, limit: page_limit, offset: offset })
|
|
51
|
+
result['objects']['items'].each do |item|
|
|
52
|
+
y << (klass ? client.create(klass, item, project: project) : item)
|
|
53
|
+
end
|
|
54
|
+
break if result['objects']['paging']['count'] < page_limit
|
|
55
|
+
offset += page_limit
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def dependency(uri, key = nil, opts = { :client => GoodData.connection })
|
|
61
|
+
c = opts[:client]
|
|
62
|
+
fail ArgumentError, 'No :client specified' if c.nil?
|
|
63
|
+
|
|
64
|
+
result = c.get(uri)['entries']
|
|
65
|
+
if key.nil?
|
|
66
|
+
result
|
|
67
|
+
elsif key.respond_to?(:category)
|
|
68
|
+
result = result.select { |item| item['category'] == key.category }
|
|
69
|
+
else
|
|
70
|
+
result = result.select { |item| item['category'] == key }
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
if opts[:full]
|
|
74
|
+
result = result.map do |res|
|
|
75
|
+
GoodData::MdObject[res['link'], :client => c, :project => opts[:project]]
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
result
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Checks for dependency
|
|
83
|
+
def dependency?(type, uri, target_uri, opts = { :client => GoodData.connection, :project => GoodData.project })
|
|
84
|
+
uri = uri.respond_to?(:uri) ? uri.uri : uri
|
|
85
|
+
objs = case type
|
|
86
|
+
when :usedby
|
|
87
|
+
usedby(uri, nil, opts)
|
|
88
|
+
when :using
|
|
89
|
+
using(uri, nil, opts)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
target_uri = target_uri.respond_to?(:uri) ? target_uri.uri : target_uri
|
|
93
|
+
objs.any? do |obj|
|
|
94
|
+
obj['link'] == target_uri
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Returns which objects uses this MD resource
|
|
99
|
+
def usedby(uri, key = nil, opts = { :client => GoodData.connection, :project => GoodData.project })
|
|
100
|
+
p = opts[:project]
|
|
101
|
+
fail ArgumentError, 'No :project specified' if p.nil?
|
|
102
|
+
|
|
103
|
+
project = GoodData::Project[p, opts]
|
|
104
|
+
fail ArgumentError, 'No :project specified' if project.nil?
|
|
105
|
+
|
|
106
|
+
dependency("#{project.md['usedby2']}/#{uri_obj_id(uri)}", key, opts)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
alias_method :used_by, :usedby
|
|
110
|
+
|
|
111
|
+
# Returns which objects this MD resource uses
|
|
112
|
+
def using(uri, key = nil, opts = { :client => GoodData.connection, :project => GoodData.project })
|
|
113
|
+
p = opts[:project]
|
|
114
|
+
fail ArgumentError, 'No :project specified' if p.nil?
|
|
115
|
+
|
|
116
|
+
project = GoodData::Project[p, opts]
|
|
117
|
+
fail ArgumentError, 'No :project specified' if project.nil?
|
|
118
|
+
|
|
119
|
+
dependency("#{project.md['using2']}/#{uri_obj_id(uri)}", key, opts)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def usedby?(uri, target_uri, opts = { :client => GoodData.connection, :project => GoodData.project })
|
|
123
|
+
dependency?(:usedby, uri, target_uri, opts)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
alias_method :used_by?, :usedby?
|
|
127
|
+
|
|
128
|
+
# Checks if obj is using this MD resource
|
|
129
|
+
def using?(uri, target_uri, opts = { :client => GoodData.connection, :project => GoodData.project })
|
|
130
|
+
dependency?(:using, uri, target_uri, opts)
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|