gooddata 0.6.49 → 0.6.50
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 +4 -4
- data/CHANGELOG.md +15 -4
- data/CLI.md +0 -4
- data/DEPENDENCIES.md +0 -8
- data/Dockerfile.jruby +19 -0
- data/Dockerfile.ruby +19 -0
- data/LICENSE +2 -2
- data/LICENSE.rb +1 -1
- data/Rakefile +1 -1
- data/gooddata.gemspec +29 -28
- data/lib/gooddata.rb +2 -1
- data/lib/gooddata/app/app.rb +1 -1
- data/lib/gooddata/bricks/base_downloader.rb +1 -1
- data/lib/gooddata/bricks/brick.rb +3 -4
- data/lib/gooddata/bricks/bricks.rb +3 -1
- data/lib/gooddata/bricks/middleware/aws_middleware.rb +6 -8
- data/lib/gooddata/bricks/middleware/base_middleware.rb +2 -1
- data/lib/gooddata/bricks/middleware/bench_middleware.rb +2 -1
- data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +3 -3
- data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +3 -2
- data/lib/gooddata/bricks/middleware/dwh_middleware.rb +28 -0
- data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +2 -2
- data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +2 -2
- data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +84 -21
- data/lib/gooddata/bricks/middleware/logger_middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/params_inspect_middleware.rb +21 -0
- data/lib/gooddata/bricks/middleware/restforce_middleware.rb +26 -26
- data/lib/gooddata/bricks/middleware/stdout_middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/twitter_middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +1 -1
- data/lib/gooddata/bricks/pipeline.rb +6 -13
- data/lib/gooddata/bricks/utils.rb +3 -3
- data/lib/gooddata/cli/cli.rb +1 -1
- data/lib/gooddata/cli/commands/auth_cmd.rb +1 -1
- data/lib/gooddata/cli/commands/domain_cmd.rb +1 -1
- data/lib/gooddata/cli/commands/project_cmd.rb +1 -18
- data/lib/gooddata/cli/hooks.rb +1 -2
- data/lib/gooddata/cli/shared.rb +1 -1
- data/lib/gooddata/cli/terminal.rb +1 -1
- data/lib/gooddata/client.rb +1 -1
- data/lib/gooddata/commands/api.rb +1 -1
- data/lib/gooddata/commands/auth.rb +1 -1
- data/lib/gooddata/commands/base.rb +1 -1
- data/lib/gooddata/commands/commands.rb +1 -1
- data/lib/gooddata/commands/datasets.rb +1 -1
- data/lib/gooddata/commands/datawarehouse.rb +1 -1
- data/lib/gooddata/commands/domain.rb +1 -1
- data/lib/gooddata/commands/process.rb +1 -1
- data/lib/gooddata/commands/project.rb +2 -31
- data/lib/gooddata/commands/projects.rb +1 -1
- data/lib/gooddata/commands/role.rb +1 -1
- data/lib/gooddata/commands/runners.rb +1 -1
- data/lib/gooddata/commands/scaffold.rb +1 -1
- data/lib/gooddata/commands/user.rb +1 -1
- data/lib/gooddata/connection.rb +1 -1
- data/lib/gooddata/core/core.rb +1 -1
- data/lib/gooddata/core/logging.rb +1 -1
- data/lib/gooddata/core/nil_logger.rb +1 -1
- data/lib/gooddata/core/project.rb +1 -1
- data/lib/gooddata/core/rest.rb +1 -1
- data/lib/gooddata/core/user.rb +1 -1
- data/lib/gooddata/data/data.rb +1 -1
- data/lib/gooddata/data/guesser.rb +1 -1
- data/lib/gooddata/exceptions/attr_element_not_found.rb +1 -1
- data/lib/gooddata/exceptions/command_failed.rb +1 -1
- data/lib/gooddata/exceptions/exceptions.rb +1 -1
- data/lib/gooddata/exceptions/execution_limit_exceeded.rb +1 -1
- data/lib/gooddata/exceptions/export_clone.rb +4 -0
- data/lib/gooddata/exceptions/filter_maqlization.rb +1 -1
- data/lib/gooddata/exceptions/import_clone.rb +4 -0
- data/lib/gooddata/exceptions/malformed_user.rb +1 -1
- data/lib/gooddata/exceptions/maql_execution.rb +1 -1
- data/lib/gooddata/exceptions/no_project_error.rb +1 -1
- data/lib/gooddata/exceptions/object_migration.rb +1 -1
- data/lib/gooddata/exceptions/project_not_found.rb +1 -1
- data/lib/gooddata/exceptions/segment_not_empty.rb +1 -1
- data/lib/gooddata/exceptions/uncomputable_report.rb +1 -1
- data/lib/gooddata/exceptions/user_in_different_domain.rb +1 -1
- data/lib/gooddata/exceptions/validation_error.rb +1 -1
- data/lib/gooddata/extensions/big_decimal.rb +1 -1
- data/lib/gooddata/extensions/class.rb +11 -0
- data/lib/gooddata/extensions/enumerable.rb +1 -1
- data/lib/gooddata/extensions/extensions.rb +1 -1
- data/lib/gooddata/extensions/false.rb +9 -1
- data/lib/gooddata/extensions/hash.rb +12 -1
- data/lib/gooddata/extensions/integer.rb +5 -0
- data/lib/gooddata/extensions/nil.rb +5 -1
- data/lib/gooddata/extensions/numeric.rb +1 -1
- data/lib/gooddata/extensions/object.rb +5 -1
- data/lib/gooddata/extensions/symbol.rb +1 -1
- data/lib/gooddata/extensions/true.rb +9 -1
- data/lib/gooddata/extract.rb +1 -1
- data/lib/gooddata/goodzilla/goodzilla.rb +1 -1
- data/lib/gooddata/helpers/auth_helpers.rb +1 -1
- data/lib/gooddata/helpers/csv_helper.rb +1 -1
- data/lib/gooddata/helpers/data_helper.rb +19 -10
- data/lib/gooddata/helpers/erb_helper.rb +23 -0
- data/lib/gooddata/helpers/global_helpers.rb +5 -73
- data/lib/gooddata/helpers/global_helpers_params.rb +73 -7
- data/lib/gooddata/helpers/helpers.rb +1 -1
- data/lib/gooddata/lcm/actions/actions.rb +12 -0
- data/lib/gooddata/lcm/actions/associate_clients.rb +46 -0
- data/lib/gooddata/lcm/actions/base_action.rb +23 -0
- data/lib/gooddata/lcm/actions/collect_clients.rb +89 -0
- data/lib/gooddata/lcm/actions/collect_segment_clients.rb +103 -0
- data/lib/gooddata/lcm/actions/collect_segments.rb +59 -0
- data/lib/gooddata/lcm/actions/create_segment_masters.rb +167 -0
- data/lib/gooddata/lcm/actions/ensure_release_table.rb +56 -0
- data/lib/gooddata/lcm/actions/ensure_segments.rb +35 -0
- data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +66 -0
- data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +68 -0
- data/lib/gooddata/lcm/actions/ensure_titles.rb +54 -0
- data/lib/gooddata/lcm/actions/hello_world.rb +44 -0
- data/lib/gooddata/lcm/actions/print_actions.rb +61 -0
- data/lib/gooddata/lcm/actions/print_modes.rb +72 -0
- data/lib/gooddata/lcm/actions/print_types.rb +55 -0
- data/lib/gooddata/lcm/actions/provision_clients.rb +80 -0
- data/lib/gooddata/lcm/actions/purge_clients.rb +78 -0
- data/lib/gooddata/lcm/actions/segments_filter.rb +50 -0
- data/lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb +60 -0
- data/lib/gooddata/lcm/actions/synchronize_clients.rb +87 -0
- data/lib/gooddata/lcm/actions/synchronize_color_palette.rb +59 -0
- data/lib/gooddata/lcm/actions/synchronize_label_types.rb +61 -0
- data/lib/gooddata/lcm/actions/synchronize_ldm.rb +64 -0
- data/lib/gooddata/lcm/actions/synchronize_meta.rb +55 -0
- data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +55 -0
- data/lib/gooddata/lcm/actions/synchronize_processes.rb +66 -0
- data/lib/gooddata/lcm/actions/synchronize_schedules.rb +81 -0
- data/lib/gooddata/lcm/actions/update_release_table.rb +80 -0
- data/lib/gooddata/lcm/data/create_lcm_release.sql.erb +5 -0
- data/lib/gooddata/lcm/data/insert_into_lcm_release.sql.erb +11 -0
- data/lib/gooddata/lcm/data/select_from_lcm_release.sql.erb +8 -0
- data/lib/gooddata/lcm/data/update_lcm_release.sql.erb +7 -0
- data/lib/gooddata/lcm/dsl/dsl.rb +50 -0
- data/lib/gooddata/lcm/dsl/params_dsl.rb +61 -0
- data/lib/gooddata/lcm/dsl/type_dsl.rb +61 -0
- data/lib/gooddata/lcm/helpers/check_helper.rb +37 -0
- data/lib/gooddata/lcm/helpers/helpers.rb +12 -0
- data/lib/gooddata/lcm/lcm.rb +161 -20
- data/lib/gooddata/lcm/lcm2.rb +260 -0
- data/lib/gooddata/lcm/types/base_type.rb +29 -0
- data/lib/gooddata/lcm/types/class/ads_client.rb +35 -0
- data/lib/gooddata/lcm/types/class/class.rb +21 -0
- data/lib/gooddata/lcm/types/class/gd_client.rb +35 -0
- data/lib/gooddata/lcm/types/class/types.rb +12 -0
- data/lib/gooddata/lcm/types/complex/complex.rb +33 -0
- data/lib/gooddata/lcm/types/complex/release_query.rb +35 -0
- data/lib/gooddata/lcm/types/complex/segment.rb +37 -0
- data/lib/gooddata/lcm/types/complex/synchronization_info.rb +32 -0
- data/lib/gooddata/lcm/types/complex/tokens.rb +31 -0
- data/lib/gooddata/lcm/types/complex/types.rb +12 -0
- data/lib/gooddata/lcm/types/complex/update_preference.rb +32 -0
- data/lib/gooddata/lcm/types/param.rb +16 -0
- data/lib/gooddata/lcm/types/scalar/bool.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/hash.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/integer.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/object.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/string.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/types.rb +12 -0
- data/lib/gooddata/lcm/types/special/array.rb +35 -0
- data/lib/gooddata/lcm/types/special/enum.rb +17 -0
- data/lib/gooddata/lcm/types/special/types.rb +12 -0
- data/lib/gooddata/lcm/types/types.rb +12 -0
- data/lib/gooddata/mixins/author.rb +1 -1
- data/lib/gooddata/mixins/content_getter.rb +1 -1
- data/lib/gooddata/mixins/content_property_reader.rb +1 -1
- data/lib/gooddata/mixins/content_property_writer.rb +1 -1
- data/lib/gooddata/mixins/contributor.rb +1 -1
- data/lib/gooddata/mixins/data_getter.rb +1 -1
- data/lib/gooddata/mixins/data_property_reader.rb +1 -1
- data/lib/gooddata/mixins/data_property_writer.rb +1 -1
- data/lib/gooddata/mixins/inspector.rb +1 -1
- data/lib/gooddata/mixins/is_attribute.rb +1 -1
- data/lib/gooddata/mixins/is_dimension.rb +1 -1
- data/lib/gooddata/mixins/is_fact.rb +1 -1
- data/lib/gooddata/mixins/is_label.rb +1 -1
- data/lib/gooddata/mixins/links.rb +1 -1
- data/lib/gooddata/mixins/md_finders.rb +1 -1
- data/lib/gooddata/mixins/md_grantees.rb +1 -1
- data/lib/gooddata/mixins/md_id_to_uri.rb +9 -3
- data/lib/gooddata/mixins/md_json.rb +1 -1
- data/lib/gooddata/mixins/md_lock.rb +1 -1
- data/lib/gooddata/mixins/md_object_id.rb +1 -1
- data/lib/gooddata/mixins/md_object_indexer.rb +1 -1
- data/lib/gooddata/mixins/md_object_query.rb +1 -1
- data/lib/gooddata/mixins/md_relations.rb +1 -1
- data/lib/gooddata/mixins/meta_getter.rb +1 -1
- data/lib/gooddata/mixins/meta_property_reader.rb +1 -1
- data/lib/gooddata/mixins/meta_property_writer.rb +1 -1
- data/lib/gooddata/mixins/mixins.rb +1 -1
- data/lib/gooddata/mixins/not_attribute.rb +1 -1
- data/lib/gooddata/mixins/not_exportable.rb +1 -1
- data/lib/gooddata/mixins/not_fact.rb +1 -1
- data/lib/gooddata/mixins/not_group.rb +1 -1
- data/lib/gooddata/mixins/not_label.rb +1 -1
- data/lib/gooddata/mixins/not_metric.rb +1 -1
- data/lib/gooddata/mixins/obj_id.rb +1 -1
- data/lib/gooddata/mixins/rest_getters.rb +1 -1
- data/lib/gooddata/mixins/rest_resource.rb +1 -1
- data/lib/gooddata/mixins/root_key_getter.rb +1 -1
- data/lib/gooddata/mixins/root_key_setter.rb +1 -1
- data/lib/gooddata/mixins/timestamps.rb +1 -1
- data/lib/gooddata/models/ads_output_stage.rb +85 -0
- data/lib/gooddata/models/automated_data_distribution.rb +36 -0
- data/lib/gooddata/models/blueprint/anchor_field.rb +4 -3
- data/lib/gooddata/models/blueprint/attribute_field.rb +18 -2
- data/lib/gooddata/models/blueprint/blueprint.rb +1 -1
- data/lib/gooddata/models/blueprint/blueprint_field.rb +1 -1
- data/lib/gooddata/models/blueprint/dashboard_builder.rb +1 -1
- data/lib/gooddata/models/blueprint/dataset_blueprint.rb +6 -1
- data/lib/gooddata/models/blueprint/date_dimension.rb +1 -1
- data/lib/gooddata/models/blueprint/fact_field.rb +1 -1
- data/lib/gooddata/models/blueprint/label_field.rb +5 -1
- data/lib/gooddata/models/blueprint/project_blueprint.rb +1 -1
- data/lib/gooddata/models/blueprint/project_builder.rb +1 -1
- data/lib/gooddata/models/blueprint/reference_field.rb +1 -1
- data/lib/gooddata/models/blueprint/schema_blueprint.rb +1 -1
- data/lib/gooddata/models/blueprint/schema_builder.rb +1 -1
- data/lib/gooddata/models/blueprint/to_manifest.rb +7 -3
- data/lib/gooddata/models/blueprint/to_wire.rb +12 -1
- data/lib/gooddata/models/channel_configuration.rb +112 -0
- data/lib/gooddata/models/client.rb +42 -6
- data/lib/gooddata/models/client_synchronization_result.rb +1 -1
- data/lib/gooddata/models/client_synchronization_result_details.rb +1 -1
- data/lib/gooddata/models/datawarehouse.rb +25 -3
- data/lib/gooddata/models/domain.rb +29 -4
- data/lib/gooddata/models/execution.rb +1 -1
- data/lib/gooddata/models/execution_detail.rb +1 -1
- data/lib/gooddata/models/from_wire.rb +8 -1
- data/lib/gooddata/models/invitation.rb +1 -1
- data/lib/gooddata/models/links.rb +1 -1
- data/lib/gooddata/models/membership.rb +1 -1
- data/lib/gooddata/models/metadata.rb +3 -2
- data/lib/gooddata/models/metadata/attribute.rb +7 -1
- data/lib/gooddata/models/metadata/dashboard.rb +3 -3
- data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +1 -1
- data/lib/gooddata/models/metadata/dashboard/filter_apply_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/filter_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/geo_chart_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/headline_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/iframe_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/report_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/text_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard_tab.rb +2 -2
- data/lib/gooddata/models/metadata/dataset.rb +1 -1
- data/lib/gooddata/models/metadata/dimension.rb +1 -1
- data/lib/gooddata/models/metadata/fact.rb +1 -1
- data/lib/gooddata/models/metadata/folder.rb +1 -1
- data/lib/gooddata/models/metadata/label.rb +1 -1
- data/lib/gooddata/models/metadata/metadata.rb +1 -1
- data/lib/gooddata/models/metadata/metric.rb +1 -1
- data/lib/gooddata/models/metadata/report.rb +1 -1
- data/lib/gooddata/models/metadata/report_definition.rb +1 -1
- data/lib/gooddata/models/metadata/scheduled_mail.rb +2 -2
- data/lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb +1 -1
- data/lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb +1 -1
- data/lib/gooddata/models/metadata/variable.rb +1 -1
- data/lib/gooddata/models/model.rb +1 -1
- data/lib/gooddata/models/models.rb +1 -1
- data/lib/gooddata/models/module_constants.rb +1 -1
- data/lib/gooddata/models/notification_rule.rb +113 -0
- data/lib/gooddata/models/process.rb +10 -3
- data/lib/gooddata/models/profile.rb +9 -1
- data/lib/gooddata/models/project.rb +248 -50
- data/lib/gooddata/models/project_creator.rb +2 -2
- data/lib/gooddata/models/project_metadata.rb +1 -1
- data/lib/gooddata/models/project_role.rb +1 -1
- data/lib/gooddata/models/report_data_result.rb +1 -1
- data/lib/gooddata/models/schedule.rb +49 -13
- data/lib/gooddata/models/segment.rb +3 -3
- data/lib/gooddata/models/style_setting.rb +71 -0
- data/lib/gooddata/models/subscription.rb +181 -0
- data/lib/gooddata/models/tab_builder.rb +1 -1
- data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +1 -1
- data/lib/gooddata/models/user_filters/user_filter.rb +1 -1
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +11 -5
- data/lib/gooddata/models/user_filters/user_filters.rb +1 -1
- data/lib/gooddata/models/user_filters/variable_user_filter.rb +1 -1
- data/lib/gooddata/models/user_group.rb +19 -12
- data/lib/gooddata/rest/client.rb +9 -1
- data/lib/gooddata/rest/connection.rb +18 -9
- data/lib/gooddata/rest/object.rb +1 -1
- data/lib/gooddata/rest/object_factory.rb +1 -1
- data/lib/gooddata/rest/resource.rb +1 -1
- data/lib/gooddata/rest/rest.rb +1 -1
- data/lib/gooddata/version.rb +2 -2
- data/spec/.rubocop.yml +16 -0
- data/spec/bricks/bricks_spec.rb +13 -15
- data/spec/data/blueprints/attribute_sort_order_blueprint.json +72 -0
- data/spec/data/gooddata_version_process/gooddata_version.rb +1 -1
- data/spec/data/hello_world_process/hello_world.rb +2 -2
- data/spec/data/ruby_params_process/ruby_params.rb +1 -1
- data/spec/data/ruby_process/process.rb +2 -2
- data/spec/data/wire_models/attribute_sort_by_model.json +73 -0
- data/spec/environment/default.rb +14 -13
- data/spec/environment/develop.rb +26 -11
- data/spec/environment/environment.rb +2 -1
- data/spec/environment/hotfix.rb +15 -7
- data/spec/environment/production.rb +6 -14
- data/spec/environment/staging.rb +9 -10
- data/spec/helpers/blueprint_helper.rb +11 -10
- data/spec/helpers/cli_helper.rb +26 -24
- data/spec/helpers/connection_helper.rb +28 -26
- data/spec/helpers/crypto_helper.rb +8 -6
- data/spec/helpers/csv_helper.rb +7 -5
- data/spec/helpers/process_helper.rb +13 -11
- data/spec/helpers/project_helper.rb +36 -34
- data/spec/helpers/schedule_helper.rb +13 -11
- data/spec/helpers/spec_helper.rb +8 -6
- data/spec/integration/ads_output_stage_spec.rb +55 -0
- data/spec/integration/blueprint_updates_spec.rb +22 -16
- data/spec/integration/blueprint_with_grain_spec.rb +5 -3
- data/spec/integration/channel_configuration_spec.rb +67 -0
- data/spec/integration/clients_spec.rb +31 -22
- data/spec/integration/command_datawarehouse_spec.rb +4 -4
- data/spec/integration/command_projects_spec.rb +6 -6
- data/spec/integration/create_from_template_spec.rb +4 -3
- data/spec/integration/create_project_spec.rb +7 -4
- data/spec/integration/date_dim_switch_spec.rb +25 -28
- data/spec/integration/deprecated_load_spec.rb +11 -9
- data/spec/integration/full_process_schedule_spec.rb +82 -13
- data/spec/integration/full_project_spec.rb +67 -45
- data/spec/integration/lcm_spec.rb +41 -0
- data/spec/integration/over_to_user_filters_spec.rb +14 -10
- data/spec/integration/partial_md_export_import_spec.rb +3 -4
- data/spec/integration/project_spec.rb +101 -42
- data/spec/integration/rest_spec.rb +5 -4
- data/spec/integration/schedule_spec.rb +28 -39
- data/spec/integration/segments_spec.rb +42 -31
- data/spec/integration/subscription_spec.rb +63 -0
- data/spec/integration/user_filters_spec.rb +49 -39
- data/spec/integration/user_group_spec.rb +25 -5
- data/spec/integration/variables_spec.rb +34 -32
- data/spec/logging_in_logging_out_spec.rb +6 -8
- data/spec/spec_helper.rb +3 -3
- data/spec/unit/bricks/bricks_spec.rb +3 -4
- data/spec/unit/bricks/middleware/aws_middelware_spec.rb +8 -15
- data/spec/unit/bricks/middleware/bench_middleware_spec.rb +2 -2
- data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +2 -2
- data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +2 -2
- data/spec/unit/bricks/middleware/logger_middleware_spec.rb +2 -2
- data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +3 -3
- data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +3 -3
- data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +3 -3
- data/spec/unit/cli/cli_spec.rb +3 -3
- data/spec/unit/cli/commands/cmd_auth_spec.rb +2 -2
- data/spec/unit/commands/command_projects_spec.rb +3 -3
- data/spec/unit/core/connection_spec.rb +3 -4
- data/spec/unit/core/logging_spec.rb +2 -5
- data/spec/unit/core/nil_logger_spec.rb +2 -2
- data/spec/unit/core/project_spec.rb +4 -4
- data/spec/unit/extensions/hash_spec.rb +3 -4
- data/spec/unit/godzilla/goodzilla_spec.rb +22 -26
- data/spec/unit/helpers/csv_helper_spec.rb +3 -3
- data/spec/unit/helpers/data_helper_spec.rb +6 -18
- data/spec/unit/helpers/global_helpers_spec.rb +112 -28
- data/spec/unit/helpers_spec.rb +139 -2
- data/spec/unit/models/blueprint/attribute_sort_by_spec.rb +20 -0
- data/spec/unit/models/blueprint/attributes_spec.rb +1 -2
- data/spec/unit/models/blueprint/dataset_spec.rb +2 -3
- data/spec/unit/models/blueprint/labels_spec.rb +1 -2
- data/spec/unit/models/blueprint/project_blueprint_spec.rb +34 -35
- data/spec/unit/models/blueprint/reference_spec.rb +1 -2
- data/spec/unit/models/blueprint/schema_builder_spec.rb +5 -7
- data/spec/unit/models/blueprint/to_wire_spec.rb +76 -55
- data/spec/unit/models/domain_spec.rb +4 -5
- data/spec/unit/models/execution_spec.rb +16 -15
- data/spec/unit/models/from_wire_spec.rb +24 -19
- data/spec/unit/models/invitation_spec.rb +1 -1
- data/spec/unit/models/membership_spec.rb +36 -41
- data/spec/unit/models/metadata_spec.rb +20 -18
- data/spec/unit/models/metric_spec.rb +67 -55
- data/spec/unit/models/model_spec.rb +32 -37
- data/spec/unit/models/params_spec.rb +1 -1
- data/spec/unit/models/profile_spec.rb +40 -45
- data/spec/unit/models/project_creator_spec.rb +27 -29
- data/spec/unit/models/project_role_spec.rb +1 -1
- data/spec/unit/models/project_spec.rb +65 -2
- data/spec/unit/models/report_result_data_spec.rb +7 -12
- data/spec/unit/models/schedule_spec.rb +71 -35
- data/spec/unit/models/to_manifest_spec.rb +69 -4
- data/spec/unit/models/unit_project_spec.rb +12 -12
- data/spec/unit/models/user_filters_spec.rb +40 -40
- data/spec/unit/models/variable_spec.rb +108 -93
- data/spec/unit/rest/polling_spec.rb +7 -7
- data/spec/unit/rest/resource_spec.rb +2 -2
- metadata +145 -228
- data/spec/environment/release.rb +0 -21
- data/spec/environment/staging_3.rb +0 -36
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -12,4 +12,8 @@ class NilClass
|
|
|
12
12
|
def duplicable?
|
|
13
13
|
false
|
|
14
14
|
end
|
|
15
|
+
|
|
16
|
+
def to_b
|
|
17
|
+
false
|
|
18
|
+
end
|
|
15
19
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -24,4 +24,8 @@ class Object
|
|
|
24
24
|
send(:remove_const, name) if const_defined?(name)
|
|
25
25
|
send(:const_set, name, val)
|
|
26
26
|
end
|
|
27
|
+
|
|
28
|
+
def to_b
|
|
29
|
+
false
|
|
30
|
+
end
|
|
27
31
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -12,4 +12,12 @@ class TrueClass
|
|
|
12
12
|
def duplicable?
|
|
13
13
|
false
|
|
14
14
|
end
|
|
15
|
+
|
|
16
|
+
def to_b
|
|
17
|
+
true
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def to_i
|
|
21
|
+
1
|
|
22
|
+
end
|
|
15
23
|
end
|
data/lib/gooddata/extract.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -13,6 +13,17 @@ module GoodData
|
|
|
13
13
|
class DataSource
|
|
14
14
|
attr_reader :realized
|
|
15
15
|
|
|
16
|
+
class << self
|
|
17
|
+
def interpolate_sql_params(query, params)
|
|
18
|
+
keys = query.scan(/\$\{([^\{]+)\}/).flatten
|
|
19
|
+
keys.reduce(query) do |a, e|
|
|
20
|
+
key = e
|
|
21
|
+
raise "Param #{key} is not present in schedule params yet it is expected to be interpolated in the query" unless params.key?(key)
|
|
22
|
+
a.gsub("${#{key}}", params[key])
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
16
27
|
def initialize(opts = {})
|
|
17
28
|
opts = opts.is_a?(String) ? { type: :staging, path: opts } : opts
|
|
18
29
|
opts = GoodData::Helpers.symbolize_keys(opts)
|
|
@@ -34,7 +45,7 @@ module GoodData
|
|
|
34
45
|
when 's3'
|
|
35
46
|
realize_s3(params)
|
|
36
47
|
else
|
|
37
|
-
|
|
48
|
+
raise "DataSource does not support type \"#{source}\""
|
|
38
49
|
end
|
|
39
50
|
end
|
|
40
51
|
|
|
@@ -45,15 +56,13 @@ module GoodData
|
|
|
45
56
|
private
|
|
46
57
|
|
|
47
58
|
def realize_query(params)
|
|
48
|
-
query = @options[:query]
|
|
49
|
-
dwh = params['ads_client']
|
|
50
|
-
fail "Data Source needs a client to ads to be able to query the storage but 'ads_client' is empty." unless dwh
|
|
59
|
+
query = DataSource.interpolate_sql_params(@options[:query], params)
|
|
60
|
+
dwh = params['ads_client'] || params[:ads_client] || raise("Data Source needs a client to ads to be able to query the storage but 'ads_client' is empty.")
|
|
51
61
|
filename = Digest::SHA256.new.hexdigest(query)
|
|
52
62
|
measure = Benchmark.measure do
|
|
53
63
|
CSV.open(filename, 'w') do |csv|
|
|
54
64
|
header_written = false
|
|
55
65
|
header = nil
|
|
56
|
-
|
|
57
66
|
dwh.execute_select(query) do |row|
|
|
58
67
|
unless header_written
|
|
59
68
|
header_written = true
|
|
@@ -64,7 +73,7 @@ module GoodData
|
|
|
64
73
|
end
|
|
65
74
|
end
|
|
66
75
|
end
|
|
67
|
-
|
|
76
|
+
GoodData.logger.info "Realizing SQL query \"#{query}\" took #{measure.real}"
|
|
68
77
|
filename
|
|
69
78
|
end
|
|
70
79
|
|
|
@@ -94,11 +103,11 @@ module GoodData
|
|
|
94
103
|
|
|
95
104
|
def realize_s3(params)
|
|
96
105
|
s3_client = params['aws_client'] && params['aws_client']['s3_client']
|
|
97
|
-
|
|
106
|
+
raise 'AWS client not present. Perhaps S3Middleware is missing in the brick definition?' if !s3_client || !s3_client.respond_to?(:buckets)
|
|
98
107
|
bucket_name = @options[:bucket]
|
|
99
108
|
key = @options[:key]
|
|
100
|
-
|
|
101
|
-
|
|
109
|
+
raise 'Key "bucket" is missing in S3 datasource' if bucket_name.blank?
|
|
110
|
+
raise 'Key "key" is missing in S3 datasource' if key.blank?
|
|
102
111
|
puts "Realizing download from S3. Bucket #{bucket_name}, object with key #{key}."
|
|
103
112
|
filename = Digest::SHA256.new.hexdigest(@options.to_json)
|
|
104
113
|
bucket = s3_client.buckets[bucket_name]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'erb'
|
|
2
|
+
|
|
3
|
+
module GoodData
|
|
4
|
+
module Helpers
|
|
5
|
+
module ErbHelper
|
|
6
|
+
class << self
|
|
7
|
+
def template_string(template, params = {})
|
|
8
|
+
b = binding
|
|
9
|
+
|
|
10
|
+
params.each do |k, v|
|
|
11
|
+
b.local_variable_set(k, v)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
ERB.new(template).result(b)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def template_file(path, params)
|
|
18
|
+
template_string(File.read(path), params)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -14,6 +14,9 @@ require_relative 'global_helpers_params'
|
|
|
14
14
|
|
|
15
15
|
module GoodData
|
|
16
16
|
module Helpers
|
|
17
|
+
extend Hashie::Extensions::StringifyKeys::ClassMethods
|
|
18
|
+
extend Hashie::Extensions::SymbolizeKeys::ClassMethods
|
|
19
|
+
|
|
17
20
|
class DeepMergeableHash < Hash
|
|
18
21
|
include Hashie::Extensions::DeepMerge
|
|
19
22
|
end
|
|
@@ -149,83 +152,12 @@ module GoodData
|
|
|
149
152
|
end
|
|
150
153
|
|
|
151
154
|
def interpolate_error_message(error)
|
|
155
|
+
return unless error && error['error'] && error['error']['message']
|
|
152
156
|
message = error['error']['message']
|
|
153
157
|
params = error['error']['parameters']
|
|
154
158
|
sprintf(message, *params)
|
|
155
159
|
end
|
|
156
160
|
|
|
157
|
-
def transform_keys!(an_object)
|
|
158
|
-
return enum_for(:transform_keys!) unless block_given?
|
|
159
|
-
an_object.keys.each do |key|
|
|
160
|
-
an_object[yield(key)] = an_object.delete(key)
|
|
161
|
-
end
|
|
162
|
-
an_object
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
def symbolize_keys!(an_object)
|
|
166
|
-
transform_keys!(an_object) do |key|
|
|
167
|
-
begin
|
|
168
|
-
key.to_sym
|
|
169
|
-
rescue
|
|
170
|
-
key
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def symbolize_keys(an_object)
|
|
176
|
-
transform_keys(an_object) do |key|
|
|
177
|
-
begin
|
|
178
|
-
key.to_sym
|
|
179
|
-
rescue
|
|
180
|
-
key
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
def transform_keys(an_object)
|
|
186
|
-
return enum_for(:transform_keys) unless block_given?
|
|
187
|
-
result = an_object.class.new
|
|
188
|
-
an_object.each_key do |key|
|
|
189
|
-
result[yield(key)] = an_object[key]
|
|
190
|
-
end
|
|
191
|
-
result
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
def deep_symbolize_keys(an_object)
|
|
195
|
-
deep_transform_keys(an_object) do |key|
|
|
196
|
-
begin
|
|
197
|
-
key.to_sym
|
|
198
|
-
rescue
|
|
199
|
-
key
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
def stringify_keys(an_object)
|
|
205
|
-
transform_keys(an_object, &:to_s)
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
def deep_stringify_keys(an_object)
|
|
209
|
-
deep_transform_keys(an_object, &:to_s)
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
def deep_transform_keys(an_object, &block)
|
|
213
|
-
_deep_transform_keys_in_object(an_object, &block)
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
def _deep_transform_keys_in_object(object, &block)
|
|
217
|
-
case object
|
|
218
|
-
when Hash
|
|
219
|
-
object.each_with_object({}) do |(key, value), result|
|
|
220
|
-
result[yield(key)] = _deep_transform_keys_in_object(value, &block)
|
|
221
|
-
end
|
|
222
|
-
when Array
|
|
223
|
-
object.map { |e| _deep_transform_keys_in_object(e, &block) }
|
|
224
|
-
else
|
|
225
|
-
object
|
|
226
|
-
end
|
|
227
|
-
end
|
|
228
|
-
|
|
229
161
|
def deep_dup(an_object)
|
|
230
162
|
case an_object
|
|
231
163
|
when Array
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -52,9 +52,31 @@ module GoodData
|
|
|
52
52
|
encode_params(params, ENCODED_HIDDEN_PARAMS_KEY)
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
-
# Decodes params as they came from the platform
|
|
56
|
-
#
|
|
57
|
-
|
|
55
|
+
# Decodes params as they came from the platform.
|
|
56
|
+
# @params Parameter hash need to be decoded
|
|
57
|
+
# @option options [Boolean] :resolve_reference_params Resolve reference parameters in gd_encoded_params or not
|
|
58
|
+
# @return [Hash] Decoded parameters
|
|
59
|
+
def decode_params(params, options = {})
|
|
60
|
+
convert_secure_params = lambda do |args|
|
|
61
|
+
args = args.select { |k, _| k.include? "|" }
|
|
62
|
+
lines = args.keys.map do |key|
|
|
63
|
+
hash = {}
|
|
64
|
+
last_a = nil
|
|
65
|
+
last_e = nil
|
|
66
|
+
key.split("|").reduce(hash) do |a, e|
|
|
67
|
+
last_a = a
|
|
68
|
+
last_e = e
|
|
69
|
+
a[e] = {}
|
|
70
|
+
end
|
|
71
|
+
last_a[last_e] = args[key]
|
|
72
|
+
hash
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
lines.reduce({}) do |a, e|
|
|
76
|
+
a.deep_merge(e)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
58
80
|
key = ENCODED_PARAMS_KEY.to_s
|
|
59
81
|
hidden_key = ENCODED_HIDDEN_PARAMS_KEY.to_s
|
|
60
82
|
data_params = params[key] || '{}'
|
|
@@ -66,9 +88,48 @@ module GoodData
|
|
|
66
88
|
'{}'
|
|
67
89
|
end
|
|
68
90
|
|
|
91
|
+
# Replace reference parameters by the actual values. Use backslash to escape a reference parameter, e.g: \${not_a_param},
|
|
92
|
+
# the ${not_a_param} will not be replaced
|
|
93
|
+
if options[:resolve_reference_params]
|
|
94
|
+
regexps = Regexp.union(/\\\\/, /\\\$/, /\$\{(\w+)\}/)
|
|
95
|
+
resolve_reference = lambda do |v|
|
|
96
|
+
if v.is_a? Hash
|
|
97
|
+
Hash[
|
|
98
|
+
v.map do |k, v2|
|
|
99
|
+
[k, resolve_reference.call(v2)]
|
|
100
|
+
end
|
|
101
|
+
]
|
|
102
|
+
elsif v.is_a? Array
|
|
103
|
+
v.map do |v2|
|
|
104
|
+
resolve_reference.call(v2)
|
|
105
|
+
end
|
|
106
|
+
else
|
|
107
|
+
v.gsub(regexps) do |match|
|
|
108
|
+
if match =~ /\\\\/
|
|
109
|
+
data_params.is_a?(Hash) ? '\\' : '\\\\' # rubocop: disable Metrics/BlockNesting
|
|
110
|
+
elsif match =~ /\\\$/
|
|
111
|
+
'$'
|
|
112
|
+
elsif match =~ /\$\{(\w+)\}/
|
|
113
|
+
params["#{$1}"] || raise("The gd_encoded_params parameter contains unknow reference #{$1}") # rubocop: disable Style/PerlBackrefs
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
data_params = if data_params.is_a? Hash
|
|
120
|
+
Hash[
|
|
121
|
+
data_params.map do |k, v|
|
|
122
|
+
[k, resolve_reference.call(v)]
|
|
123
|
+
end
|
|
124
|
+
]
|
|
125
|
+
else
|
|
126
|
+
resolve_reference.call(data_params)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
69
130
|
begin
|
|
70
|
-
parsed_data_params = JSON.parse(data_params)
|
|
71
|
-
parsed_hidden_data_params = JSON.parse(hidden_data_params)
|
|
131
|
+
parsed_data_params = data_params.is_a?(Hash) ? data_params : JSON.parse(data_params)
|
|
132
|
+
parsed_hidden_data_params = hidden_data_params.is_a?(Hash) ? hidden_data_params : JSON.parse(hidden_data_params)
|
|
72
133
|
rescue JSON::ParserError => e
|
|
73
134
|
raise e.class, "Error reading json from '#{key}' or '#{hidden_key}', reason: #{e.message}"
|
|
74
135
|
end
|
|
@@ -76,9 +137,14 @@ module GoodData
|
|
|
76
137
|
# Add the nil on ENCODED_HIDDEN_PARAMS_KEY
|
|
77
138
|
# if the data was retrieved from API You will not have the actual values so encode -> decode is not losless. The nil on the key prevents the server from deleting the key
|
|
78
139
|
parsed_hidden_data_params[ENCODED_HIDDEN_PARAMS_KEY] = nil unless parsed_hidden_data_params.empty?
|
|
140
|
+
secure_params = convert_secure_params.call(params)
|
|
141
|
+
params.delete_if do |k, _|
|
|
142
|
+
k.include?('|')
|
|
143
|
+
end
|
|
144
|
+
|
|
79
145
|
params.delete(key)
|
|
80
146
|
params.delete(hidden_key)
|
|
81
|
-
params.
|
|
147
|
+
params.deep_merge(parsed_data_params).deep_merge(parsed_hidden_data_params).deep_merge(secure_params)
|
|
82
148
|
end
|
|
83
149
|
|
|
84
150
|
# A helper which allows you to diff two lists of objects. The objects
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
|
+
# This source code is licensed under the BSD-style license found in the
|
|
5
|
+
# LICENSE file in the root directory of this source tree.
|
|
6
|
+
|
|
7
|
+
require 'pathname'
|
|
8
|
+
|
|
9
|
+
base = Pathname(__FILE__).dirname.expand_path
|
|
10
|
+
Dir.glob(base + '*.rb').each do |file|
|
|
11
|
+
require file
|
|
12
|
+
end
|