gooddata-edge 0.6.27.edge
Sign up to get free protection for your applications and to get access to all the features.
- 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,62 @@
|
|
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
|
+
class DashboardAttachment
|
9
|
+
include GoodData::Mixin::RootKeyGetter
|
10
|
+
include GoodData::Mixin::DataGetter
|
11
|
+
|
12
|
+
attr_reader :scheduled_email
|
13
|
+
attr_accessor :json
|
14
|
+
|
15
|
+
DEFAULT_OPTS = {
|
16
|
+
:allTabs => 1,
|
17
|
+
:tabs => []
|
18
|
+
}
|
19
|
+
|
20
|
+
def initialize(scheduled_email, json)
|
21
|
+
@scheduled_email = scheduled_email
|
22
|
+
@json = json
|
23
|
+
end
|
24
|
+
|
25
|
+
# Get all tabs flag
|
26
|
+
#
|
27
|
+
# @return [Fixnum] All dashboard tabs?
|
28
|
+
def all_tabs
|
29
|
+
data['allTabs']
|
30
|
+
end
|
31
|
+
|
32
|
+
# Set all tabs flag
|
33
|
+
#
|
34
|
+
# @param [String | Fixnum] new_all_tabs New value of all_tabs flag to be set
|
35
|
+
# @return [Fixnum] New value of all_tabs flag
|
36
|
+
def all_tabs=(new_all_tabs)
|
37
|
+
data['allTabs'] = new_all_tabs.to_i
|
38
|
+
end
|
39
|
+
|
40
|
+
# Get selected tabs
|
41
|
+
#
|
42
|
+
# @return [Array<String>] List of selected tabs
|
43
|
+
def tabs
|
44
|
+
data['tabs']
|
45
|
+
end
|
46
|
+
|
47
|
+
# Set selected tabs
|
48
|
+
#
|
49
|
+
# @param [Array<String>] new_tabs New list of selected tabs to be set
|
50
|
+
# @return [Array<String>] New list of selected tabs
|
51
|
+
def tabs=(new_tabs)
|
52
|
+
data['tabs'] = new_tabs
|
53
|
+
end
|
54
|
+
|
55
|
+
# Get attachment URI
|
56
|
+
#
|
57
|
+
# @return [String] Attachment URI
|
58
|
+
def uri
|
59
|
+
data['uri']
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -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
|
+
module GoodData
|
8
|
+
class ReportAttachment
|
9
|
+
include GoodData::Mixin::RootKeyGetter
|
10
|
+
include GoodData::Mixin::DataGetter
|
11
|
+
|
12
|
+
attr_reader :scheduled_email
|
13
|
+
attr_accessor :json
|
14
|
+
|
15
|
+
DEFAULT_OPTS = {
|
16
|
+
:formats => %w(pdf xls),
|
17
|
+
:exportOptions => {
|
18
|
+
:pageOrientation => 'landscape'
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
def initialize(scheduled_email, json)
|
23
|
+
@scheduled_email = scheduled_email
|
24
|
+
@json = json
|
25
|
+
end
|
26
|
+
|
27
|
+
# Get export options settings
|
28
|
+
#
|
29
|
+
# @return [Hash] Export options settings
|
30
|
+
def export_options
|
31
|
+
data['exportOptions']
|
32
|
+
end
|
33
|
+
|
34
|
+
# Set export options settings
|
35
|
+
#
|
36
|
+
# @param [Hash] new_export_options New export options settings to be set
|
37
|
+
# @return [Hash] New export options settings
|
38
|
+
def export_options=(new_export_options)
|
39
|
+
data['exportOptions'] = new_export_options
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get formats
|
43
|
+
#
|
44
|
+
# @return [Array<String>] List of selected formats
|
45
|
+
def formats
|
46
|
+
data['formats']
|
47
|
+
end
|
48
|
+
|
49
|
+
# Set formats
|
50
|
+
#
|
51
|
+
# @param [String | Array<String>] new_formats New list of selected formats to be set
|
52
|
+
# @return [Array<String>] New list of selected formats
|
53
|
+
def formats=(new_formats)
|
54
|
+
data['formats'] = new_formats.is_a?(Array) ? new_formats : [new_formats]
|
55
|
+
end
|
56
|
+
|
57
|
+
# Get attachment URI
|
58
|
+
#
|
59
|
+
# @return [String] Attachment URI
|
60
|
+
def uri
|
61
|
+
data['uri']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,91 @@
|
|
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 '../metadata'
|
8
|
+
|
9
|
+
require_relative 'metadata'
|
10
|
+
|
11
|
+
module GoodData
|
12
|
+
class Variable < MdObject
|
13
|
+
class << self
|
14
|
+
# Method intended to get all objects of that type in a specified project
|
15
|
+
#
|
16
|
+
# @param options [Hash] the options hash
|
17
|
+
# @option options [Boolean] :full if passed true the subclass can decide to pull in full objects. This is desirable from the usability POV but unfortunately has negative impact on performance so it is not the default
|
18
|
+
# @return [Array<GoodData::MdObject> | Array<Hash>] Return the appropriate metadata objects or their representation
|
19
|
+
def all(options = { :client => GoodData.connection, :project => GoodData.project })
|
20
|
+
query('prompt', Variable, options)
|
21
|
+
end
|
22
|
+
|
23
|
+
def create(data, options = { :client => GoodData.connection, :project => GoodData.project })
|
24
|
+
title = data[:title]
|
25
|
+
project = options[:project]
|
26
|
+
c = client(options)
|
27
|
+
attribute = project.attributes(data[:attribute])
|
28
|
+
|
29
|
+
payload = {
|
30
|
+
'prompt' => {
|
31
|
+
'content' => {
|
32
|
+
'attribute' => attribute.uri,
|
33
|
+
'type' => 'filter'
|
34
|
+
},
|
35
|
+
'meta' => {
|
36
|
+
'tags' => '',
|
37
|
+
'deprecated' => '0',
|
38
|
+
'summary' => '',
|
39
|
+
'title' => title,
|
40
|
+
'category' => 'prompt'
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
44
|
+
c.create(self, payload, project: project)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Retrieves variable values
|
49
|
+
#
|
50
|
+
# @return [Array<GoodData::VariableUserFilter>] Values of variable
|
51
|
+
def values
|
52
|
+
payload = {
|
53
|
+
variablesSearch: {
|
54
|
+
variables: [
|
55
|
+
uri
|
56
|
+
],
|
57
|
+
context: []
|
58
|
+
}
|
59
|
+
}
|
60
|
+
client.post("/gdc/md/#{project.pid}/variables/search", payload)['variables'].map { |f| client.create(GoodData::VariableUserFilter, f, project: project) }
|
61
|
+
end
|
62
|
+
|
63
|
+
# Retrieves variable values and returns only those related to user
|
64
|
+
#
|
65
|
+
# @return [Array<GoodData::VariableUserFilter>] Values of variable related to user
|
66
|
+
def user_values
|
67
|
+
values.select { |x| x.level == :user }
|
68
|
+
end
|
69
|
+
|
70
|
+
# Method used for replacing values in their state according to mapping. Can be used to replace any values but it is typically used to replace the URIs. Returns a new object of the same type.
|
71
|
+
#
|
72
|
+
# @param [Array<Array>]Mapping specifying what should be exchanged for what. As mapping should be used output of GoodData::Helpers.prepare_mapping.
|
73
|
+
# @return [GoodData::Variable]
|
74
|
+
def replace(mapping)
|
75
|
+
GoodData::MdObject.replace_quoted(self, mapping)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Retrieves variable values and returns only those related to project
|
79
|
+
#
|
80
|
+
# @return [Array<GoodData::VariableUserFilter>] Values of variable related to project
|
81
|
+
def project_values
|
82
|
+
values.select { |x| x.level == :project }
|
83
|
+
end
|
84
|
+
|
85
|
+
# Deletes all the values and eventually the variable itself
|
86
|
+
def delete
|
87
|
+
values.pmap(&:delete)
|
88
|
+
super
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,282 @@
|
|
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 '../core/rest'
|
8
|
+
|
9
|
+
require_relative 'metadata/metadata'
|
10
|
+
|
11
|
+
require_relative 'links'
|
12
|
+
require_relative 'module_constants'
|
13
|
+
require_relative 'user_filters/user_filters'
|
14
|
+
require_relative 'blueprint/blueprint'
|
15
|
+
|
16
|
+
require 'fileutils'
|
17
|
+
require 'multi_json'
|
18
|
+
require 'open-uri'
|
19
|
+
require 'zip'
|
20
|
+
|
21
|
+
##
|
22
|
+
# Module containing classes that counter-part GoodData server-side meta-data
|
23
|
+
# elements, including the server-side data model.
|
24
|
+
#
|
25
|
+
module GoodData
|
26
|
+
module Model
|
27
|
+
# See https://confluence.intgdc.com/display/plat/Catalog+of+Attribute+Types
|
28
|
+
GD_TYPES = [
|
29
|
+
# Common Types
|
30
|
+
'GDC.link',
|
31
|
+
'GDC.text',
|
32
|
+
'GDC.time',
|
33
|
+
|
34
|
+
# Common Date Attribute Types
|
35
|
+
'GDC.time.year',
|
36
|
+
'GDC.time.quarter',
|
37
|
+
'GDC.time.month',
|
38
|
+
'GDC.time.week',
|
39
|
+
'GDC.time.date',
|
40
|
+
|
41
|
+
# Specific Date Attribute Types
|
42
|
+
'GDC.time.day_in_euweek',
|
43
|
+
'GDC.time.day_in_week',
|
44
|
+
'GDC.time.day_in_month',
|
45
|
+
'GDC.time.day_in_quarter',
|
46
|
+
'GDC.time.day_in_year',
|
47
|
+
'GDC.time.euweek_in_quarter',
|
48
|
+
'GDC.time.week_in_quarter',
|
49
|
+
'GDC.time.euweek_in_year',
|
50
|
+
'GDC.time.week_in_year',
|
51
|
+
'GDC.time.month_in_quarter',
|
52
|
+
'GDC.time.month_in_year',
|
53
|
+
'GDC.time.quarter_in_year',
|
54
|
+
|
55
|
+
# Legacy Date Attribute Types - Possibly Obsolete
|
56
|
+
'GDC.time.dayOfWeek',
|
57
|
+
'GDC.time.dayOfMonth',
|
58
|
+
'GDC.time.dayOfQuarter',
|
59
|
+
'GDC.time.dayOfYear',
|
60
|
+
'GDC.time.weekOfYear',
|
61
|
+
'GDC.time.monthOfYear',
|
62
|
+
'GDC.time.quarterOfYear',
|
63
|
+
|
64
|
+
# Types for Geo
|
65
|
+
'GDC.geo.pin', # Geo pushpin
|
66
|
+
'GDC.geo.ausstates.name', # Australia States (Name)
|
67
|
+
'GDC.geo.ausstates.code', # Australia States (ISO code)
|
68
|
+
'GDC.geo.usstates.name', # US States (Name)
|
69
|
+
'GDC.geo.usstates.geo_id', # US States (US Census ID)
|
70
|
+
'GDC.geo.usstates.code', # US States (2-letter code)
|
71
|
+
'GDC.geo.uscounties.geo_id', # US Counties (US Census ID)
|
72
|
+
'GDC.geo.worldcountries.name', # World countries (Name)
|
73
|
+
'GDC.geo.worldcountries.iso2', # World countries (ISO a2)
|
74
|
+
'GDC.geo.worldcountries.iso3', # World countries (ISO a3)
|
75
|
+
'GDC.geo.czdistricts.name', # Czech Districts (Name)
|
76
|
+
'GDC.geo.czdistricts.name_no_diacritics', # Czech Districts
|
77
|
+
'GDC.geo.czdistricts.nuts4', # Czech Districts (NUTS 4)
|
78
|
+
'GDC.geo.czdistricts.knok', # Czech Districts (KNOK)
|
79
|
+
|
80
|
+
# Day Display Forms
|
81
|
+
'GDC.time.day', # yyyy-MM-dd
|
82
|
+
'GDC.time.day_us', # MM/dd/yyyy
|
83
|
+
'GDC.time.day_eu', # dd/MM/yyyy
|
84
|
+
'GDC.time.day_iso', # dd-MM-yyyy
|
85
|
+
'GDC.time.day_us_long', # EEE, MMM d, yyyy
|
86
|
+
'GDC.time.day_us_noleading', # M/d/yy
|
87
|
+
]
|
88
|
+
|
89
|
+
GD_DATA_TYPES = ['BIGINT', 'DOUBLE', 'INTEGER', 'INT', /^VARCHAR\(\d{1,3}\)$/i, /^DECIMAL\(\d{1,3},\s*\d{1,3}\)$/i]
|
90
|
+
|
91
|
+
DEFAULT_FACT_DATATYPE = 'DECIMAL(12,2)'
|
92
|
+
DEFAULT_ATTRIBUTE_DATATYPE = 'VARCHAR(128)'
|
93
|
+
|
94
|
+
DEFAULT_TYPE = 'GDC.text'
|
95
|
+
|
96
|
+
DEFAULT_DATE_FORMAT = 'MM/dd/yyyy'
|
97
|
+
|
98
|
+
class << self
|
99
|
+
def title(item)
|
100
|
+
item[:title] || GoodData::Helpers.titleize(item[:id])
|
101
|
+
end
|
102
|
+
|
103
|
+
def column_name(item)
|
104
|
+
item[:column_name] || item[:id]
|
105
|
+
end
|
106
|
+
|
107
|
+
def description(item)
|
108
|
+
item[:description]
|
109
|
+
end
|
110
|
+
|
111
|
+
def check_gd_type(value)
|
112
|
+
GD_TYPES.any? { |v| v == value }
|
113
|
+
end
|
114
|
+
|
115
|
+
def check_gd_data_type(value)
|
116
|
+
GD_DATA_TYPES.any? do |v|
|
117
|
+
case v
|
118
|
+
when Regexp
|
119
|
+
v =~ value
|
120
|
+
when String
|
121
|
+
v == (value && value.upcase)
|
122
|
+
else
|
123
|
+
fail 'Unkown predicate'
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def normalize_gd_data_type(type)
|
129
|
+
if type && type.upcase == 'INTEGER'
|
130
|
+
'INT'
|
131
|
+
else
|
132
|
+
type
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# Load given file into a data set described by the given schema
|
137
|
+
def upload_data(path, project_blueprint, dataset, options = { :client => GoodData.connection, :project => GoodData.project })
|
138
|
+
data = [
|
139
|
+
{
|
140
|
+
data: path,
|
141
|
+
dataset: dataset,
|
142
|
+
options: options
|
143
|
+
}
|
144
|
+
]
|
145
|
+
GoodData::Model.upload_multiple_data(data, project_blueprint, options)
|
146
|
+
end
|
147
|
+
|
148
|
+
# Uploads multiple data sets using batch upload interface
|
149
|
+
# @param data [String|Array] Input data
|
150
|
+
# @param project_blueprint [ProjectBlueprint] Project blueprint
|
151
|
+
# @param options [Hash] Additional options
|
152
|
+
# @return [Hash] Batch upload result
|
153
|
+
def upload_multiple_data(data, project_blueprint, options = { :client => GoodData.connection, :project => GoodData.project })
|
154
|
+
client, project = GoodData.get_client_and_project(options)
|
155
|
+
|
156
|
+
project ||= GoodData.project
|
157
|
+
|
158
|
+
manifest = {
|
159
|
+
|
160
|
+
'dataSetSLIManifestList' => data.map do |d|
|
161
|
+
mode = d[:options] && d[:options][:mode] ? d[:options][:mode] : options[:mode] || 'FULL'
|
162
|
+
GoodData::Model::ToManifest.dataset_to_manifest(project_blueprint, d[:dataset], mode)
|
163
|
+
end
|
164
|
+
}
|
165
|
+
|
166
|
+
csv_headers = []
|
167
|
+
|
168
|
+
# create a temporary zip file
|
169
|
+
dir = Dir.mktmpdir
|
170
|
+
begin
|
171
|
+
Zip::File.open("#{dir}/upload.zip", Zip::File::CREATE) do |zip|
|
172
|
+
# TODO: make sure schema columns match CSV column names
|
173
|
+
zip.get_output_stream('upload_info.json') { |f| f.puts JSON.pretty_generate(manifest) }
|
174
|
+
|
175
|
+
data.zip(manifest['dataSetSLIManifestList']).each do |item|
|
176
|
+
path = item[0][:data]
|
177
|
+
path = item[0][:data].path if item[0][:data].respond_to? :path
|
178
|
+
inline_data = !path.is_a?(String)
|
179
|
+
csv_header = nil
|
180
|
+
|
181
|
+
filename = item[1]['dataSetSLIManifest']['file']
|
182
|
+
|
183
|
+
if inline_data
|
184
|
+
csv_header = path.first
|
185
|
+
zip.get_output_stream(filename) do |f|
|
186
|
+
path.each do |row|
|
187
|
+
f.puts row.to_csv
|
188
|
+
end
|
189
|
+
end
|
190
|
+
else
|
191
|
+
csv_header = File.open(path, &:gets).split(',')
|
192
|
+
zip.add(filename, path)
|
193
|
+
end
|
194
|
+
|
195
|
+
csv_headers << csv_header
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
# upload it
|
200
|
+
client.upload_to_user_webdav("#{dir}/upload.zip", :directory => File.basename(dir), :client => options[:client], :project => options[:project])
|
201
|
+
ensure
|
202
|
+
FileUtils.rm_rf dir
|
203
|
+
end
|
204
|
+
csv_headers.flatten!
|
205
|
+
|
206
|
+
# kick the load
|
207
|
+
pull = { 'pullIntegration' => File.basename(dir) }
|
208
|
+
link = project.md.links('etl')['pull2']
|
209
|
+
|
210
|
+
# TODO: List uploaded datasets
|
211
|
+
task = client.post(link, pull, :info_message => 'Starting the data load from user storage to dataset.')
|
212
|
+
|
213
|
+
res = client.poll_on_response(task['pull2Task']['links']['poll'], :info_message => 'Getting status of the dataload task.') do |body|
|
214
|
+
body['wTaskStatus']['status'] == 'RUNNING' || body['wTaskStatus']['status'] == 'PREPARED'
|
215
|
+
end
|
216
|
+
|
217
|
+
if res['wTaskStatus']['status'] == 'ERROR'
|
218
|
+
s = StringIO.new
|
219
|
+
|
220
|
+
messages = res['wTaskStatus']['messages'] || []
|
221
|
+
messages.each do |msg|
|
222
|
+
GoodData.logger.error(JSON.pretty_generate(msg))
|
223
|
+
end
|
224
|
+
|
225
|
+
begin
|
226
|
+
client.download_from_user_webdav(File.basename(dir) + '/upload_status.json', s, :client => client, :project => project)
|
227
|
+
rescue => e
|
228
|
+
raise "Unable to download upload_status.json from remote server, reason: #{e.message}"
|
229
|
+
end
|
230
|
+
|
231
|
+
js = MultiJson.load(s.string)
|
232
|
+
manifests = manifest['dataSetSLIManifestList'].map do |m|
|
233
|
+
m['dataSetSLIManifest']
|
234
|
+
end
|
235
|
+
|
236
|
+
parts = manifests.map do |m|
|
237
|
+
m['parts']
|
238
|
+
end
|
239
|
+
|
240
|
+
manifest_cols = parts.flatten.map { |c| c['columnName'] }
|
241
|
+
|
242
|
+
# extract some human readable error message from the webdav file
|
243
|
+
manifest_extra = manifest_cols - csv_headers
|
244
|
+
csv_extra = csv_headers - manifest_cols
|
245
|
+
|
246
|
+
error_message = begin
|
247
|
+
js['error']['message'] % js['error']['parameters']
|
248
|
+
rescue NoMethodError, ArgumentError
|
249
|
+
''
|
250
|
+
end
|
251
|
+
m = "Load failed with error '#{error_message}'.\n"
|
252
|
+
m += "Columns that should be there (manifest) but aren't in uploaded csv: #{manifest_extra}\n" unless manifest_extra.empty?
|
253
|
+
m += "Columns that are in csv but shouldn't be there (manifest): #{csv_extra}\n" unless csv_extra.empty?
|
254
|
+
m += "Columns in the uploaded csv: #{csv_headers}\n"
|
255
|
+
m += "Columns in the manifest: #{manifest_cols}\n"
|
256
|
+
m += "Original message:\n#{JSON.pretty_generate(js)}\n"
|
257
|
+
m += "Manifest used for uploading:\n#{JSON.pretty_generate(manifest)}"
|
258
|
+
fail m
|
259
|
+
end
|
260
|
+
|
261
|
+
res
|
262
|
+
end
|
263
|
+
|
264
|
+
def merge_dataset_columns(a_schema_blueprint, b_schema_blueprint)
|
265
|
+
a_schema_blueprint = a_schema_blueprint.to_hash
|
266
|
+
b_schema_blueprint = b_schema_blueprint.to_hash
|
267
|
+
d = GoodData::Helpers.deep_dup(a_schema_blueprint)
|
268
|
+
d[:columns] = d[:columns] + b_schema_blueprint[:columns]
|
269
|
+
d[:columns].uniq!
|
270
|
+
columns_that_failed_to_merge = d[:columns].group_by { |x| [:reference, :date].include?(x[:type]) ? x[:dataset] : x[:id] }.map { |k, v| [k, v.count, v] }.select { |x| x[1] > 1 }
|
271
|
+
unless columns_that_failed_to_merge.empty?
|
272
|
+
columns_that_failed_to_merge.each do |error|
|
273
|
+
GoodData.logger.error "Columns #{error[0]} failed to merge. There are #{error[1]} conflicting columns. When merging columns with the same name they have to be identical."
|
274
|
+
GoodData.logger.error error[2]
|
275
|
+
end
|
276
|
+
fail "Columns #{columns_that_failed_to_merge.first} failed to merge. There are #{columns_that_failed_to_merge[1]} conflicting columns. #{columns_that_failed_to_merge[2]} When merging columns with the same name they have to be identical." unless columns_that_failed_to_merge.empty?
|
277
|
+
end
|
278
|
+
d
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|