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,144 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
|
6
|
+
|
|
7
|
+
require 'pathname'
|
|
8
|
+
require 'terminal-table'
|
|
9
|
+
|
|
10
|
+
require_relative '../connection'
|
|
11
|
+
|
|
12
|
+
module GoodData
|
|
13
|
+
module Command
|
|
14
|
+
class Project
|
|
15
|
+
class << self
|
|
16
|
+
# Create new project based on options supplied
|
|
17
|
+
def create(options = { client: GoodData.connection })
|
|
18
|
+
title = options[:title]
|
|
19
|
+
summary = options[:summary]
|
|
20
|
+
template = options[:template]
|
|
21
|
+
token = options[:token]
|
|
22
|
+
client = options[:client]
|
|
23
|
+
driver = options[:driver] || 'Pg'
|
|
24
|
+
GoodData::Project.create(:title => title, :summary => summary, :template => template, :auth_token => token, :client => client, :driver => driver)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Show existing project
|
|
28
|
+
def show(id, options = { client: GoodData.connection })
|
|
29
|
+
client = options[:client]
|
|
30
|
+
client.projects(id)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def invite(project_id, email, role, msg = GoodData::Project::DEFAULT_INVITE_MESSAGE, options = {})
|
|
34
|
+
client = options[:client]
|
|
35
|
+
project = client.projects(project_id)
|
|
36
|
+
fail "Invalid project id '#{project_id}' specified" if project.nil?
|
|
37
|
+
|
|
38
|
+
project.invite(email, role, msg)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Clone existing project
|
|
42
|
+
#
|
|
43
|
+
# @param project_id [String | GoodData::Project] Project id or project instance to delete
|
|
44
|
+
# @option options [String] :data Clone including all the data (default true)
|
|
45
|
+
# @option options [String] :users Clone including all the users (default false)
|
|
46
|
+
# @option options [String] :title Name of the cloned project (default "Clone of {old_project_title}")
|
|
47
|
+
# @option options [Boolean] :exclude_schedules Specifies whether to include scheduled emails
|
|
48
|
+
# @option options [Boolean] :verbose (false) Switch on verbose mode for detailed logging
|
|
49
|
+
def clone(project_id, options = { client: GoodData.connection })
|
|
50
|
+
client = options[:client]
|
|
51
|
+
client.with_project(project_id) do |project|
|
|
52
|
+
project.clone(options)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Deletes existing project
|
|
57
|
+
#
|
|
58
|
+
# @param project_id [String | GoodData::Project] Project id or project instance to delete
|
|
59
|
+
def delete(project_id, options = { client: GoodData.connection })
|
|
60
|
+
client = options[:client]
|
|
61
|
+
p = client.projects(project_id)
|
|
62
|
+
p.delete
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Get Spec and ID (of project)
|
|
66
|
+
def get_spec_and_project_id(base_path)
|
|
67
|
+
goodfile_path = GoodData::Helpers.find_goodfile(Pathname(base_path))
|
|
68
|
+
fail 'Goodfile could not be located in any parent directory. Please make sure you are inside a gooddata project folder.' if goodfile_path.nil?
|
|
69
|
+
goodfile = JSON.parse(File.read(goodfile_path), :symbolize_names => true)
|
|
70
|
+
spec_path = goodfile[:model] || fail('You need to specify the path of the build spec')
|
|
71
|
+
fail "Model path provided in Goodfile \"#{spec_path}\" does not exist" unless File.exist?(spec_path) && !File.directory?(spec_path)
|
|
72
|
+
|
|
73
|
+
spec_path = Pathname(spec_path)
|
|
74
|
+
|
|
75
|
+
content = File.read(spec_path)
|
|
76
|
+
spec = if spec_path.extname == '.rb'
|
|
77
|
+
eval(content)
|
|
78
|
+
elsif spec_path.extname == '.json'
|
|
79
|
+
JSON.parse(spec_path, :symbolize_names => true)
|
|
80
|
+
end
|
|
81
|
+
[spec, goodfile[:project_id]]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Update project
|
|
85
|
+
def update(opts = { client: GoodData.connection })
|
|
86
|
+
client, project = GoodData.get_client_and_project(opts)
|
|
87
|
+
GoodData::Model::ProjectCreator.migrate(:spec => opts[:spec], :client => client, :project => project)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Build project
|
|
91
|
+
def build(opts = { client: GoodData.connection })
|
|
92
|
+
client = opts[:client]
|
|
93
|
+
fail ArgumentError, 'No :client specified' if client.nil?
|
|
94
|
+
|
|
95
|
+
GoodData::Model::ProjectCreator.migrate(opts.merge(:client => client))
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Performs project validation
|
|
99
|
+
#
|
|
100
|
+
# @param project_id [String | GoodData::Project] Project id or project instance to validate
|
|
101
|
+
# @return [Object] Report of found problems
|
|
102
|
+
def validate(project_id, options = { client: GoodData.connection })
|
|
103
|
+
client = options[:client]
|
|
104
|
+
client.with_project(project_id, &:validate)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Lists roles in a project
|
|
108
|
+
#
|
|
109
|
+
# @param project_id [String | GoodData::Project] Project id or project instance to list the users in
|
|
110
|
+
# @return [Array <GoodData::Role>] List of project roles
|
|
111
|
+
def roles(project_id, options = { client: GoodData.connection })
|
|
112
|
+
client = options[:client]
|
|
113
|
+
client.with_project(project_id, &:roles)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Lists users in a project
|
|
117
|
+
#
|
|
118
|
+
# @param project_id [String | GoodData::Project] Project id or project instance to list the users in
|
|
119
|
+
# @return [Array <GoodData::Membership>] List of project users
|
|
120
|
+
def users(project_id, options = { client: GoodData.connection })
|
|
121
|
+
client = options[:client] || GoodData.connect(options)
|
|
122
|
+
client.with_project(project_id, &:users)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Lists users in a project
|
|
126
|
+
#
|
|
127
|
+
# @param options [Hash] List of users
|
|
128
|
+
#
|
|
129
|
+
# TODO: Review and refactor #users & #list_users
|
|
130
|
+
def list_users(options = { client: GoodData.connection })
|
|
131
|
+
client = GoodData.connect(options)
|
|
132
|
+
project = client.projects(options[:project_id])
|
|
133
|
+
|
|
134
|
+
rows = project.users.to_a.map do |user|
|
|
135
|
+
[user.email, user.full_name, user.role.title, user.user_groups.join(', ')]
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
table = Terminal::Table.new :headings => ['Email', 'Full Name', 'Role', 'Groups'], :rows => rows
|
|
139
|
+
puts table
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
|
6
|
+
|
|
7
|
+
require 'pathname'
|
|
8
|
+
|
|
9
|
+
module GoodData
|
|
10
|
+
module Command
|
|
11
|
+
class Projects
|
|
12
|
+
class << self
|
|
13
|
+
def list(options = { client: GoodData.connection })
|
|
14
|
+
client = options[:client]
|
|
15
|
+
client.projects
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
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 '../core/core'
|
|
8
|
+
|
|
9
|
+
module GoodData
|
|
10
|
+
module Command
|
|
11
|
+
class Role
|
|
12
|
+
class << self
|
|
13
|
+
def list(_pid, opts = { :client => GoodData.connection, :project => GoodData.project })
|
|
14
|
+
p = opts[:project]
|
|
15
|
+
fail ArgumentError, 'No :project specified' if p.nil?
|
|
16
|
+
|
|
17
|
+
project = GoodData::Project[p, opts]
|
|
18
|
+
fail ArgumentError, 'Wrong :project specified' if project.nil?
|
|
19
|
+
|
|
20
|
+
roles_response = client.get("/gdc/projects/#{project.pid}/roles")
|
|
21
|
+
|
|
22
|
+
roles = {}
|
|
23
|
+
roles_response['projectRoles']['roles'].each do |role_uri|
|
|
24
|
+
r = client.get(role_uri)
|
|
25
|
+
identifier = r['projectRole']['meta']['identifier']
|
|
26
|
+
roles[identifier] = {
|
|
27
|
+
:user_uri => r['projectRole']['links']['roleUsers'],
|
|
28
|
+
:uri => role_uri
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
roles
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
|
6
|
+
|
|
7
|
+
require 'pathname'
|
|
8
|
+
|
|
9
|
+
module GoodData
|
|
10
|
+
module Command
|
|
11
|
+
class Runners
|
|
12
|
+
def self.run_ruby_locally(brick_dir, options = {})
|
|
13
|
+
pid = options[:project_id]
|
|
14
|
+
fail 'You have to specify a project ID' if pid.nil?
|
|
15
|
+
fail 'You have to specify directory of the brick run' if brick_dir.nil?
|
|
16
|
+
fail 'You specified file as a birck run directory. You have to specify directory.' if File.exist?(brick_dir) && !File.directory?(brick_dir)
|
|
17
|
+
|
|
18
|
+
params = options[:expanded_params] || {}
|
|
19
|
+
|
|
20
|
+
client = GoodData.connect(options[:username], options[:password])
|
|
21
|
+
sst = client.connection.sst_token
|
|
22
|
+
pwd = Pathname.new(Dir.pwd)
|
|
23
|
+
|
|
24
|
+
server_uri = URI(options[:server]) unless options[:server].nil?
|
|
25
|
+
scheme = server_uri.nil? ? '' : server_uri.scheme
|
|
26
|
+
hostname = server_uri.nil? ? '' : server_uri.host
|
|
27
|
+
|
|
28
|
+
script_body = <<-script_body
|
|
29
|
+
require 'fileutils'
|
|
30
|
+
FileUtils::cd(\"#{pwd + brick_dir}\") do\
|
|
31
|
+
|
|
32
|
+
$SCRIPT_PARAMS = {
|
|
33
|
+
"GDC_SST" => \"#{sst}\",
|
|
34
|
+
"GDC_PROJECT_ID" => \"#{pid}\",
|
|
35
|
+
"GDC_PROTOCOL" => \"#{scheme}\",
|
|
36
|
+
"GDC_HOSTNAME" => \"#{hostname}\",
|
|
37
|
+
"GDC_LOGGER_FILE" => STDOUT,
|
|
38
|
+
"GDC_ENV_LOCAL" => true
|
|
39
|
+
}.merge(#{params})
|
|
40
|
+
require './main.rb'
|
|
41
|
+
end
|
|
42
|
+
script_body
|
|
43
|
+
system('ruby', '-e', script_body)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
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 'erubis'
|
|
8
|
+
require 'fileutils'
|
|
9
|
+
require 'pathname'
|
|
10
|
+
|
|
11
|
+
module GoodData
|
|
12
|
+
module Command
|
|
13
|
+
class Scaffold
|
|
14
|
+
TEMPLATES_PATH = Pathname(__FILE__) + '../../../templates'
|
|
15
|
+
|
|
16
|
+
class << self
|
|
17
|
+
# Scaffolds new project
|
|
18
|
+
# TODO: Add option for custom output dir
|
|
19
|
+
def project(name)
|
|
20
|
+
fail ArgumentError, 'No name specified' if name.nil?
|
|
21
|
+
|
|
22
|
+
FileUtils.mkdir(name)
|
|
23
|
+
FileUtils.cd(name) do
|
|
24
|
+
FileUtils.mkdir('model')
|
|
25
|
+
FileUtils.cd('model') do
|
|
26
|
+
input = File.read(TEMPLATES_PATH + 'project/model/model.rb.erb')
|
|
27
|
+
eruby = Erubis::Eruby.new(input)
|
|
28
|
+
File.open('model.rb', 'w') do |f|
|
|
29
|
+
f.write(eruby.result(:name => name))
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
FileUtils.mkdir('data')
|
|
34
|
+
FileUtils.cd('data') do
|
|
35
|
+
FileUtils.cp(Dir.glob(TEMPLATES_PATH + 'project/data/*.csv'), '.')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
input = File.read(TEMPLATES_PATH + 'project/Goodfile.erb')
|
|
39
|
+
eruby = Erubis::Eruby.new(input)
|
|
40
|
+
File.open('Goodfile', 'w') do |f|
|
|
41
|
+
f.write(eruby.result)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Scaffolds new brick
|
|
47
|
+
# TODO: Add option for custom output dir
|
|
48
|
+
def brick(name)
|
|
49
|
+
fail ArgumentError, 'No name specified' if name.nil?
|
|
50
|
+
|
|
51
|
+
FileUtils.mkdir(name)
|
|
52
|
+
FileUtils.cd(name) do
|
|
53
|
+
input = File.read(TEMPLATES_PATH + 'bricks/brick.rb.erb')
|
|
54
|
+
eruby = Erubis::Eruby.new(input)
|
|
55
|
+
File.open('brick.rb', 'w') do |f|
|
|
56
|
+
f.write(eruby.result)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
input = File.read(TEMPLATES_PATH + 'bricks/main.rb.erb')
|
|
60
|
+
eruby = Erubis::Eruby.new(input)
|
|
61
|
+
File.open('main.rb', 'w') do |f|
|
|
62
|
+
f.write(eruby.result)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
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
|
+
require 'highline/import'
|
|
8
|
+
require 'multi_json'
|
|
9
|
+
|
|
10
|
+
require_relative '../core/core'
|
|
11
|
+
|
|
12
|
+
module GoodData
|
|
13
|
+
module Command
|
|
14
|
+
class User
|
|
15
|
+
class << self
|
|
16
|
+
def roles(pid)
|
|
17
|
+
roles_response = GoodData.get("/gdc/projects/#{pid}/roles")
|
|
18
|
+
|
|
19
|
+
roles = {}
|
|
20
|
+
roles_response['projectRoles']['roles'].each do |role_uri|
|
|
21
|
+
r = GoodData.get(role_uri)
|
|
22
|
+
identifier = r['projectRole']['meta']['identifier']
|
|
23
|
+
roles[identifier] = {
|
|
24
|
+
:user_uri => r['projectRole']['links']['roleUsers'],
|
|
25
|
+
:uri => role_uri
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
roles
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def show(opts = { client: GoodData.connection })
|
|
32
|
+
client = opts[:client]
|
|
33
|
+
fail ArgumentError, 'No :client specified' if client.nil?
|
|
34
|
+
pp client.user.json
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
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 'uri'
|
|
8
|
+
|
|
9
|
+
require_relative 'core/logging'
|
|
10
|
+
|
|
11
|
+
require_relative 'rest/rest'
|
|
12
|
+
|
|
13
|
+
module GoodData
|
|
14
|
+
class << self
|
|
15
|
+
DEFAULT_SSO_OPTIONS = {
|
|
16
|
+
:url => '/gdc/app/account/bootstrap',
|
|
17
|
+
:valid => 24 * 60 * 60
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
# Returns the active GoodData connection earlier initialized via GoodData.connect call
|
|
21
|
+
#
|
|
22
|
+
# @see GoodData.connect
|
|
23
|
+
def connection
|
|
24
|
+
# TODO: Remove this after successful rest-factory transition
|
|
25
|
+
Rest::Client.connection # || fail('Please authenticate with GoodData.connect first')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
alias_method :client, :connection
|
|
29
|
+
|
|
30
|
+
# Connect to the GoodData API
|
|
31
|
+
#
|
|
32
|
+
# @param options
|
|
33
|
+
# @param second_options
|
|
34
|
+
# @param third_options
|
|
35
|
+
#
|
|
36
|
+
def connect(options = nil, second_options = nil, third_options = {})
|
|
37
|
+
Rest::Client.connect(options, second_options, third_options)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Disconnect (logout) if logged in
|
|
41
|
+
def disconnect
|
|
42
|
+
Rest::Client.disconnect
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def with_connection(options = nil, second_options = nil, third_options = {}, &bl)
|
|
46
|
+
connection = connect(options, second_options, third_options)
|
|
47
|
+
bl.call(connection)
|
|
48
|
+
rescue Exception => e # rubocop:disable RescueException
|
|
49
|
+
puts e.message
|
|
50
|
+
raise e
|
|
51
|
+
ensure
|
|
52
|
+
disconnect
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Generates SSO URL
|
|
56
|
+
#
|
|
57
|
+
# This SSO implementation is custom implementation provided by GoodData
|
|
58
|
+
# that allows your application to sign in an existing GoodData user.
|
|
59
|
+
# The authentication is done not by username and password but by generating a session
|
|
60
|
+
# specific token using pair of PGP keys.
|
|
61
|
+
#
|
|
62
|
+
# @see https://developer.gooddata.com/article/single-sign-on
|
|
63
|
+
#
|
|
64
|
+
# @param [String] login Email address used for logging into gooddata
|
|
65
|
+
# @param [String] provider Name of SSO provider
|
|
66
|
+
# @param [Hash] opts Additional options
|
|
67
|
+
# @option opts [Fixnum] :validity Validity in seconds from 'now'
|
|
68
|
+
# @return [String] URL which can be used for SSO logging in
|
|
69
|
+
def sso_url(login, provider, opts = DEFAULT_SSO_OPTIONS)
|
|
70
|
+
opts = DEFAULT_SSO_OPTIONS.merge(opts)
|
|
71
|
+
|
|
72
|
+
ts = DateTime.now.strftime('%s').to_i + opts[:valid]
|
|
73
|
+
obj = {
|
|
74
|
+
'email' => login,
|
|
75
|
+
'validity' => ts
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
json_data = JSON.pretty_generate(obj) + "\n"
|
|
79
|
+
|
|
80
|
+
file_json = Tempfile.new('gooddata-sso-json')
|
|
81
|
+
file_json.write(json_data)
|
|
82
|
+
|
|
83
|
+
file_json.rewind
|
|
84
|
+
file_signed = Tempfile.new('gooddata-sso-signed')
|
|
85
|
+
|
|
86
|
+
cmd = "gpg --no-tty --armor --yes -u #{login} --output #{file_signed.path} --sign #{file_json.path}"
|
|
87
|
+
res = system(cmd)
|
|
88
|
+
fail 'Unable to sign json' unless res
|
|
89
|
+
|
|
90
|
+
file_signed.rewind
|
|
91
|
+
file_final = Tempfile.new('gooddata-sso-final')
|
|
92
|
+
|
|
93
|
+
cmd = "gpg --yes --no-tty --trust-model always --armor --output #{file_final.path} --encrypt --recipient security@gooddata.com #{file_signed.path}"
|
|
94
|
+
res = system(cmd)
|
|
95
|
+
fail 'Unable to encrypt json' unless res
|
|
96
|
+
|
|
97
|
+
file_final.rewind
|
|
98
|
+
final = file_final.read
|
|
99
|
+
|
|
100
|
+
"#{GoodData::Helpers::AuthHelper.read_server}/gdc/account/customerlogin?sessionId=#{CGI.escape(final)}&serverURL=#{CGI.escape(provider)}&targetURL=#{CGI.escape(opts[:url])}"
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Connect to GoodData using SSO
|
|
104
|
+
#
|
|
105
|
+
# This SSO implementation is custom implementation provided by GoodData
|
|
106
|
+
# that allows your application to sign in an existing GoodData user.
|
|
107
|
+
# The authentication is done not by username and password but by generating a session
|
|
108
|
+
# specific token using pair of PGP keys.
|
|
109
|
+
#
|
|
110
|
+
# @see https://developer.gooddata.com/article/single-sign-on
|
|
111
|
+
#
|
|
112
|
+
# @param [String] login Email address used for logging into gooddata
|
|
113
|
+
# @param [String] provider Name of SSO provider
|
|
114
|
+
# @return [GoodData::Rest::Client] Instance of REST client
|
|
115
|
+
def connect_sso(login, provider)
|
|
116
|
+
url = sso_url(login, provider)
|
|
117
|
+
|
|
118
|
+
params = {
|
|
119
|
+
:x_gdc_request => "#{GoodData::Rest::Connection.generate_string}:#{GoodData::Rest::Connection.generate_string}"
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
RestClient.get url, params do |response, _request, _result|
|
|
123
|
+
Rest::Client.connect_sso(:sst_token => URI.decode(response.cookies['GDCAuthSST']))
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|