gooddata-edge 0.6.27.edge
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/.gitignore +36 -0
- data/.rspec +3 -0
- data/.rubocop.yml +89 -0
- data/.yardopts +22 -0
- data/CHANGELOG.md +196 -0
- data/CLI.md +439 -0
- data/DEPENDENCIES.md +817 -0
- data/Gemfile +4 -0
- data/Guardfile +5 -0
- data/LICENSE +22 -0
- data/LICENSE.rb +5 -0
- data/README.md +75 -0
- data/Rakefile +179 -0
- data/TODO.md +32 -0
- data/authors.sh +4 -0
- data/bin/gooddata +7 -0
- data/dependency_decisions.yml +104 -0
- data/gooddata +9 -0
- data/gooddata.gemspec +63 -0
- data/lib/gooddata.rb +31 -0
- data/lib/gooddata/app/app.rb +16 -0
- data/lib/gooddata/bricks/base_downloader.rb +86 -0
- data/lib/gooddata/bricks/brick.rb +38 -0
- data/lib/gooddata/bricks/bricks.rb +15 -0
- data/lib/gooddata/bricks/middleware/aws_middleware.rb +29 -0
- data/lib/gooddata/bricks/middleware/base_middleware.rb +56 -0
- data/lib/gooddata/bricks/middleware/bench_middleware.rb +24 -0
- data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +37 -0
- data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +20 -0
- data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +48 -0
- data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +36 -0
- data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +39 -0
- data/lib/gooddata/bricks/middleware/logger_middleware.rb +29 -0
- data/lib/gooddata/bricks/middleware/middleware.rb +12 -0
- data/lib/gooddata/bricks/middleware/restforce_middleware.rb +61 -0
- data/lib/gooddata/bricks/middleware/stdout_middleware.rb +23 -0
- data/lib/gooddata/bricks/middleware/twitter_middleware.rb +29 -0
- data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +37 -0
- data/lib/gooddata/bricks/pipeline.rb +32 -0
- data/lib/gooddata/bricks/utils.rb +18 -0
- data/lib/gooddata/cli/cli.rb +27 -0
- data/lib/gooddata/cli/commands/auth_cmd.rb +29 -0
- data/lib/gooddata/cli/commands/domain_cmd.rb +28 -0
- data/lib/gooddata/cli/commands/project_cmd.rb +45 -0
- data/lib/gooddata/cli/hooks.rb +57 -0
- data/lib/gooddata/cli/shared.rb +61 -0
- data/lib/gooddata/cli/terminal.rb +20 -0
- data/lib/gooddata/client.rb +67 -0
- data/lib/gooddata/commands/api.rb +64 -0
- data/lib/gooddata/commands/auth.rb +107 -0
- data/lib/gooddata/commands/base.rb +12 -0
- data/lib/gooddata/commands/commands.rb +12 -0
- data/lib/gooddata/commands/datasets.rb +148 -0
- data/lib/gooddata/commands/datawarehouse.rb +20 -0
- data/lib/gooddata/commands/domain.rb +40 -0
- data/lib/gooddata/commands/process.rb +67 -0
- data/lib/gooddata/commands/project.rb +175 -0
- data/lib/gooddata/commands/projects.rb +20 -0
- data/lib/gooddata/commands/role.rb +36 -0
- data/lib/gooddata/commands/runners.rb +47 -0
- data/lib/gooddata/commands/scaffold.rb +69 -0
- data/lib/gooddata/commands/user.rb +39 -0
- data/lib/gooddata/connection.rb +127 -0
- data/lib/gooddata/core/core.rb +12 -0
- data/lib/gooddata/core/logging.rb +105 -0
- data/lib/gooddata/core/nil_logger.rb +23 -0
- data/lib/gooddata/core/project.rb +74 -0
- data/lib/gooddata/core/rest.rb +149 -0
- data/lib/gooddata/core/user.rb +20 -0
- data/lib/gooddata/data/data.rb +12 -0
- data/lib/gooddata/data/guesser.rb +122 -0
- data/lib/gooddata/exceptions/attr_element_not_found.rb +16 -0
- data/lib/gooddata/exceptions/command_failed.rb +11 -0
- data/lib/gooddata/exceptions/exceptions.rb +12 -0
- data/lib/gooddata/exceptions/execution_limit_exceeded.rb +13 -0
- data/lib/gooddata/exceptions/filter_maqlization.rb +16 -0
- data/lib/gooddata/exceptions/malformed_user.rb +15 -0
- data/lib/gooddata/exceptions/no_project_error.rb +15 -0
- data/lib/gooddata/exceptions/object_migration.rb +32 -0
- data/lib/gooddata/exceptions/project_not_found.rb +13 -0
- data/lib/gooddata/exceptions/segment_not_empty.rb +18 -0
- data/lib/gooddata/exceptions/uncomputable_report.rb +13 -0
- data/lib/gooddata/exceptions/user_in_different_domain.rb +15 -0
- data/lib/gooddata/exceptions/validation_error.rb +16 -0
- data/lib/gooddata/extensions/big_decimal.rb +17 -0
- data/lib/gooddata/extensions/enumerable.rb +39 -0
- data/lib/gooddata/extensions/extensions.rb +10 -0
- data/lib/gooddata/extensions/false.rb +15 -0
- data/lib/gooddata/extensions/hash.rb +38 -0
- data/lib/gooddata/extensions/nil.rb +15 -0
- data/lib/gooddata/extensions/numeric.rb +15 -0
- data/lib/gooddata/extensions/object.rb +27 -0
- data/lib/gooddata/extensions/symbol.rb +15 -0
- data/lib/gooddata/extensions/true.rb +15 -0
- data/lib/gooddata/extract.rb +21 -0
- data/lib/gooddata/goodzilla/goodzilla.rb +159 -0
- data/lib/gooddata/helpers/auth_helpers.rb +75 -0
- data/lib/gooddata/helpers/csv_helper.rb +61 -0
- data/lib/gooddata/helpers/data_helper.rb +116 -0
- data/lib/gooddata/helpers/global_helpers.rb +331 -0
- data/lib/gooddata/helpers/global_helpers_params.rb +172 -0
- data/lib/gooddata/helpers/helpers.rb +10 -0
- data/lib/gooddata/mixins/author.rb +26 -0
- data/lib/gooddata/mixins/content_getter.rb +15 -0
- data/lib/gooddata/mixins/content_property_reader.rb +17 -0
- data/lib/gooddata/mixins/content_property_writer.rb +17 -0
- data/lib/gooddata/mixins/contributor.rb +20 -0
- data/lib/gooddata/mixins/data_getter.rb +15 -0
- data/lib/gooddata/mixins/data_property_reader.rb +19 -0
- data/lib/gooddata/mixins/data_property_writer.rb +19 -0
- data/lib/gooddata/mixins/inspector.rb +53 -0
- data/lib/gooddata/mixins/is_attribute.rb +17 -0
- data/lib/gooddata/mixins/is_dimension.rb +17 -0
- data/lib/gooddata/mixins/is_fact.rb +17 -0
- data/lib/gooddata/mixins/is_label.rb +19 -0
- data/lib/gooddata/mixins/links.rb +15 -0
- data/lib/gooddata/mixins/md_finders.rb +77 -0
- data/lib/gooddata/mixins/md_grantees.rb +42 -0
- data/lib/gooddata/mixins/md_id_to_uri.rb +34 -0
- data/lib/gooddata/mixins/md_json.rb +15 -0
- data/lib/gooddata/mixins/md_lock.rb +87 -0
- data/lib/gooddata/mixins/md_object_id.rb +15 -0
- data/lib/gooddata/mixins/md_object_indexer.rb +64 -0
- data/lib/gooddata/mixins/md_object_query.rb +128 -0
- data/lib/gooddata/mixins/md_relations.rb +43 -0
- data/lib/gooddata/mixins/meta_getter.rb +17 -0
- data/lib/gooddata/mixins/meta_property_reader.rb +19 -0
- data/lib/gooddata/mixins/meta_property_writer.rb +19 -0
- data/lib/gooddata/mixins/mixins.rb +19 -0
- data/lib/gooddata/mixins/not_attribute.rb +17 -0
- data/lib/gooddata/mixins/not_exportable.rb +15 -0
- data/lib/gooddata/mixins/not_fact.rb +17 -0
- data/lib/gooddata/mixins/not_group.rb +17 -0
- data/lib/gooddata/mixins/not_label.rb +19 -0
- data/lib/gooddata/mixins/not_metric.rb +19 -0
- data/lib/gooddata/mixins/obj_id.rb +15 -0
- data/lib/gooddata/mixins/rest_getters.rb +17 -0
- data/lib/gooddata/mixins/rest_resource.rb +47 -0
- data/lib/gooddata/mixins/root_key_getter.rb +15 -0
- data/lib/gooddata/mixins/root_key_setter.rb +15 -0
- data/lib/gooddata/mixins/timestamps.rb +19 -0
- data/lib/gooddata/mixins/to_json.rb +11 -0
- data/lib/gooddata/mixins/uri_getter.rb +9 -0
- data/lib/gooddata/models/blueprint/anchor_field.rb +64 -0
- data/lib/gooddata/models/blueprint/attribute_field.rb +29 -0
- data/lib/gooddata/models/blueprint/blueprint.rb +11 -0
- data/lib/gooddata/models/blueprint/blueprint_field.rb +70 -0
- data/lib/gooddata/models/blueprint/dashboard_builder.rb +30 -0
- data/lib/gooddata/models/blueprint/dataset_blueprint.rb +449 -0
- data/lib/gooddata/models/blueprint/date_dimension.rb +14 -0
- data/lib/gooddata/models/blueprint/fact_field.rb +20 -0
- data/lib/gooddata/models/blueprint/label_field.rb +43 -0
- data/lib/gooddata/models/blueprint/project_blueprint.rb +746 -0
- data/lib/gooddata/models/blueprint/project_builder.rb +83 -0
- data/lib/gooddata/models/blueprint/reference_field.rb +43 -0
- data/lib/gooddata/models/blueprint/schema_blueprint.rb +160 -0
- data/lib/gooddata/models/blueprint/schema_builder.rb +89 -0
- data/lib/gooddata/models/blueprint/to_manifest.rb +181 -0
- data/lib/gooddata/models/blueprint/to_wire.rb +154 -0
- data/lib/gooddata/models/client.rb +182 -0
- data/lib/gooddata/models/client_synchronization_result.rb +31 -0
- data/lib/gooddata/models/client_synchronization_result_details.rb +41 -0
- data/lib/gooddata/models/datawarehouse.rb +92 -0
- data/lib/gooddata/models/domain.rb +479 -0
- data/lib/gooddata/models/execution.rb +115 -0
- data/lib/gooddata/models/execution_detail.rb +81 -0
- data/lib/gooddata/models/from_wire.rb +160 -0
- data/lib/gooddata/models/invitation.rb +75 -0
- data/lib/gooddata/models/links.rb +50 -0
- data/lib/gooddata/models/membership.rb +441 -0
- data/lib/gooddata/models/metadata.rb +272 -0
- data/lib/gooddata/models/metadata/attribute.rb +134 -0
- data/lib/gooddata/models/metadata/dashboard.rb +108 -0
- data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +76 -0
- data/lib/gooddata/models/metadata/dashboard/filter_apply_item.rb +37 -0
- data/lib/gooddata/models/metadata/dashboard/filter_item.rb +64 -0
- data/lib/gooddata/models/metadata/dashboard/geo_chart_item.rb +56 -0
- data/lib/gooddata/models/metadata/dashboard/headline_item.rb +56 -0
- data/lib/gooddata/models/metadata/dashboard/iframe_item.rb +46 -0
- data/lib/gooddata/models/metadata/dashboard/report_item.rb +92 -0
- data/lib/gooddata/models/metadata/dashboard/text_item.rb +55 -0
- data/lib/gooddata/models/metadata/dashboard_tab.rb +141 -0
- data/lib/gooddata/models/metadata/dataset.rb +64 -0
- data/lib/gooddata/models/metadata/dimension.rb +54 -0
- data/lib/gooddata/models/metadata/fact.rb +44 -0
- data/lib/gooddata/models/metadata/label.rb +128 -0
- data/lib/gooddata/models/metadata/metadata.rb +12 -0
- data/lib/gooddata/models/metadata/metric.rb +198 -0
- data/lib/gooddata/models/metadata/report.rb +247 -0
- data/lib/gooddata/models/metadata/report_definition.rb +264 -0
- data/lib/gooddata/models/metadata/scheduled_mail.rb +274 -0
- data/lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb +62 -0
- data/lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb +64 -0
- data/lib/gooddata/models/metadata/variable.rb +91 -0
- data/lib/gooddata/models/model.rb +282 -0
- data/lib/gooddata/models/models.rb +12 -0
- data/lib/gooddata/models/module_constants.rb +31 -0
- data/lib/gooddata/models/process.rb +316 -0
- data/lib/gooddata/models/profile.rb +426 -0
- data/lib/gooddata/models/project.rb +1514 -0
- data/lib/gooddata/models/project_creator.rb +126 -0
- data/lib/gooddata/models/project_metadata.rb +67 -0
- data/lib/gooddata/models/project_role.rb +79 -0
- data/lib/gooddata/models/report_data_result.rb +266 -0
- data/lib/gooddata/models/schedule.rb +518 -0
- data/lib/gooddata/models/segment.rb +201 -0
- data/lib/gooddata/models/tab_builder.rb +27 -0
- data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +76 -0
- data/lib/gooddata/models/user_filters/user_filter.rb +100 -0
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +512 -0
- data/lib/gooddata/models/user_filters/user_filters.rb +13 -0
- data/lib/gooddata/models/user_filters/variable_user_filter.rb +31 -0
- data/lib/gooddata/models/user_group.rb +241 -0
- data/lib/gooddata/rest/README.md +37 -0
- data/lib/gooddata/rest/client.rb +389 -0
- data/lib/gooddata/rest/connection.rb +765 -0
- data/lib/gooddata/rest/object.rb +69 -0
- data/lib/gooddata/rest/object_factory.rb +76 -0
- data/lib/gooddata/rest/resource.rb +27 -0
- data/lib/gooddata/rest/rest.rb +24 -0
- data/lib/gooddata/version.rb +23 -0
- data/lib/templates/bricks/brick.rb.erb +7 -0
- data/lib/templates/bricks/main.rb.erb +5 -0
- data/lib/templates/project/Goodfile.erb +4 -0
- data/lib/templates/project/data/commits.csv +4 -0
- data/lib/templates/project/data/devs.csv +4 -0
- data/lib/templates/project/data/repos.csv +3 -0
- data/lib/templates/project/model/model.rb.erb +20 -0
- data/spec/bricks/bricks_spec.rb +112 -0
- data/spec/bricks/default-config.json +8 -0
- data/spec/data/.gooddata +4 -0
- data/spec/data/blueprints/additional_dataset_module.json +32 -0
- data/spec/data/blueprints/big_blueprint_not_pruned.json +2079 -0
- data/spec/data/blueprints/invalid_blueprint.json +103 -0
- data/spec/data/blueprints/m_n_model.json +104 -0
- data/spec/data/blueprints/model_module.json +25 -0
- data/spec/data/blueprints/test_blueprint.json +38 -0
- data/spec/data/blueprints/test_project_model_spec.json +106 -0
- data/spec/data/cc/data/source/commits.csv +4 -0
- data/spec/data/cc/data/source/devs.csv +4 -0
- data/spec/data/cc/data/source/repos.csv +3 -0
- data/spec/data/cc/devel.prm +0 -0
- data/spec/data/cc/graph/graph.grf +11 -0
- data/spec/data/cc/workspace.prm +19 -0
- data/spec/data/column_based_permissions.csv +7 -0
- data/spec/data/column_based_permissions2.csv +6 -0
- data/spec/data/gd_gse_data_blueprint.json +1371 -0
- data/spec/data/gd_gse_data_manifest.json +1424 -0
- data/spec/data/gd_gse_data_model.json +1772 -0
- data/spec/data/gooddata_version_process/gooddata_version.rb +9 -0
- data/spec/data/gooddata_version_process/gooddata_version.zip +0 -0
- data/spec/data/hello_world_process/hello_world.rb +9 -0
- data/spec/data/hello_world_process/hello_world.zip +0 -0
- data/spec/data/line_based_permissions.csv +3 -0
- data/spec/data/manifests/test_blueprint.json +32 -0
- data/spec/data/manifests/test_project.json +107 -0
- data/spec/data/reports/left_attr_report.json +108 -0
- data/spec/data/reports/metric_only_one_line.json +83 -0
- data/spec/data/reports/report_1.json +197 -0
- data/spec/data/reports/top_attr_report.json +108 -0
- data/spec/data/ruby_params_process/ruby_params.rb +9 -0
- data/spec/data/ruby_process/deep_files/deep_stuff.txt +1 -0
- data/spec/data/ruby_process/process.rb +8 -0
- data/spec/data/ruby_process/stuff.txt +1 -0
- data/spec/data/superfluous_titles_view.json +81 -0
- data/spec/data/test-ci-data.csv +2 -0
- data/spec/data/users.csv +12 -0
- data/spec/data/wire_models/model_view.json +1775 -0
- data/spec/data/wire_models/nu_model.json +3046 -0
- data/spec/data/wire_models/test_blueprint.json +63 -0
- data/spec/data/wire_test_project.json +150 -0
- data/spec/environment/default.rb +41 -0
- data/spec/environment/develop.rb +31 -0
- data/spec/environment/environment.rb +18 -0
- data/spec/environment/hotfix.rb +21 -0
- data/spec/environment/production.rb +35 -0
- data/spec/environment/release.rb +21 -0
- data/spec/environment/staging.rb +30 -0
- data/spec/environment/staging_3.rb +36 -0
- data/spec/helpers/blueprint_helper.rb +26 -0
- data/spec/helpers/cli_helper.rb +36 -0
- data/spec/helpers/connection_helper.rb +41 -0
- data/spec/helpers/crypto_helper.rb +17 -0
- data/spec/helpers/csv_helper.rb +18 -0
- data/spec/helpers/process_helper.rb +33 -0
- data/spec/helpers/project_helper.rb +59 -0
- data/spec/helpers/schedule_helper.rb +31 -0
- data/spec/helpers/spec_helper.rb +15 -0
- data/spec/integration/blueprint_updates_spec.rb +101 -0
- data/spec/integration/blueprint_with_grain_spec.rb +72 -0
- data/spec/integration/clients_spec.rb +134 -0
- data/spec/integration/command_datawarehouse_spec.rb +39 -0
- data/spec/integration/command_projects_spec.rb +32 -0
- data/spec/integration/create_from_template_spec.rb +22 -0
- data/spec/integration/create_project_spec.rb +24 -0
- data/spec/integration/date_dim_switch_spec.rb +142 -0
- data/spec/integration/deprecated_load_spec.rb +58 -0
- data/spec/integration/full_process_schedule_spec.rb +298 -0
- data/spec/integration/full_project_spec.rb +569 -0
- data/spec/integration/over_to_user_filters_spec.rb +94 -0
- data/spec/integration/partial_md_export_import_spec.rb +42 -0
- data/spec/integration/project_spec.rb +264 -0
- data/spec/integration/rest_spec.rb +213 -0
- data/spec/integration/schedule_spec.rb +626 -0
- data/spec/integration/segments_spec.rb +141 -0
- data/spec/integration/user_filters_spec.rb +290 -0
- data/spec/integration/user_group_spec.rb +127 -0
- data/spec/integration/variables_spec.rb +188 -0
- data/spec/logging_in_logging_out_spec.rb +93 -0
- data/spec/spec_helper.rb +95 -0
- data/spec/unit/bricks/bricks_spec.rb +35 -0
- data/spec/unit/bricks/middleware/aws_middelware_spec.rb +51 -0
- data/spec/unit/bricks/middleware/bench_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/logger_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +15 -0
- data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +15 -0
- data/spec/unit/cli/cli_spec.rb +17 -0
- data/spec/unit/cli/commands/cmd_auth_spec.rb +17 -0
- data/spec/unit/commands/command_projects_spec.rb +22 -0
- data/spec/unit/core/connection_spec.rb +57 -0
- data/spec/unit/core/logging_spec.rb +133 -0
- data/spec/unit/core/nil_logger_spec.rb +13 -0
- data/spec/unit/core/project_spec.rb +54 -0
- data/spec/unit/extensions/hash_spec.rb +23 -0
- data/spec/unit/godzilla/goodzilla_spec.rb +78 -0
- data/spec/unit/helpers/csv_helper_spec.rb +22 -0
- data/spec/unit/helpers/data_helper_spec.rb +61 -0
- data/spec/unit/helpers/global_helpers_spec.rb +111 -0
- data/spec/unit/helpers_spec.rb +86 -0
- data/spec/unit/models/blueprint/attributes_spec.rb +29 -0
- data/spec/unit/models/blueprint/dataset_spec.rb +121 -0
- data/spec/unit/models/blueprint/labels_spec.rb +44 -0
- data/spec/unit/models/blueprint/project_blueprint_spec.rb +648 -0
- data/spec/unit/models/blueprint/reference_spec.rb +29 -0
- data/spec/unit/models/blueprint/schema_builder_spec.rb +38 -0
- data/spec/unit/models/blueprint/to_wire_spec.rb +174 -0
- data/spec/unit/models/domain_spec.rb +144 -0
- data/spec/unit/models/execution_spec.rb +108 -0
- data/spec/unit/models/from_wire_spec.rb +296 -0
- data/spec/unit/models/invitation_spec.rb +17 -0
- data/spec/unit/models/membership_spec.rb +132 -0
- data/spec/unit/models/metadata_spec.rb +104 -0
- data/spec/unit/models/metric_spec.rb +117 -0
- data/spec/unit/models/model_spec.rb +82 -0
- data/spec/unit/models/params_spec.rb +118 -0
- data/spec/unit/models/profile_spec.rb +215 -0
- data/spec/unit/models/project_creator_spec.rb +127 -0
- data/spec/unit/models/project_role_spec.rb +94 -0
- data/spec/unit/models/project_spec.rb +162 -0
- data/spec/unit/models/report_result_data_spec.rb +199 -0
- data/spec/unit/models/schedule_spec.rb +418 -0
- data/spec/unit/models/to_manifest_spec.rb +63 -0
- data/spec/unit/models/unit_project_spec.rb +125 -0
- data/spec/unit/models/user_filters_spec.rb +95 -0
- data/spec/unit/models/variable_spec.rb +265 -0
- data/spec/unit/rest/polling_spec.rb +89 -0
- data/spec/unit/rest/resource_spec.rb +10 -0
- data/yard-server.sh +3 -0
- metadata +1125 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
require 'gli'
|
8
|
+
require 'pp'
|
9
|
+
|
10
|
+
require_relative '../helpers/auth_helpers'
|
11
|
+
|
12
|
+
GoodData::CLI.module_eval do
|
13
|
+
pre do |global, _command, _options, _args|
|
14
|
+
require 'logger'
|
15
|
+
GoodData.logger = Logger.new(STDOUT) if global[:l]
|
16
|
+
username = global[:username]
|
17
|
+
password = global[:password]
|
18
|
+
token = global[:token]
|
19
|
+
|
20
|
+
creds = GoodData::Helpers::AuthHelper.read_credentials
|
21
|
+
|
22
|
+
username = creds[:username] if username.nil?
|
23
|
+
password = creds[:password] if password.nil?
|
24
|
+
token = creds[:auth_token] || creds[:token] if token.nil?
|
25
|
+
|
26
|
+
global[:token] = token if global[:token].nil?
|
27
|
+
if global[:login].nil?
|
28
|
+
global[:login] = username
|
29
|
+
global['login'] = username
|
30
|
+
end
|
31
|
+
if global[:password].nil?
|
32
|
+
global[:password] = password
|
33
|
+
global['password'] = password
|
34
|
+
end
|
35
|
+
# Pre logic here
|
36
|
+
# Return true to proceed; false to abort and not call the
|
37
|
+
# chosen command
|
38
|
+
# Use skips_pre before a command to skip this block
|
39
|
+
# on that command only
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
post do |_global, _command, _options, _args|
|
44
|
+
# Post logic here
|
45
|
+
# Use skips_post before a command to skip this
|
46
|
+
# block on that command only
|
47
|
+
end
|
48
|
+
|
49
|
+
on_error do |_exception|
|
50
|
+
# Error logic here
|
51
|
+
# return false to skip default error handling
|
52
|
+
# binding.pry
|
53
|
+
# pp exception.backtrace
|
54
|
+
# pp exception
|
55
|
+
true
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
require 'gli'
|
8
|
+
|
9
|
+
require_relative '../version'
|
10
|
+
require_relative '../core/core'
|
11
|
+
require_relative '../extensions/extensions'
|
12
|
+
require_relative '../exceptions/exceptions'
|
13
|
+
require_relative '../helpers/auth_helpers'
|
14
|
+
|
15
|
+
module GoodData
|
16
|
+
module CLI
|
17
|
+
extend GLI::App
|
18
|
+
|
19
|
+
program_desc 'GoodData Ruby gem - a wrapper over GoodData API and several useful abstractions to make your everyday usage of GoodData easier.'
|
20
|
+
|
21
|
+
version GoodData::VERSION
|
22
|
+
|
23
|
+
desc 'GoodData user name'
|
24
|
+
default_value nil
|
25
|
+
arg_name 'gooddata-login'
|
26
|
+
flag [:U, :username, :login]
|
27
|
+
|
28
|
+
desc 'GoodData password'
|
29
|
+
default_value nil
|
30
|
+
arg_name 'gooddata-password'
|
31
|
+
flag [:P, :password]
|
32
|
+
|
33
|
+
desc 'Project pid'
|
34
|
+
default_value nil
|
35
|
+
arg_name 'project-id'
|
36
|
+
flag [:p, :project_id]
|
37
|
+
|
38
|
+
desc 'Server'
|
39
|
+
default_value GoodData::Helpers::AuthHelper.read_server
|
40
|
+
arg_name 'server'
|
41
|
+
flag [:s, :server]
|
42
|
+
|
43
|
+
desc 'WEBDAV Server. Used for uploads of files'
|
44
|
+
default_value nil
|
45
|
+
arg_name 'web dav server'
|
46
|
+
flag [:w, :webdav_server]
|
47
|
+
|
48
|
+
desc 'Token for project creation'
|
49
|
+
default_value nil
|
50
|
+
arg_name 'token'
|
51
|
+
flag [:t, :token]
|
52
|
+
|
53
|
+
desc 'Verbose mode'
|
54
|
+
arg_name 'verbose'
|
55
|
+
switch [:v, :verbose]
|
56
|
+
|
57
|
+
desc 'Http logger on stdout'
|
58
|
+
arg_name 'logger'
|
59
|
+
switch [:l, :logger]
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
require 'highline'
|
8
|
+
|
9
|
+
# Define GoodData::CLI as GLI Wrapper
|
10
|
+
module GoodData
|
11
|
+
module CLI
|
12
|
+
DEFAULT_TERMINAL = HighLine.new unless const_defined?(:DEFAULT_TERMINAL)
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def terminal
|
16
|
+
DEFAULT_TERMINAL
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
require 'csv'
|
8
|
+
|
9
|
+
require_relative 'version'
|
10
|
+
require_relative 'connection'
|
11
|
+
require_relative 'helpers/helpers'
|
12
|
+
|
13
|
+
# # GoodData API wrapper
|
14
|
+
#
|
15
|
+
# A convenient Ruby wrapper around the GoodData RESTful API.
|
16
|
+
#
|
17
|
+
# The best documentation for the API can be found using these resources:
|
18
|
+
#
|
19
|
+
# * http://developer.gooddata.com/api
|
20
|
+
# * https://secure.gooddata.com/gdc
|
21
|
+
#
|
22
|
+
# ## Usage
|
23
|
+
#
|
24
|
+
# To communicate with the API you first need a personal GoodData account.
|
25
|
+
# [Sign up here](https://secure.gooddata.com/registration.html) if you havent already.
|
26
|
+
#
|
27
|
+
# Now it is just a matter of initializing the GoodData connection via the connect method:
|
28
|
+
#
|
29
|
+
# GoodData.connect 'gooddata_user', 'gooddata_password'
|
30
|
+
#
|
31
|
+
# This GoodData object can now be utalized to retrieve your GoodData profile, the available
|
32
|
+
# projects etc.
|
33
|
+
#
|
34
|
+
# ## Logging
|
35
|
+
#
|
36
|
+
# GoodData.logger = Logger.new(STDOUT)
|
37
|
+
#
|
38
|
+
# For details about the logger options and methods, see the
|
39
|
+
# (Logger module documentation)[http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc].
|
40
|
+
|
41
|
+
require_relative 'core/core'
|
42
|
+
|
43
|
+
module GoodData
|
44
|
+
class << self
|
45
|
+
RELEASE_INFO_PATH = '/gdc/releaseInfo'
|
46
|
+
|
47
|
+
# Initializes required dynamically loaded classes
|
48
|
+
def init_module
|
49
|
+
# Metadata packages, such as report.rb, require this to be loaded first
|
50
|
+
require_relative 'models/metadata.rb'
|
51
|
+
|
52
|
+
# Load models from models folder
|
53
|
+
Dir[File.dirname(__FILE__) + '/models/*.rb'].each { |file| require file }
|
54
|
+
|
55
|
+
# Load collections
|
56
|
+
Dir[File.dirname(__FILE__) + '/collections/*.rb'].each { |file| require file }
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns information about the GoodData API as a Hash (e.g. version, release time etc.)
|
60
|
+
def release_info
|
61
|
+
@release_info ||= @connection.get(RELEASE_INFO_PATH)['release']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Init requires
|
67
|
+
GoodData.init_module
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
require_relative '../exceptions/command_failed'
|
8
|
+
|
9
|
+
module GoodData
|
10
|
+
module Command
|
11
|
+
# Low level access to GoodData API
|
12
|
+
class Api
|
13
|
+
class << self
|
14
|
+
def info
|
15
|
+
json = {
|
16
|
+
'releaseName' => 'N/A',
|
17
|
+
'releaseDate' => 'N/A',
|
18
|
+
'releaseNotesUri' => 'N/A'
|
19
|
+
}
|
20
|
+
|
21
|
+
puts 'GoodData API'
|
22
|
+
puts " Version: #{json['releaseName']}"
|
23
|
+
puts " Released: #{json['releaseDate']}"
|
24
|
+
puts " For more info see #{json['releaseNotesUri']}"
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method :index, :info
|
28
|
+
|
29
|
+
# Test of login
|
30
|
+
def test
|
31
|
+
if GoodData.test_login
|
32
|
+
puts "Succesfully logged in as #{GoodData.profile.user}"
|
33
|
+
else
|
34
|
+
puts 'Unable to log in to GoodData server!'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Get resource
|
39
|
+
# @param path Resource path
|
40
|
+
def get(path)
|
41
|
+
fail(GoodData::CommandFailed, 'Specify the path you want to GET.') if path.nil?
|
42
|
+
result = GoodData.get path
|
43
|
+
begin
|
44
|
+
result
|
45
|
+
rescue
|
46
|
+
puts result
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Delete resource
|
51
|
+
# @param path Resource path
|
52
|
+
def delete(path)
|
53
|
+
fail(GoodData::CommandFailed, 'Specify the path you want to DELETE.') if path.nil?
|
54
|
+
result = GoodData.delete path
|
55
|
+
begin
|
56
|
+
result
|
57
|
+
rescue
|
58
|
+
puts result
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
require 'highline/import'
|
8
|
+
|
9
|
+
require_relative '../cli/terminal'
|
10
|
+
require_relative '../helpers/helpers'
|
11
|
+
|
12
|
+
module GoodData
|
13
|
+
module Command
|
14
|
+
class Auth
|
15
|
+
class << self
|
16
|
+
# Ask for credentials
|
17
|
+
# @param [String] credentials_file_path (credentials_file) Path to .gooddata file
|
18
|
+
# @return [Hash]
|
19
|
+
# * :username [String] Username (email address)
|
20
|
+
# * :password [String] Password
|
21
|
+
# * :auth_token [String] Authorization token
|
22
|
+
# * :environment [String] Environment - DEVELOPMENT, TEST, PRODUCTION
|
23
|
+
# * :server => [String] Server - https://secure.gooddata.com
|
24
|
+
def ask_for_credentials(credentials_file_path = Helpers::AuthHelper.credentials_file)
|
25
|
+
puts 'Enter your GoodData credentials.'
|
26
|
+
|
27
|
+
old_credentials = Helpers::AuthHelper.read_credentials(credentials_file_path)
|
28
|
+
|
29
|
+
# Ask for user email
|
30
|
+
user = GoodData::CLI.terminal.ask('Email') do |q|
|
31
|
+
set_default_value(q, old_credentials[:username])
|
32
|
+
end
|
33
|
+
|
34
|
+
# Ask for password
|
35
|
+
password = GoodData::CLI.terminal.ask('Password') do |q|
|
36
|
+
# set_default_value(q, old_credentials[:password])
|
37
|
+
q.echo = '*'
|
38
|
+
end
|
39
|
+
|
40
|
+
# Ask for token
|
41
|
+
auth_token = GoodData::CLI.terminal.ask('Authorization Token') do |q|
|
42
|
+
set_default_value(q, old_credentials[:auth_token])
|
43
|
+
end
|
44
|
+
|
45
|
+
# Read environment
|
46
|
+
environment = GoodData::CLI.terminal.ask('Environment') do |q|
|
47
|
+
set_default_value(q, old_credentials[:environment], GoodData::Project::DEFAULT_ENVIRONMENT)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Read server
|
51
|
+
server = GoodData::CLI.terminal.ask('Server') do |q|
|
52
|
+
set_default_value(q, old_credentials[:server], 'https://secure.gooddata.com')
|
53
|
+
end
|
54
|
+
|
55
|
+
# Return as struct
|
56
|
+
{
|
57
|
+
:username => user,
|
58
|
+
:password => password,
|
59
|
+
:auth_token => auth_token,
|
60
|
+
:environment => environment,
|
61
|
+
:server => server
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
# Ask for credentials and store them
|
66
|
+
def store(credentials_file_path = Helpers::AuthHelper.credentials_file)
|
67
|
+
puts 'This will store credntials to GoodData in an enencrypted form to your harddrive to file ~/.gooddata.'
|
68
|
+
overwrite = GoodData::CLI.terminal.ask('Do you want to continue? (y/n)')
|
69
|
+
return if overwrite != 'y'
|
70
|
+
|
71
|
+
credentials = ask_for_credentials
|
72
|
+
|
73
|
+
ovewrite = if File.exist?(credentials_file_path)
|
74
|
+
GoodData::CLI.terminal.ask('Overwrite existing stored credentials (y/n)')
|
75
|
+
else
|
76
|
+
'y'
|
77
|
+
end
|
78
|
+
|
79
|
+
if ovewrite == 'y'
|
80
|
+
Helpers::AuthHelper.write_credentials(credentials, credentials_file_path)
|
81
|
+
else
|
82
|
+
puts 'Aborting...'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Delete stored credentials
|
87
|
+
def unstore(credentials_file_path = Helpers::AuthHelper.credentials_file)
|
88
|
+
Helpers::AuthHelper.remove_credentials_file(credentials_file_path)
|
89
|
+
end
|
90
|
+
|
91
|
+
# Conditionally sets default value for prompt.
|
92
|
+
# Default value is set to 'value' or 'default'
|
93
|
+
#
|
94
|
+
# @param [Highline] q Highline instance used
|
95
|
+
# @param [String] value Value used for ask default if not nil and not empty
|
96
|
+
# @param [String] default Value used for ask default iv 'value' is nil or empty
|
97
|
+
def set_default_value(q, value, default = nil)
|
98
|
+
if !value.nil? && !value.empty?
|
99
|
+
q.default = value
|
100
|
+
elsif default
|
101
|
+
q.default = default
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
module GoodData
|
8
|
+
module Command
|
9
|
+
class Base
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
require 'pathname'
|
8
|
+
|
9
|
+
base = Pathname(__FILE__).dirname.expand_path
|
10
|
+
Dir.glob(base + '*.rb').each do |file|
|
11
|
+
require file
|
12
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
6
|
+
|
7
|
+
require 'date'
|
8
|
+
|
9
|
+
require_relative '../data/guesser'
|
10
|
+
require_relative '../extract'
|
11
|
+
require_relative '../exceptions/command_failed'
|
12
|
+
|
13
|
+
module GoodData
|
14
|
+
module Command
|
15
|
+
class Datasets
|
16
|
+
# List all data sets present in the project specified by the --project option
|
17
|
+
#
|
18
|
+
# ## Usage
|
19
|
+
#
|
20
|
+
# gooddata datasets --project <projectid>
|
21
|
+
# gooddata datasets:list --project <projectid>
|
22
|
+
#
|
23
|
+
# * `--project` - GoodData project identifier
|
24
|
+
#
|
25
|
+
def index
|
26
|
+
# TODO: Review following connect replacement/reimplementation
|
27
|
+
# connect
|
28
|
+
with_project do |project_id|
|
29
|
+
Project[project_id].datasets.each do |ds|
|
30
|
+
puts "#{ds.uri}\t#{ds.identifier}\t#{ds.title}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Describe a data set. Currently, only a CSV data set is supported.
|
36
|
+
#
|
37
|
+
# The command prescans the data set, picks possible LDM types for it's
|
38
|
+
# fields and asks user for confirmation.
|
39
|
+
#
|
40
|
+
# ## Usage
|
41
|
+
#
|
42
|
+
# gooddata datasets:describe --file-csv <path> --name <name> --output <output path>
|
43
|
+
#
|
44
|
+
# * `--file-csv` - path to the CSV file (required)
|
45
|
+
# * `--name` - name of the data set (user will be prompted unless provided)
|
46
|
+
# * `--output` - name of the output JSON file with the model description (user will be prompted unless provided)
|
47
|
+
#
|
48
|
+
def describe
|
49
|
+
columns = ask_for_fields
|
50
|
+
name = extract_option('--name') || ask('Enter the dataset name')
|
51
|
+
output = extract_option('--output') || ask('Enter path to the file where to save the model description', :default => "#{name}.json")
|
52
|
+
open output, 'w' do |f|
|
53
|
+
f << JSON.pretty_generate(:title => name, :columns => columns) + "\n"
|
54
|
+
f.flush
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Creates a server-side model based on local model description. The model description
|
59
|
+
# is read from a JSON file that can be generated using the +datasets:describe+ command
|
60
|
+
#
|
61
|
+
# ## Usage
|
62
|
+
#
|
63
|
+
# gooddata datasets:apply --project <projectid> <data set config>
|
64
|
+
#
|
65
|
+
# * `--project`- GoodData project identifier
|
66
|
+
# * `data set config` - JSON file with the model description (possibly generated by the <tt>datasets:describe</tt> command)
|
67
|
+
#
|
68
|
+
def apply
|
69
|
+
# TODO: Review following connect replacement/reimplementation
|
70
|
+
# connect
|
71
|
+
with_project do |project_id|
|
72
|
+
begin
|
73
|
+
cfg_file = args.shift
|
74
|
+
rescue
|
75
|
+
raise(CommandFailed, 'Invalid arguments')
|
76
|
+
end
|
77
|
+
|
78
|
+
fail(CommandFailed, "Usage: #{$PROGRAM_NAME} <dataset config>") unless cfg_file
|
79
|
+
config = begin
|
80
|
+
JSON.load open(cfg_file)
|
81
|
+
rescue
|
82
|
+
raise(CommandFailed, "Error reading dataset config file '#{cfg_file}'")
|
83
|
+
end
|
84
|
+
objects = Project[project_id].add_dataset config['title'], config['columns']
|
85
|
+
puts "Dataset #{config['title']} added to the project, #{objects['uris'].length} metadata objects affected"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# Loads a CSV file into an existing server-side data set
|
90
|
+
#
|
91
|
+
# ## Usage
|
92
|
+
#
|
93
|
+
# gooddata datasets:load --project <projectid> <file> <dataset config><
|
94
|
+
#
|
95
|
+
# * `--project` - GoodData project identifier
|
96
|
+
# * `file` - CSV file to load
|
97
|
+
# * `data set config` - JSON file with the model description (possibly generated by the <tt>datasets:describe</tt> command)
|
98
|
+
#
|
99
|
+
def load
|
100
|
+
# TODO: Review following connect replacement/reimplementation
|
101
|
+
# connect
|
102
|
+
with_project do |project_id|
|
103
|
+
file, cfg_file = args
|
104
|
+
fail(CommandFailed, "Usage: #{$PROGRAM_NAME} datasets:load <file> <dataset config>") unless cfg_file
|
105
|
+
begin
|
106
|
+
config = JSON.load open(cfg_file)
|
107
|
+
rescue
|
108
|
+
raise(CommandFailed, "Error reading dataset config file '#{cfg_file}'")
|
109
|
+
end
|
110
|
+
schema = Model::Schema.new config
|
111
|
+
Project[project_id].upload file, schema
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def with_project
|
118
|
+
unless @project_id
|
119
|
+
@project_id = extract_option('--project')
|
120
|
+
fail(CommandFailed, 'Project not specified, use the --project switch') unless @project_id
|
121
|
+
end
|
122
|
+
yield @project_id
|
123
|
+
end
|
124
|
+
|
125
|
+
def ask_for_fields
|
126
|
+
guesser = GoodData::Data::Guesser.new create_dataset.read
|
127
|
+
guess = guesser.guess(1000)
|
128
|
+
model = []
|
129
|
+
connection_point_set = false
|
130
|
+
question_fmt = 'Select data type of column #%i (%s)'
|
131
|
+
guesser.headers.each_with_index do |header, i|
|
132
|
+
options = guess[header].map(&:to_s)
|
133
|
+
options = options.select { |t| t != :connection_point.to_s } if connection_point_set
|
134
|
+
type = ask((question_fmt % [i + 1, header]), :answers => options)
|
135
|
+
model.push :title => header, :name => header, :type => type.upcase
|
136
|
+
connection_point_set = true if type == :connection_point.to_s
|
137
|
+
end
|
138
|
+
model
|
139
|
+
end
|
140
|
+
|
141
|
+
def create_dataset
|
142
|
+
file = extract_option('--file-csv')
|
143
|
+
return Extract::CsvFile.new(file) if file
|
144
|
+
fail(CommandFailed, 'Unknown data set. Please specify a data set using --file-csv option (more supported data sources to come!)')
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|