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,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
|
+
require 'pmap'
|
|
8
|
+
|
|
9
|
+
require_relative 'profile'
|
|
10
|
+
|
|
11
|
+
require_relative '../rest/rest'
|
|
12
|
+
|
|
13
|
+
require_relative '../mixins/rest_resource'
|
|
14
|
+
|
|
15
|
+
module GoodData
|
|
16
|
+
class ProjectRole < Rest::Resource
|
|
17
|
+
include Mixin::Author
|
|
18
|
+
include Mixin::Contributor
|
|
19
|
+
include Mixin::Timestamps
|
|
20
|
+
|
|
21
|
+
EMPTY_OBJECT = {
|
|
22
|
+
'projectRole' => {
|
|
23
|
+
'permissions' => {},
|
|
24
|
+
'links' => {},
|
|
25
|
+
'meta' => {}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
def self.create_object(data)
|
|
30
|
+
meta_data = {}.tap do |d|
|
|
31
|
+
d[:created] = data[:created] || Time.now
|
|
32
|
+
d[:identifier] = data[:identifier]
|
|
33
|
+
d[:updated] = data[:updated] || d[:created] || Time.now
|
|
34
|
+
d[:title] = data[:title]
|
|
35
|
+
d[:summary] = data[:summary]
|
|
36
|
+
end
|
|
37
|
+
new_data = GoodData::Helpers.deep_dup(EMPTY_OBJECT).tap do |d|
|
|
38
|
+
d['projectRole']['links']['self'] = data[:uri] if data[:uri]
|
|
39
|
+
d['projectRole']['meta'] = d['projectRole']['meta'].merge(GoodData::Helpers.stringify_keys(meta_data))
|
|
40
|
+
d['projectRole']['permissions'] = d['projectRole']['permissions'].merge(GoodData::Helpers.stringify_keys(data[:permissions] || {}))
|
|
41
|
+
end
|
|
42
|
+
new(new_data)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def initialize(json)
|
|
46
|
+
@json = json
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
data_property_reader :permissions
|
|
50
|
+
|
|
51
|
+
metadata_property_reader :identifier, :title, :summary
|
|
52
|
+
|
|
53
|
+
# Gets Users with this Role
|
|
54
|
+
#
|
|
55
|
+
# @return [Array<GoodData::Profile>] List of users
|
|
56
|
+
def users
|
|
57
|
+
url = data['links']['roleUsers']
|
|
58
|
+
tmp = client.get url
|
|
59
|
+
tmp['associatedUsers']['users'].pmap do |user_url|
|
|
60
|
+
url = user_url
|
|
61
|
+
user = client.get url
|
|
62
|
+
client.create(GoodData::Profile, user)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Gets Raw object URI
|
|
67
|
+
#
|
|
68
|
+
# @return [string] URI of this project role
|
|
69
|
+
def uri
|
|
70
|
+
return @json['projectRole']['links']['self'] if @json['projectRole']['links']['self']
|
|
71
|
+
return nil unless @json['projectRole']['links']['roleUsers']
|
|
72
|
+
@json['projectRole']['links']['roleUsers'].split('/')[0...-1].join('/')
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def ==(other)
|
|
76
|
+
uri == other.uri
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,270 @@
|
|
|
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
|
+
class ReportDataResult < Rest::Resource
|
|
9
|
+
class << self
|
|
10
|
+
# Does all the needed parsing on the apyload coming from the API and returns an instance of ReportDataResult
|
|
11
|
+
#
|
|
12
|
+
# @param [Hash] data Data coming from the API
|
|
13
|
+
# @return [GoodData::ReportDataResult] Returns new report data result
|
|
14
|
+
def from_xtab(data)
|
|
15
|
+
top = top_headers(data)
|
|
16
|
+
left = left_headers(data)
|
|
17
|
+
jank = GoodData::Helpers.zeroes(rows(top), cols(left), nil)
|
|
18
|
+
d = data(data)
|
|
19
|
+
stuff = d.empty? ? GoodData::Helpers.zeroes(rows(left), cols(top), nil) : d
|
|
20
|
+
|
|
21
|
+
a = jank.zip(top).map { |x, y| x + y }
|
|
22
|
+
b = left.zip(stuff).map { |x, y| x + y }
|
|
23
|
+
result = a + b
|
|
24
|
+
ReportDataResult.new(data: result, top: rows(top), left: cols(left))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def line(child)
|
|
30
|
+
children = child['children'] || []
|
|
31
|
+
return (child['first']..child['last']).to_a.map { [child['id']] } if children.empty?
|
|
32
|
+
children.flat_map { |c| line(c) }.map do |x|
|
|
33
|
+
child['id'].nil? ? x : [child['id']] + x
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def root_line(root)
|
|
38
|
+
lookups = root['lookups']
|
|
39
|
+
header = line(root['tree'])
|
|
40
|
+
header.map { |l| l.each_with_index.map { |item, index| lookups[index][item] } }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def top_headers(data)
|
|
44
|
+
root = data['xtab_data']['columns']
|
|
45
|
+
root_line(root).transpose
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def left_headers(data)
|
|
49
|
+
root = data['xtab_data']['rows']
|
|
50
|
+
root_line(root)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def cols(stuff)
|
|
54
|
+
stuff.first.count
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def rows(stuff)
|
|
58
|
+
stuff.count
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def data(data)
|
|
62
|
+
data['xtab_data']['data'].map { |row| row.map { |i| i ? BigDecimal(i) : i } }
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Returns
|
|
67
|
+
#
|
|
68
|
+
# @param [Hash] opts Data for the report
|
|
69
|
+
# @option opts [Array<Array>] :data The data as a matrix. First rows then cols
|
|
70
|
+
# @option opts [Number] :top Number of rows that are representing the top header
|
|
71
|
+
# @option opts [Number] :left Number of cols that are representing the left header
|
|
72
|
+
# @return [GoodData::ReportDataResult] Returns new report data result
|
|
73
|
+
def initialize(opts)
|
|
74
|
+
@data = opts[:data]
|
|
75
|
+
@top_headers_rows_nums = opts[:top]
|
|
76
|
+
@left_headers_cols_nums = opts[:left]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Gives you new report result with top headers removed
|
|
80
|
+
#
|
|
81
|
+
# @return [GoodData::ReportDataResult] Returns new report data result
|
|
82
|
+
def without_top_headers
|
|
83
|
+
slice(@top_headers_rows_nums, 0)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Gives you new report result with left headers removed
|
|
87
|
+
#
|
|
88
|
+
# @return [GoodData::ReportDataResult] Returns new report data result
|
|
89
|
+
def without_left_headers
|
|
90
|
+
slice(0, @left_headers_cols_nums)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Gives you left headers as an Array
|
|
94
|
+
#
|
|
95
|
+
# @return [Array] Return left headers as Array of Arrays. The notation is of a matrix. First rows then cols.
|
|
96
|
+
def left_headers
|
|
97
|
+
return nil if @left_headers_cols_nums.zero?
|
|
98
|
+
top = @left_headers_cols_nums - 1
|
|
99
|
+
without_top_headers.slice(0, [0, top]).to_a
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Gives you right headers as an Array
|
|
103
|
+
#
|
|
104
|
+
# @return [Array] Return top headers as Array of Arrays. The notation is of a matrix. First rows then cols.
|
|
105
|
+
def top_headers
|
|
106
|
+
return nil if @top_headers_rows_nums.zero?
|
|
107
|
+
top = @top_headers_rows_nums - 1
|
|
108
|
+
without_left_headers.slice([0, top], 0).to_a
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Gives you data as a new ReportDataResult
|
|
112
|
+
#
|
|
113
|
+
# @return [Array] Return left headers as Array of Arrays. The notation is of a matrix. First rows then cols.
|
|
114
|
+
def data
|
|
115
|
+
slice(@top_headers_rows_nums, @left_headers_cols_nums)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def each
|
|
119
|
+
to_a.each
|
|
120
|
+
end
|
|
121
|
+
alias_method :each_line, :each
|
|
122
|
+
alias_method :each_row, :each
|
|
123
|
+
|
|
124
|
+
def each_column
|
|
125
|
+
size.last.times.map do |i|
|
|
126
|
+
col = map { |row| row[i] }
|
|
127
|
+
yield(col)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Gives you data as a new ReportDataResult
|
|
132
|
+
#
|
|
133
|
+
# @return [Array] Return left headers as Array of Arrays. The notation is of a matrix. First rows then cols.
|
|
134
|
+
def to_a
|
|
135
|
+
@data
|
|
136
|
+
end
|
|
137
|
+
alias_method :to_table, :to_a
|
|
138
|
+
|
|
139
|
+
# Gives report as a table suitable for printing out
|
|
140
|
+
#
|
|
141
|
+
# @return [String]
|
|
142
|
+
def to_s(options = {})
|
|
143
|
+
with_indices = options[:index]
|
|
144
|
+
|
|
145
|
+
a = to_table.to_a
|
|
146
|
+
data = a.transpose
|
|
147
|
+
data.unshift((1..a.length).to_a) if with_indices
|
|
148
|
+
processed_data = data.each_with_index.map do |col, i|
|
|
149
|
+
col.unshift(i.zero? ? nil : i) if with_indices # inserts row labels #
|
|
150
|
+
w = col.map { |cell| cell.to_s.length }.max # w = "column width" #
|
|
151
|
+
col.each_with_index.map do |cell, j|
|
|
152
|
+
j.zero? ? cell.to_s.center(w) : cell.to_s.ljust(w)
|
|
153
|
+
end # alligns the column #
|
|
154
|
+
end
|
|
155
|
+
processed_data.transpose.map { |row| "[#{row.join(' | ')}]" }.unshift('').join("\n")
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Allows to pick particular row inside the report result
|
|
159
|
+
#
|
|
160
|
+
# @return [Array] Returns a row of data
|
|
161
|
+
def [](index)
|
|
162
|
+
@data[index]
|
|
163
|
+
end
|
|
164
|
+
alias_method :row, :[]
|
|
165
|
+
|
|
166
|
+
# Allows to pick particular column inside the report result
|
|
167
|
+
#
|
|
168
|
+
# @return [Array] Returns a column of data. The column is returned transposed
|
|
169
|
+
def column(index)
|
|
170
|
+
transpose[index]
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Is the report without any data? This can be caused by the fact that the filters are too restrictive or data are not loaded in
|
|
174
|
+
#
|
|
175
|
+
# @return [Array] Returns true if data result is empty
|
|
176
|
+
def empty?
|
|
177
|
+
row, cols = size
|
|
178
|
+
row.zero? && cols.zero?
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Allows you to test if a report contains a row.
|
|
182
|
+
#
|
|
183
|
+
# @param [Array<String | Number>] row Row that you want to test.
|
|
184
|
+
# It is looking for the whole row. If the headers are getting in the way
|
|
185
|
+
# use #without_left_headers or #without_top_headers
|
|
186
|
+
# @return [Array] Returns true if data are inside a report
|
|
187
|
+
def include_row?(row)
|
|
188
|
+
@data.include?(row)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# Allows you to test if a report contains a column.
|
|
192
|
+
#
|
|
193
|
+
# @param [Array<String | Number>] row Row that you want to test.
|
|
194
|
+
# It is looking for the whole row. If the headers are getting in the way
|
|
195
|
+
# use #without_left_headers or #without_top_headers
|
|
196
|
+
# @return [Array] Returns true if data are inside a report
|
|
197
|
+
def include_column?(col)
|
|
198
|
+
transpose.include_row?(col)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# Returns the size of the report
|
|
202
|
+
#
|
|
203
|
+
# @return [Array<Number>] The size of the report result as an array. First element is rows second is columns
|
|
204
|
+
def size
|
|
205
|
+
[@data.size, @data.empty? ? 0 : @data.first.size]
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
# Transposes data and returns as new data result
|
|
209
|
+
#
|
|
210
|
+
# @return [GoodData::ReportDataResult] Returns new report data result with flipped columns and rows
|
|
211
|
+
def transpose
|
|
212
|
+
ReportDataResult.new(data: to_a.transpose, top: @left_headers_cols_nums, left: @top_headers_rows_nums)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
# Gives you report result with a subset of data starting at position rows, cols
|
|
216
|
+
#
|
|
217
|
+
# @param [Number] rows Position where you want to slice your row. Currently accepts only number
|
|
218
|
+
# @param [Number] cols Position where you want to slice your row. Currently accepts only number
|
|
219
|
+
# @return [GoodData::ReportDataResult] Returns new report data result sliced data
|
|
220
|
+
def slice(rows, cols)
|
|
221
|
+
rows = rows.is_a?(Enumerable) ? rows : [rows, size.first]
|
|
222
|
+
cols = cols.is_a?(Enumerable) ? cols : [cols, size.last]
|
|
223
|
+
new_data = @data[rows.first..rows.last].map { |col| col[cols.first..cols.last] }
|
|
224
|
+
if client
|
|
225
|
+
client.create(ReportDataResult, data: new_data, top: @top_headers_rows_nums - rows.first, left: @left_headers_cols_nums - cols.first, project: project)
|
|
226
|
+
else
|
|
227
|
+
ReportDataResult.new(data: new_data, top: @top_headers_rows_nums - rows.first, left: @left_headers_cols_nums - cols.first, project: project)
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# Returns the size of the the data portion of report
|
|
232
|
+
#
|
|
233
|
+
# @return [Array<Number>] The size of the report result as an array. First element is rows second is columns
|
|
234
|
+
def data_size
|
|
235
|
+
data.size
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def ==(other)
|
|
239
|
+
return false if size != other.size
|
|
240
|
+
@data == other.to_a
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def eq?(other)
|
|
244
|
+
self == other
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
# Implements subtraction. Works only on reports that have same number of columns. Gives you columns that are not in other.
|
|
248
|
+
#
|
|
249
|
+
# @param [GoodData::ReportDataResult] other The other report result
|
|
250
|
+
# @return [Array<Array>] Returns rows that are not contained in other
|
|
251
|
+
def -(other)
|
|
252
|
+
fail 'Seems you are not using a data result as a parameter' unless other.respond_to?(:size)
|
|
253
|
+
message = 'Results do not have compatible sizes. Subtracting the dataresults works row wise so you have to have the same number of columns'
|
|
254
|
+
fail message if size.last != other.size.last
|
|
255
|
+
to_a - other.to_a
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# Implements diff. Works only on reports that have same number of columns (because it uses #- behind the scene).
|
|
259
|
+
#
|
|
260
|
+
# @param [GoodData::ReportDataResult] other The other report result
|
|
261
|
+
# @return [Hash] Returns a hash that gives you the differences in the report results
|
|
262
|
+
def diff(other)
|
|
263
|
+
{
|
|
264
|
+
added: other - self,
|
|
265
|
+
removed: self - other,
|
|
266
|
+
same: @data & other.to_a
|
|
267
|
+
}
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
end
|
|
@@ -0,0 +1,538 @@
|
|
|
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 '../rest/resource'
|
|
8
|
+
require_relative '../extensions/hash'
|
|
9
|
+
require_relative '../mixins/rest_resource'
|
|
10
|
+
require_relative '../helpers/global_helpers'
|
|
11
|
+
|
|
12
|
+
require_relative 'execution'
|
|
13
|
+
|
|
14
|
+
module GoodData
|
|
15
|
+
class Schedule < Rest::Resource
|
|
16
|
+
attr_reader :dirty, :json
|
|
17
|
+
|
|
18
|
+
SCHEDULE_TEMPLATE = {
|
|
19
|
+
:schedule => {
|
|
20
|
+
:type => nil,
|
|
21
|
+
:timezone => nil,
|
|
22
|
+
:params => {},
|
|
23
|
+
:hiddenParams => {},
|
|
24
|
+
# :reschedule => nil
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
class << self
|
|
29
|
+
# Looks for schedule
|
|
30
|
+
# @param id [String] URL, ID of schedule or :all
|
|
31
|
+
# @return [GoodData::Schedule|Array<GoodData::Schedule>] List of schedules
|
|
32
|
+
def [](id, opts = { :client => GoodData.connection, :project => GoodData.project })
|
|
33
|
+
c, project = GoodData.get_client_and_project(opts)
|
|
34
|
+
|
|
35
|
+
if id == :all
|
|
36
|
+
GoodData::Schedule.all(opts)
|
|
37
|
+
else
|
|
38
|
+
if id =~ %r{\/gdc\/projects\/[a-zA-Z\d]+\/schedules\/?[a-zA-Z\d]*}
|
|
39
|
+
url = id
|
|
40
|
+
tmp = c.get url
|
|
41
|
+
return c.create(GoodData::Schedule, tmp)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
tmp = c.get "/gdc/projects/#{project.pid}/schedules/#{id}"
|
|
45
|
+
c.create(GoodData::Schedule, tmp, project: project)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Returns list of all schedules for active project
|
|
50
|
+
# @return [Array<GoodData::Schedule>] List of schedules
|
|
51
|
+
def all(opts = { :client => GoodData.connection, :project => GoodData.project })
|
|
52
|
+
c, project = GoodData.get_client_and_project(opts)
|
|
53
|
+
|
|
54
|
+
tmp = c.get "/gdc/projects/#{project.pid}/schedules"
|
|
55
|
+
tmp['schedules']['items'].map { |schedule| c.create(GoodData::Schedule, schedule, project: project) }
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Creates new schedules from parameters passed
|
|
59
|
+
#
|
|
60
|
+
# @param process_id [String] Process ID
|
|
61
|
+
# @param trigger [String|GoodData::Schedule] Trigger of schedule. Can be cron string or reference to another schedule.
|
|
62
|
+
# @param executable [String] Execution executable
|
|
63
|
+
# @param options [Hash] Optional options
|
|
64
|
+
# @return [GoodData::Schedule] New GoodData::Schedule instance
|
|
65
|
+
def create(process_id, trigger, executable, options = {})
|
|
66
|
+
c, project = GoodData.get_client_and_project(options)
|
|
67
|
+
|
|
68
|
+
fail 'Process ID has to be provided' if process_id.blank?
|
|
69
|
+
|
|
70
|
+
is_dataload_process = Process[process_id, project: project, client: c].type == :dataload
|
|
71
|
+
|
|
72
|
+
if is_dataload_process
|
|
73
|
+
dataload_datasets = options[:dataload_datasets] || options['GDC_DATALOAD_DATASETS']
|
|
74
|
+
dataload_datasets = '[]' unless dataload_datasets
|
|
75
|
+
|
|
76
|
+
de_synchronize_all = options[:de_synchronize_all] || options['GDC_DE_SYNCHRONIZE_ALL']
|
|
77
|
+
else
|
|
78
|
+
fail 'Executable has to be provided' if executable.blank?
|
|
79
|
+
end
|
|
80
|
+
fail 'Trigger schedule has to be provided' if trigger.blank?
|
|
81
|
+
|
|
82
|
+
schedule = c.create(GoodData::Schedule, GoodData::Helpers.stringify_keys(GoodData::Helpers.deep_dup(SCHEDULE_TEMPLATE)), client: c, project: project)
|
|
83
|
+
|
|
84
|
+
params = { 'PROCESS_ID' => process_id }
|
|
85
|
+
if is_dataload_process
|
|
86
|
+
params['GDC_DATALOAD_DATASETS'] = dataload_datasets
|
|
87
|
+
params['GDC_DE_SYNCHRONIZE_ALL'] = de_synchronize_all if de_synchronize_all
|
|
88
|
+
else
|
|
89
|
+
params['EXECUTABLE'] = executable
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
default_opts = {
|
|
93
|
+
:type => 'MSETL',
|
|
94
|
+
:timezone => 'UTC',
|
|
95
|
+
:state => 'ENABLED',
|
|
96
|
+
:params => params,
|
|
97
|
+
# :reschedule => nil
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
schedule.name = options[:name]
|
|
101
|
+
schedule.set_trigger(trigger)
|
|
102
|
+
schedule.params = default_opts[:params].merge(options[:params] || {})
|
|
103
|
+
schedule.hidden_params = options[:hidden_params] || {}
|
|
104
|
+
schedule.timezone = options[:timezone] || default_opts[:timezone]
|
|
105
|
+
schedule.state = options[:state] || default_opts[:state]
|
|
106
|
+
schedule.schedule_type = options[:type] || default_opts[:type]
|
|
107
|
+
schedule.reschedule = options[:reschedule] if options[:reschedule]
|
|
108
|
+
schedule
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Initializes object from raw json
|
|
113
|
+
#
|
|
114
|
+
# @param json [Object] Raw JSON
|
|
115
|
+
# @return [GoodData::Schedule] New GoodData::Schedule instance
|
|
116
|
+
def initialize(json)
|
|
117
|
+
json = GoodData::Helpers.stringify_keys(json)
|
|
118
|
+
super
|
|
119
|
+
@json = json
|
|
120
|
+
self.params = GoodData::Helpers.decode_params(json['schedule']['params'] || {})
|
|
121
|
+
self.hidden_params = GoodData::Helpers.decode_params(json['schedule']['hiddenParams'] || {})
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def after
|
|
125
|
+
project.schedules(trigger_id) if trigger_id
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def after=(schedule)
|
|
129
|
+
fail 'After trigger has to be a schedule object' unless schedule.is_a?(Schedule)
|
|
130
|
+
json['schedule']['triggerScheduleId'] = schedule.obj_id
|
|
131
|
+
@json['schedule']['cron'] = nil
|
|
132
|
+
@dirty = true
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Deletes schedule
|
|
136
|
+
def delete
|
|
137
|
+
saved? ? client.delete(uri) : nil
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Disables the schedule.
|
|
141
|
+
#
|
|
142
|
+
# @return [GoodData::Schedule]
|
|
143
|
+
def disable
|
|
144
|
+
@json['schedule']['state'] = 'DISABLED'
|
|
145
|
+
@dirty = true
|
|
146
|
+
self
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Disables and saves the schedule.
|
|
150
|
+
#
|
|
151
|
+
# @return [Boolean]
|
|
152
|
+
def disable!
|
|
153
|
+
disable
|
|
154
|
+
save
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Is schedule disabled?
|
|
158
|
+
#
|
|
159
|
+
# @return [Boolean]
|
|
160
|
+
def disabled?
|
|
161
|
+
state == 'DISABLED'
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Is schedule enabled?
|
|
165
|
+
#
|
|
166
|
+
# @return [Boolean]
|
|
167
|
+
def enabled?
|
|
168
|
+
!disabled?
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Enables the schedule
|
|
172
|
+
#
|
|
173
|
+
# @return [GoodData::Schedule]
|
|
174
|
+
def enable
|
|
175
|
+
@json['schedule']['state'] = 'ENABLED'
|
|
176
|
+
@dirty = true
|
|
177
|
+
self
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Enables and saves the schedule
|
|
181
|
+
#
|
|
182
|
+
# @return [GoodData::Schedule]
|
|
183
|
+
def enable!
|
|
184
|
+
enable
|
|
185
|
+
save
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Executes schedule
|
|
189
|
+
#
|
|
190
|
+
# @param [Hash] opts execution options.
|
|
191
|
+
# @option opts [Boolean] :wait Wait for execution result
|
|
192
|
+
# @return [Object] Raw Response
|
|
193
|
+
def execute(opts = {})
|
|
194
|
+
return nil unless saved?
|
|
195
|
+
opts = { :wait => true }.merge(opts)
|
|
196
|
+
data = {
|
|
197
|
+
:execution => {}
|
|
198
|
+
}
|
|
199
|
+
res = client.post(execution_url, data)
|
|
200
|
+
execution = client.create(GoodData::Execution, res, client: client, project: project)
|
|
201
|
+
|
|
202
|
+
return execution unless opts[:wait]
|
|
203
|
+
execution.wait_for_result(opts)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# Returns execution URL
|
|
207
|
+
#
|
|
208
|
+
# @return [String] Executions URL
|
|
209
|
+
def execution_url
|
|
210
|
+
saved? ? @json['schedule']['links']['executions'] : nil
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
# Returns execution state
|
|
214
|
+
#
|
|
215
|
+
# @return [String] Execution state
|
|
216
|
+
def state
|
|
217
|
+
@json['schedule']['state']
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def state=(a_state)
|
|
221
|
+
@json['schedule']['state'] = a_state
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# Returns execution timezone
|
|
225
|
+
#
|
|
226
|
+
# @return [String] Execution timezone
|
|
227
|
+
def timezone
|
|
228
|
+
@json['schedule']['timezone']
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# Assigns execution timezone
|
|
232
|
+
#
|
|
233
|
+
# @param new_timezone [String] Timezone to be set
|
|
234
|
+
def timezone=(new_timezone)
|
|
235
|
+
@json['schedule']['timezone'] = new_timezone
|
|
236
|
+
@dirty = true
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# Returns execution type
|
|
240
|
+
#
|
|
241
|
+
# @return [String] Execution type
|
|
242
|
+
def type
|
|
243
|
+
@json['schedule']['type']
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Assigns execution type
|
|
247
|
+
#
|
|
248
|
+
# @param new_type [String] Execution type to be set
|
|
249
|
+
def type=(new_type)
|
|
250
|
+
@json['schedule']['type'] = new_type
|
|
251
|
+
@dirty = true
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# Returns execution cron settings
|
|
255
|
+
#
|
|
256
|
+
# @return [String] Cron settings
|
|
257
|
+
def cron
|
|
258
|
+
@json['schedule']['cron']
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
# Assigns execution cron settings
|
|
262
|
+
#
|
|
263
|
+
# @param new_cron [String] Cron settings to be set
|
|
264
|
+
def cron=(new_cron)
|
|
265
|
+
@json['schedule']['cron'] = new_cron
|
|
266
|
+
@json['schedule']['triggerScheduleId'] = nil
|
|
267
|
+
@dirty = true
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# Returns reschedule settings
|
|
271
|
+
#
|
|
272
|
+
# @return [Integer] Reschedule settings
|
|
273
|
+
def reschedule
|
|
274
|
+
@json['schedule']['reschedule']
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
# Assigns execution reschedule settings
|
|
278
|
+
#
|
|
279
|
+
# @param new_reschedule [Integer] Reschedule settings to be set
|
|
280
|
+
def reschedule=(new_reschedule)
|
|
281
|
+
@json['schedule']['reschedule'] = new_reschedule
|
|
282
|
+
@dirty = true
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
# Returns execution process related to this schedule
|
|
286
|
+
#
|
|
287
|
+
# @return [GoodData::Process] Process ID
|
|
288
|
+
def process
|
|
289
|
+
project.processes(process_id)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
# Returns execution process ID
|
|
293
|
+
#
|
|
294
|
+
# @return [String] Process ID
|
|
295
|
+
def process_id
|
|
296
|
+
@json['schedule']['params']['PROCESS_ID']
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
def process_id=(new_project_id)
|
|
300
|
+
@json['schedule']['params']['PROCESS_ID'] = new_project_id
|
|
301
|
+
@dirty = true
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# Returns execution executable
|
|
305
|
+
#
|
|
306
|
+
# @return [String] Executable (graph) name
|
|
307
|
+
def executable
|
|
308
|
+
@json['schedule']['params']['EXECUTABLE']
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
# Assigns execution executable
|
|
312
|
+
#
|
|
313
|
+
# @param new_executable [String] Executable to be set.
|
|
314
|
+
def executable=(new_executable)
|
|
315
|
+
@json['schedule']['params']['EXECUTABLE'] = new_executable
|
|
316
|
+
@dirty = true
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
# Returns enumerator of executions
|
|
320
|
+
#
|
|
321
|
+
# @return [Array] Raw Executions JSON
|
|
322
|
+
def executions
|
|
323
|
+
return nil unless @json
|
|
324
|
+
url = @json['schedule']['links']['executions']
|
|
325
|
+
Enumerator.new do |y|
|
|
326
|
+
loop do
|
|
327
|
+
res = client.get url
|
|
328
|
+
res['executions']['paging']['next']
|
|
329
|
+
res['executions']['items'].each do |execution|
|
|
330
|
+
y << client.create(Execution, execution, :project => project)
|
|
331
|
+
end
|
|
332
|
+
url = res['executions']['paging']['next']
|
|
333
|
+
break unless url
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
# Returns hidden_params as Hash
|
|
339
|
+
#
|
|
340
|
+
# @return [Hash] Hidden Parameters
|
|
341
|
+
def hidden_params
|
|
342
|
+
@json['schedule']['hiddenParams']
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
# Updates params by merging the current params with new ones
|
|
346
|
+
#
|
|
347
|
+
# @param params_to_merge [Hash] params
|
|
348
|
+
# @return [GoodData::Schedule] Returns self
|
|
349
|
+
def update_params(params_to_merge)
|
|
350
|
+
params_to_merge.each do |k, v|
|
|
351
|
+
set_parameter(k, v)
|
|
352
|
+
end
|
|
353
|
+
@dirty = true
|
|
354
|
+
self
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
# Updates hidden params by merging the current params with new ones
|
|
358
|
+
#
|
|
359
|
+
# @param params_to_merge [Hash] params
|
|
360
|
+
# @return [GoodData::Schedule] Returns self
|
|
361
|
+
def update_hidden_params(params_to_merge)
|
|
362
|
+
params_to_merge.each do |k, v|
|
|
363
|
+
set_hidden_parameter(k, v)
|
|
364
|
+
end
|
|
365
|
+
@dirty = true
|
|
366
|
+
self
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
# Assigns hidden parameters
|
|
370
|
+
#
|
|
371
|
+
# @param new_hidden_param [String] Hidden parameters to be set
|
|
372
|
+
def hidden_params=(new_hidden_params = {})
|
|
373
|
+
@json['schedule']['hiddenParams'] = GoodData::Helpers.stringify_values(new_hidden_params)
|
|
374
|
+
@dirty = true
|
|
375
|
+
self
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
# Returns params as Hash
|
|
379
|
+
#
|
|
380
|
+
# @return [Hash] Parameters
|
|
381
|
+
def params
|
|
382
|
+
@json['schedule']['params']
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
# Assigns execution parameters
|
|
386
|
+
#
|
|
387
|
+
# @param params [String] Params to be set
|
|
388
|
+
def params=(new_params = {})
|
|
389
|
+
default_params = {
|
|
390
|
+
'PROCESS_ID' => process_id,
|
|
391
|
+
'EXECUTABLE' => executable
|
|
392
|
+
}
|
|
393
|
+
@json['schedule']['params'] = default_params.merge(GoodData::Helpers.stringify_values(new_params))
|
|
394
|
+
@dirty = true
|
|
395
|
+
self
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
def rewrite_deprecated_params
|
|
399
|
+
params['EXECUTABLE'] = params.delete('GRAPH') if params['GRAPH']
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
# Saves object if dirty
|
|
403
|
+
#
|
|
404
|
+
# @return [Boolean] True if saved
|
|
405
|
+
def save
|
|
406
|
+
fail 'trigger schedule has to be provided' if cron.blank? && trigger_id.blank?
|
|
407
|
+
fail 'A timezone has to be provided' if timezone.blank?
|
|
408
|
+
fail 'Schedule type has to be provided' if schedule_type.blank?
|
|
409
|
+
rewrite_deprecated_params
|
|
410
|
+
if @dirty
|
|
411
|
+
if saved?
|
|
412
|
+
res = client.put(uri, to_update_payload)
|
|
413
|
+
@json = Schedule.new(res).json
|
|
414
|
+
else
|
|
415
|
+
res = client.post "/gdc/projects/#{project.pid}/schedules", to_update_payload
|
|
416
|
+
fail 'Unable to create new schedule' if res.nil?
|
|
417
|
+
new_obj_json = client.get res['schedule']['links']['self']
|
|
418
|
+
@json = Schedule.new(new_obj_json).json
|
|
419
|
+
end
|
|
420
|
+
@dirty = false
|
|
421
|
+
end
|
|
422
|
+
self
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
# Updates params at key k with val v
|
|
426
|
+
#
|
|
427
|
+
# @param k [String] key
|
|
428
|
+
# @param v [Object] value
|
|
429
|
+
# @return [GoodData::Schedule] Returns self
|
|
430
|
+
def set_parameter(k, v)
|
|
431
|
+
params[k] = v
|
|
432
|
+
@dirty = true
|
|
433
|
+
self
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
# Updates hidden params at key k with val v
|
|
437
|
+
#
|
|
438
|
+
# @param k [String] key
|
|
439
|
+
# @param v [Object] value
|
|
440
|
+
# @return [GoodData::Schedule] Returns self
|
|
441
|
+
def set_hidden_parameter(k, v)
|
|
442
|
+
hidden_params[k] = v
|
|
443
|
+
@dirty = true
|
|
444
|
+
self
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
def schedule_type
|
|
448
|
+
json['schedule']['type']
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
def schedule_type=(type)
|
|
452
|
+
json['schedule']['type'] = type
|
|
453
|
+
@dirty = true
|
|
454
|
+
self
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
def time_based?
|
|
458
|
+
cron != nil
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
def to_hash
|
|
462
|
+
{
|
|
463
|
+
name: name,
|
|
464
|
+
type: type,
|
|
465
|
+
state: state,
|
|
466
|
+
params: params,
|
|
467
|
+
hidden_params: hidden_params,
|
|
468
|
+
cron: cron,
|
|
469
|
+
trigger_id: trigger_id,
|
|
470
|
+
timezone: timezone,
|
|
471
|
+
uri: uri,
|
|
472
|
+
reschedule: reschedule,
|
|
473
|
+
executable: executable,
|
|
474
|
+
process_id: process_id
|
|
475
|
+
}
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
def trigger_id
|
|
479
|
+
json['schedule']['triggerScheduleId']
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
def trigger_id=(a_trigger)
|
|
483
|
+
json['schedule']['triggerScheduleId'] = a_trigger
|
|
484
|
+
@dirty = true
|
|
485
|
+
self
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
def name
|
|
489
|
+
json['schedule']['name']
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
def name=(name)
|
|
493
|
+
json['schedule']['name'] = name
|
|
494
|
+
@dirty = true
|
|
495
|
+
self
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
def set_trigger(trigger) # rubocop:disable Style/AccessorMethodName
|
|
499
|
+
if trigger.is_a?(String) && trigger =~ /[a-fA-Z0-9]{24}/
|
|
500
|
+
self.trigger_id = trigger
|
|
501
|
+
elsif trigger.is_a?(GoodData::Schedule)
|
|
502
|
+
self.trigger_id = trigger.obj_id
|
|
503
|
+
else
|
|
504
|
+
self.cron = trigger
|
|
505
|
+
end
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
# Returns URL
|
|
509
|
+
#
|
|
510
|
+
# @return [String] Schedule URL
|
|
511
|
+
def uri
|
|
512
|
+
@json['schedule']['links']['self'] if @json && @json['schedule'] && @json['schedule']['links']
|
|
513
|
+
end
|
|
514
|
+
|
|
515
|
+
def ==(other)
|
|
516
|
+
other.respond_to?(:uri) && other.uri == uri && other.respond_to?(:to_hash) && other.to_hash == to_hash
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
def to_update_payload
|
|
520
|
+
res = {
|
|
521
|
+
'schedule' => {
|
|
522
|
+
'name' => name,
|
|
523
|
+
'type' => type,
|
|
524
|
+
'state' => state,
|
|
525
|
+
'timezone' => timezone,
|
|
526
|
+
'cron' => cron,
|
|
527
|
+
'triggerScheduleId' => trigger_id,
|
|
528
|
+
'params' => GoodData::Helpers.encode_public_params(params),
|
|
529
|
+
'hiddenParams' => GoodData::Helpers.encode_hidden_params(hidden_params)
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
res['schedule']['reschedule'] = reschedule if reschedule
|
|
534
|
+
|
|
535
|
+
res
|
|
536
|
+
end
|
|
537
|
+
end
|
|
538
|
+
end
|