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,518 @@
|
|
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 '../rest/resource'
|
8
|
+
require_relative '../extensions/hash'
|
9
|
+
require_relative '../mixins/rest_resource'
|
10
|
+
require_relative '../helpers/global_helpers'
|
11
|
+
|
12
|
+
require_relative 'execution'
|
13
|
+
|
14
|
+
module GoodData
|
15
|
+
class Schedule < Rest::Resource
|
16
|
+
attr_reader :dirty, :json
|
17
|
+
|
18
|
+
SCHEDULE_TEMPLATE = {
|
19
|
+
:schedule => {
|
20
|
+
:type => nil,
|
21
|
+
:timezone => nil,
|
22
|
+
:params => {},
|
23
|
+
:hiddenParams => {},
|
24
|
+
# :reschedule => nil
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
class << self
|
29
|
+
# Looks for schedule
|
30
|
+
# @param id [String] URL, ID of schedule or :all
|
31
|
+
# @return [GoodData::Schedule|Array<GoodData::Schedule>] List of schedules
|
32
|
+
def [](id, opts = { :client => GoodData.connection, :project => GoodData.project })
|
33
|
+
c, project = GoodData.get_client_and_project(opts)
|
34
|
+
|
35
|
+
if id == :all
|
36
|
+
GoodData::Schedule.all(opts)
|
37
|
+
else
|
38
|
+
if id =~ %r{\/gdc\/projects\/[a-zA-Z\d]+\/schedules\/?[a-zA-Z\d]*}
|
39
|
+
url = id
|
40
|
+
tmp = c.get url
|
41
|
+
return c.create(GoodData::Schedule, tmp)
|
42
|
+
end
|
43
|
+
|
44
|
+
tmp = c.get "/gdc/projects/#{project.pid}/schedules/#{id}"
|
45
|
+
c.create(GoodData::Schedule, tmp, project: project)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns list of all schedules for active project
|
50
|
+
# @return [Array<GoodData::Schedule>] List of schedules
|
51
|
+
def all(opts = { :client => GoodData.connection, :project => GoodData.project })
|
52
|
+
c, project = GoodData.get_client_and_project(opts)
|
53
|
+
|
54
|
+
tmp = c.get "/gdc/projects/#{project.pid}/schedules"
|
55
|
+
tmp['schedules']['items'].map { |schedule| c.create(GoodData::Schedule, schedule, project: project) }
|
56
|
+
end
|
57
|
+
|
58
|
+
# Creates new schedules from parameters passed
|
59
|
+
#
|
60
|
+
# @param process_id [String] Process ID
|
61
|
+
# @param trigger [String|GoodData::Schedule] Trigger of schedule. Can be cron string or reference to another schedule.
|
62
|
+
# @param executable [String] Execution executable
|
63
|
+
# @param options [Hash] Optional options
|
64
|
+
# @return [GoodData::Schedule] New GoodData::Schedule instance
|
65
|
+
def create(process_id, trigger, executable, options = {})
|
66
|
+
c, project = GoodData.get_client_and_project(options)
|
67
|
+
|
68
|
+
fail 'Process ID has to be provided' if process_id.blank?
|
69
|
+
fail 'Executable has to be provided' if executable.blank?
|
70
|
+
fail 'Trigger schedule has to be provided' if trigger.blank?
|
71
|
+
|
72
|
+
schedule = c.create(GoodData::Schedule, GoodData::Helpers.deep_stringify_keys(GoodData::Helpers.deep_dup(SCHEDULE_TEMPLATE)), client: c, project: project)
|
73
|
+
|
74
|
+
default_opts = {
|
75
|
+
:type => 'MSETL',
|
76
|
+
:timezone => 'UTC',
|
77
|
+
:state => 'ENABLED',
|
78
|
+
:params => {
|
79
|
+
'PROCESS_ID' => process_id,
|
80
|
+
'EXECUTABLE' => executable
|
81
|
+
},
|
82
|
+
# :reschedule => nil
|
83
|
+
}
|
84
|
+
|
85
|
+
schedule.name = options[:name]
|
86
|
+
schedule.set_trigger(trigger)
|
87
|
+
schedule.params = default_opts[:params].merge(options[:params] || {})
|
88
|
+
schedule.hidden_params = options[:hidden_params] || {}
|
89
|
+
schedule.timezone = options[:timezone] || default_opts[:timezone]
|
90
|
+
schedule.state = options[:state] || default_opts[:state]
|
91
|
+
schedule.schedule_type = options[:type] || default_opts[:type]
|
92
|
+
schedule.reschedule = options[:reschedule] if options[:reschedule]
|
93
|
+
schedule
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# Initializes object from raw json
|
98
|
+
#
|
99
|
+
# @param json [Object] Raw JSON
|
100
|
+
# @return [GoodData::Schedule] New GoodData::Schedule instance
|
101
|
+
def initialize(json)
|
102
|
+
json = GoodData::Helpers.deep_stringify_keys(json)
|
103
|
+
super
|
104
|
+
@json = json
|
105
|
+
self.params = GoodData::Helpers.decode_params(json['schedule']['params'] || {})
|
106
|
+
self.hidden_params = GoodData::Helpers.decode_params(json['schedule']['hiddenParams'] || {})
|
107
|
+
end
|
108
|
+
|
109
|
+
def after
|
110
|
+
project.schedules(trigger_id)
|
111
|
+
end
|
112
|
+
|
113
|
+
def after=(schedule)
|
114
|
+
fail 'After trigger has to be a schedule object' unless schedule.is_a?(Schedule)
|
115
|
+
json['schedule']['triggerScheduleId'] = schedule.obj_id
|
116
|
+
@json['schedule']['cron'] = nil
|
117
|
+
@dirty = true
|
118
|
+
end
|
119
|
+
|
120
|
+
# Deletes schedule
|
121
|
+
def delete
|
122
|
+
saved? ? client.delete(uri) : nil
|
123
|
+
end
|
124
|
+
|
125
|
+
# Is schedule enabled?
|
126
|
+
#
|
127
|
+
# @return [GoodData::Schedule]
|
128
|
+
def disable
|
129
|
+
@json['schedule']['state'] = 'DISABLED'
|
130
|
+
@dirty = true
|
131
|
+
self
|
132
|
+
end
|
133
|
+
|
134
|
+
# Is schedule enabled?
|
135
|
+
#
|
136
|
+
# @return [Boolean]
|
137
|
+
def disable!
|
138
|
+
disable
|
139
|
+
save
|
140
|
+
end
|
141
|
+
|
142
|
+
# Is schedule disabled?
|
143
|
+
#
|
144
|
+
# @return [Boolean]
|
145
|
+
def disabled?
|
146
|
+
state == 'DISABLED'
|
147
|
+
end
|
148
|
+
|
149
|
+
# Is schedule enabled?
|
150
|
+
#
|
151
|
+
# @return [Boolean]
|
152
|
+
def enabled?
|
153
|
+
!disabled?
|
154
|
+
end
|
155
|
+
|
156
|
+
# Enables the schedule
|
157
|
+
#
|
158
|
+
# @return [GoodData::Schedule]
|
159
|
+
def enable
|
160
|
+
@json['schedule']['state'] = 'ENABLED'
|
161
|
+
@dirty = true
|
162
|
+
self
|
163
|
+
end
|
164
|
+
|
165
|
+
# Enables and saves the schedule
|
166
|
+
#
|
167
|
+
# @return [GoodData::Schedule]
|
168
|
+
def enable!
|
169
|
+
enable
|
170
|
+
save
|
171
|
+
end
|
172
|
+
|
173
|
+
# Executes schedule
|
174
|
+
#
|
175
|
+
# @param [Hash] opts execution options.
|
176
|
+
# @option opts [Boolean] :wait Wait for execution result
|
177
|
+
# @return [Object] Raw Response
|
178
|
+
def execute(opts = {})
|
179
|
+
return nil unless saved?
|
180
|
+
opts = { :wait => true }.merge(opts)
|
181
|
+
data = {
|
182
|
+
:execution => {}
|
183
|
+
}
|
184
|
+
res = client.post(execution_url, data)
|
185
|
+
execution = client.create(GoodData::Execution, res, client: client, project: project)
|
186
|
+
|
187
|
+
return execution unless opts[:wait]
|
188
|
+
execution.wait_for_result(opts)
|
189
|
+
end
|
190
|
+
|
191
|
+
# Returns execution URL
|
192
|
+
#
|
193
|
+
# @return [String] Executions URL
|
194
|
+
def execution_url
|
195
|
+
saved? ? @json['schedule']['links']['executions'] : nil
|
196
|
+
end
|
197
|
+
|
198
|
+
# Returns execution state
|
199
|
+
#
|
200
|
+
# @return [String] Execution state
|
201
|
+
def state
|
202
|
+
@json['schedule']['state']
|
203
|
+
end
|
204
|
+
|
205
|
+
def state=(a_state)
|
206
|
+
@json['schedule']['state'] = a_state
|
207
|
+
end
|
208
|
+
|
209
|
+
# Returns execution timezone
|
210
|
+
#
|
211
|
+
# @return [String] Execution timezone
|
212
|
+
def timezone
|
213
|
+
@json['schedule']['timezone']
|
214
|
+
end
|
215
|
+
|
216
|
+
# Assigns execution timezone
|
217
|
+
#
|
218
|
+
# @param new_timezone [String] Timezone to be set
|
219
|
+
def timezone=(new_timezone)
|
220
|
+
@json['schedule']['timezone'] = new_timezone
|
221
|
+
@dirty = true
|
222
|
+
end
|
223
|
+
|
224
|
+
# Returns execution type
|
225
|
+
#
|
226
|
+
# @return [String] Execution type
|
227
|
+
def type
|
228
|
+
@json['schedule']['type']
|
229
|
+
end
|
230
|
+
|
231
|
+
# Assigns execution type
|
232
|
+
#
|
233
|
+
# @param new_type [String] Execution type to be set
|
234
|
+
def type=(new_type)
|
235
|
+
@json['schedule']['type'] = new_type
|
236
|
+
@dirty = true
|
237
|
+
end
|
238
|
+
|
239
|
+
# Returns execution cron settings
|
240
|
+
#
|
241
|
+
# @return [String] Cron settings
|
242
|
+
def cron
|
243
|
+
@json['schedule']['cron']
|
244
|
+
end
|
245
|
+
|
246
|
+
# Assigns execution cron settings
|
247
|
+
#
|
248
|
+
# @param new_cron [String] Cron settings to be set
|
249
|
+
def cron=(new_cron)
|
250
|
+
@json['schedule']['cron'] = new_cron
|
251
|
+
@json['schedule']['triggerScheduleId'] = nil
|
252
|
+
@dirty = true
|
253
|
+
end
|
254
|
+
|
255
|
+
# Returns reschedule settings
|
256
|
+
#
|
257
|
+
# @return [Integer] Reschedule settings
|
258
|
+
def reschedule
|
259
|
+
@json['schedule']['reschedule']
|
260
|
+
end
|
261
|
+
|
262
|
+
# Assigns execution reschedule settings
|
263
|
+
#
|
264
|
+
# @param new_reschedule [Integer] Reschedule settings to be set
|
265
|
+
def reschedule=(new_reschedule)
|
266
|
+
@json['schedule']['reschedule'] = new_reschedule
|
267
|
+
@dirty = true
|
268
|
+
end
|
269
|
+
|
270
|
+
# Returns execution process related to this schedule
|
271
|
+
#
|
272
|
+
# @return [GoodData::Process] Process ID
|
273
|
+
def process
|
274
|
+
project.processes(process_id)
|
275
|
+
end
|
276
|
+
|
277
|
+
# Returns execution process ID
|
278
|
+
#
|
279
|
+
# @return [String] Process ID
|
280
|
+
def process_id
|
281
|
+
@json['schedule']['params']['PROCESS_ID']
|
282
|
+
end
|
283
|
+
|
284
|
+
def process_id=(new_project_id)
|
285
|
+
@json['schedule']['params']['PROCESS_ID'] = new_project_id
|
286
|
+
@dirty = true
|
287
|
+
end
|
288
|
+
|
289
|
+
# Returns execution executable
|
290
|
+
#
|
291
|
+
# @return [String] Executable (graph) name
|
292
|
+
def executable
|
293
|
+
@json['schedule']['params']['EXECUTABLE']
|
294
|
+
end
|
295
|
+
|
296
|
+
# Assigns execution executable
|
297
|
+
#
|
298
|
+
# @param new_executable [String] Executable to be set.
|
299
|
+
def executable=(new_executable)
|
300
|
+
@json['schedule']['params']['EXECUTABLE'] = new_executable
|
301
|
+
@dirty = true
|
302
|
+
end
|
303
|
+
|
304
|
+
# Returns enumerator of executions
|
305
|
+
#
|
306
|
+
# @return [Array] Raw Executions JSON
|
307
|
+
def executions
|
308
|
+
return nil unless @json
|
309
|
+
url = @json['schedule']['links']['executions']
|
310
|
+
Enumerator.new do |y|
|
311
|
+
loop do
|
312
|
+
res = client.get url
|
313
|
+
res['executions']['paging']['next']
|
314
|
+
res['executions']['items'].each do |execution|
|
315
|
+
y << client.create(Execution, execution, :project => project)
|
316
|
+
end
|
317
|
+
url = res['executions']['paging']['next']
|
318
|
+
break unless url
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
# Returns hidden_params as Hash
|
324
|
+
#
|
325
|
+
# @return [Hash] Hidden Parameters
|
326
|
+
def hidden_params
|
327
|
+
@json['schedule']['hiddenParams']
|
328
|
+
end
|
329
|
+
|
330
|
+
# Updates params by merging the current params with new ones
|
331
|
+
#
|
332
|
+
# @param params_to_merge [Hash] params
|
333
|
+
# @return [GoodData::Schedule] Returns self
|
334
|
+
def update_params(params_to_merge)
|
335
|
+
params_to_merge.each do |k, v|
|
336
|
+
set_parameter(k, v)
|
337
|
+
end
|
338
|
+
@dirty = true
|
339
|
+
self
|
340
|
+
end
|
341
|
+
|
342
|
+
# Updates hidden params by merging the current params with new ones
|
343
|
+
#
|
344
|
+
# @param params_to_merge [Hash] params
|
345
|
+
# @return [GoodData::Schedule] Returns self
|
346
|
+
def update_hidden_params(params_to_merge)
|
347
|
+
params_to_merge.each do |k, v|
|
348
|
+
set_hidden_parameter(k, v)
|
349
|
+
end
|
350
|
+
@dirty = true
|
351
|
+
self
|
352
|
+
end
|
353
|
+
|
354
|
+
# Assigns hidden parameters
|
355
|
+
#
|
356
|
+
# @param new_hidden_param [String] Hidden parameters to be set
|
357
|
+
def hidden_params=(new_hidden_params = {})
|
358
|
+
@json['schedule']['hiddenParams'] = new_hidden_params
|
359
|
+
@dirty = true
|
360
|
+
self
|
361
|
+
end
|
362
|
+
|
363
|
+
# Returns params as Hash
|
364
|
+
#
|
365
|
+
# @return [Hash] Parameters
|
366
|
+
def params
|
367
|
+
@json['schedule']['params']
|
368
|
+
end
|
369
|
+
|
370
|
+
# Assigns execution parameters
|
371
|
+
#
|
372
|
+
# @param params [String] Params to be set
|
373
|
+
def params=(new_params = {})
|
374
|
+
default_params = {
|
375
|
+
'PROCESS_ID' => process_id,
|
376
|
+
'EXECUTABLE' => executable
|
377
|
+
}
|
378
|
+
@json['schedule']['params'] = default_params.merge(new_params)
|
379
|
+
@dirty = true
|
380
|
+
self
|
381
|
+
end
|
382
|
+
|
383
|
+
# Saves object if dirty
|
384
|
+
#
|
385
|
+
# @return [Boolean] True if saved
|
386
|
+
def save
|
387
|
+
fail 'trigger schedule has to be provided' if cron.blank? && trigger_id.blank?
|
388
|
+
fail 'A timezone has to be provided' if timezone.blank?
|
389
|
+
fail 'Schedule type has to be provided' if schedule_type.blank?
|
390
|
+
if @dirty
|
391
|
+
if saved?
|
392
|
+
res = client.put(uri, to_update_payload)
|
393
|
+
@json = Schedule.new(res).json
|
394
|
+
else
|
395
|
+
res = client.post "/gdc/projects/#{project.pid}/schedules", to_update_payload
|
396
|
+
fail 'Unable to create new schedule' if res.nil?
|
397
|
+
new_obj_json = client.get res['schedule']['links']['self']
|
398
|
+
@json = Schedule.new(new_obj_json).json
|
399
|
+
end
|
400
|
+
@dirty = false
|
401
|
+
end
|
402
|
+
self
|
403
|
+
end
|
404
|
+
|
405
|
+
# Updates params at key k with val v
|
406
|
+
#
|
407
|
+
# @param k [String] key
|
408
|
+
# @param v [Object] value
|
409
|
+
# @return [GoodData::Schedule] Returns self
|
410
|
+
def set_parameter(k, v)
|
411
|
+
params[k] = v
|
412
|
+
@dirty = true
|
413
|
+
self
|
414
|
+
end
|
415
|
+
|
416
|
+
# Updates hidden params at key k with val v
|
417
|
+
#
|
418
|
+
# @param k [String] key
|
419
|
+
# @param v [Object] value
|
420
|
+
# @return [GoodData::Schedule] Returns self
|
421
|
+
def set_hidden_parameter(k, v)
|
422
|
+
hidden_params[k] = v
|
423
|
+
@dirty = true
|
424
|
+
self
|
425
|
+
end
|
426
|
+
|
427
|
+
def schedule_type
|
428
|
+
json['schedule']['type']
|
429
|
+
end
|
430
|
+
|
431
|
+
def schedule_type=(type)
|
432
|
+
json['schedule']['type'] = type
|
433
|
+
@dirty = true
|
434
|
+
self
|
435
|
+
end
|
436
|
+
|
437
|
+
def time_based?
|
438
|
+
cron != nil
|
439
|
+
end
|
440
|
+
|
441
|
+
def to_hash
|
442
|
+
{
|
443
|
+
name: name,
|
444
|
+
type: type,
|
445
|
+
state: state,
|
446
|
+
params: params,
|
447
|
+
hidden_params: hidden_params,
|
448
|
+
cron: cron,
|
449
|
+
trigger_id: trigger_id,
|
450
|
+
timezone: timezone,
|
451
|
+
uri: uri,
|
452
|
+
reschedule: reschedule,
|
453
|
+
executable: executable,
|
454
|
+
process_id: process_id
|
455
|
+
}
|
456
|
+
end
|
457
|
+
|
458
|
+
def trigger_id
|
459
|
+
json['schedule']['triggerScheduleId']
|
460
|
+
end
|
461
|
+
|
462
|
+
def trigger_id=(a_trigger)
|
463
|
+
json['schedule']['triggerScheduleId'] = a_trigger
|
464
|
+
@dirty = true
|
465
|
+
self
|
466
|
+
end
|
467
|
+
|
468
|
+
def name
|
469
|
+
json['schedule']['name']
|
470
|
+
end
|
471
|
+
|
472
|
+
def name=(name)
|
473
|
+
json['schedule']['name'] = name
|
474
|
+
@dirty = true
|
475
|
+
self
|
476
|
+
end
|
477
|
+
|
478
|
+
def set_trigger(trigger) # rubocop:disable Style/AccessorMethodName
|
479
|
+
if trigger.is_a?(String) && trigger =~ /[a-fA-Z0-9]{24}/
|
480
|
+
self.trigger_id = trigger
|
481
|
+
elsif trigger.is_a?(GoodData::Schedule)
|
482
|
+
self.trigger_id = trigger.obj_id
|
483
|
+
else
|
484
|
+
self.cron = trigger
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
# Returns URL
|
489
|
+
#
|
490
|
+
# @return [String] Schedule URL
|
491
|
+
def uri
|
492
|
+
@json['schedule']['links']['self'] if @json && @json['schedule'] && @json['schedule']['links']
|
493
|
+
end
|
494
|
+
|
495
|
+
def ==(other)
|
496
|
+
other.respond_to?(:uri) && other.uri == uri && other.respond_to?(:to_hash) && other.to_hash == to_hash
|
497
|
+
end
|
498
|
+
|
499
|
+
def to_update_payload
|
500
|
+
res = {
|
501
|
+
'schedule' => {
|
502
|
+
'name' => name,
|
503
|
+
'type' => type,
|
504
|
+
'state' => state,
|
505
|
+
'timezone' => timezone,
|
506
|
+
'cron' => cron,
|
507
|
+
'triggerScheduleId' => trigger_id,
|
508
|
+
'params' => GoodData::Helpers.encode_public_params(params),
|
509
|
+
'hiddenParams' => GoodData::Helpers.encode_hidden_params(hidden_params)
|
510
|
+
}
|
511
|
+
}
|
512
|
+
|
513
|
+
res['schedule']['reschedule'] = reschedule if reschedule
|
514
|
+
|
515
|
+
res
|
516
|
+
end
|
517
|
+
end
|
518
|
+
end
|