dtk-client 0.9.1 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/Gemfile +1 -3
- data/README.md +2 -121
- data/Rakefile +44 -0
- data/bin/dtk +10 -88
- data/dtk-client.gemspec +21 -44
- data/examples/simple/dtk.module.yaml +32 -0
- data/{lib/git-logs/git.log → examples/simple/test/README.md} +0 -0
- data/examples/spark/dtk.module.yaml +120 -0
- data/examples/with_repo_content/deploy/puppet/manifests/hostname.pp +54 -0
- data/examples/with_repo_content/dtk.module.yaml +49 -0
- data/examples/with_repo_content/test/README.txt +0 -0
- data/features/dtk.feature +8 -0
- data/features/step_definitions/dtk_steps.rb +6 -0
- data/features/support/env.rb +15 -0
- data/lib/cli/command/mixin.rb +101 -0
- data/lib/cli/command/module/clone.rb +42 -0
- data/lib/cli/command/module/install.rb +52 -0
- data/lib/cli/command/module/list.rb +31 -0
- data/lib/cli/command/module/list_assemblies.rb +39 -0
- data/lib/cli/command/module/push.rb +34 -0
- data/lib/cli/command/module/uninstall.rb +46 -0
- data/lib/cli/command/module.rb +33 -0
- data/lib/cli/command/options.rb +33 -0
- data/lib/cli/command/service/cancel_task.rb +33 -0
- data/lib/cli/command/service/converge.rb +37 -0
- data/lib/{parser/adapters/thor/common_option_defs.rb → cli/command/service/create_workspace.rb} +13 -17
- data/lib/cli/command/service/destroy.rb +47 -0
- data/lib/cli/command/service/edit.rb +47 -0
- data/lib/cli/command/service/exec.rb +42 -0
- data/lib/cli/command/service/exec_sync.rb +53 -0
- data/lib/cli/command/service/list.rb +30 -0
- data/lib/cli/command/service/list_actions.rb +39 -0
- data/lib/cli/command/service/list_attributes.rb +44 -0
- data/lib/cli/command/service/list_component_links.rb +33 -0
- data/lib/cli/command/service/list_components.rb +39 -0
- data/lib/cli/command/service/list_dependent_modules.rb +33 -0
- data/lib/cli/command/service/list_nodes.rb +33 -0
- data/lib/cli/command/service/list_violations.rb +33 -0
- data/lib/cli/command/service/pull.rb +32 -0
- data/lib/cli/command/service/push.rb +37 -0
- data/lib/{shell/parse_monkey_patch.rb → cli/command/service/set_default_target.rb} +9 -17
- data/lib/cli/command/service/set_required_attributes.rb +32 -0
- data/lib/cli/command/service/ssh.rb +42 -0
- data/lib/cli/command/service/stage.rb +55 -0
- data/lib/cli/command/service/start.rb +33 -0
- data/lib/{shell/context_aux.rb → cli/command/service/stop.rb} +10 -23
- data/lib/cli/command/service/task_status.rb +39 -0
- data/lib/cli/command/service.rb +55 -0
- data/lib/{commands.rb → cli/command/subcommand.rb} +22 -25
- data/lib/{bundler_monkey_patch.rb → cli/command/token/arg.rb} +6 -6
- data/lib/cli/command/token/class_mixin.rb +96 -0
- data/lib/cli/command/token/flag.rb +42 -0
- data/lib/{execute/command/rest_call.rb → cli/command/token/mixin.rb} +23 -14
- data/lib/cli/command/token/switch.rb +35 -0
- data/lib/cli/command/token.rb +76 -0
- data/lib/cli/command.rb +46 -0
- data/lib/cli/context/attributes.rb +50 -0
- data/lib/cli/context/type/module.rb +34 -0
- data/lib/{commands/thor/state_change.rb → cli/context/type/service.rb} +11 -5
- data/lib/cli/context/type/top.rb +32 -0
- data/lib/cli/context/type.rb +42 -0
- data/lib/cli/context.rb +174 -0
- data/lib/cli/directory_parser/file_system.rb +105 -0
- data/lib/{execute/command.rb → cli/directory_parser.rb} +14 -17
- data/lib/{execute.rb → cli/file_obj.rb} +13 -9
- data/lib/cli/processor/plugin/gli.rb +70 -0
- data/lib/cli/processor.rb +60 -0
- data/lib/cli/runner/dtkn_access.rb +75 -0
- data/lib/cli/runner.rb +58 -0
- data/lib/cli/version.rb +8 -0
- data/lib/{config → client/config}/cacert.pem +0 -0
- data/lib/client/config/default.conf +20 -0
- data/lib/client/config.rb +106 -0
- data/lib/client/configurator.rb +182 -0
- data/lib/client/conn.rb +197 -0
- data/lib/client/content_generator.rb +127 -0
- data/lib/client/error/subclasses.rb +105 -0
- data/lib/client/error.rb +98 -0
- data/lib/client/git_repo/adapter/git_gem/error_handler.rb +70 -0
- data/lib/client/git_repo/adapter/git_gem.rb +179 -0
- data/lib/client/git_repo.rb +122 -0
- data/lib/client/logger.rb +136 -0
- data/lib/client/operation/account.rb +66 -0
- data/lib/client/operation/client_module_dir/git_repo.rb +286 -0
- data/lib/client/operation/client_module_dir.rb +138 -0
- data/lib/client/operation/module/clone_module.rb +52 -0
- data/lib/client/operation/module/install/common_module.rb +58 -0
- data/lib/client/operation/module/install/external_module.rb +122 -0
- data/lib/client/operation/module/install.rb +91 -0
- data/lib/client/operation/module/install_from_catalog.rb +76 -0
- data/lib/client/operation/module/list.rb +34 -0
- data/lib/client/operation/module/list_assemblies.rb +35 -0
- data/lib/client/operation/module/push.rb +62 -0
- data/lib/client/operation/module/uninstall.rb +44 -0
- data/lib/client/operation/module.rb +58 -0
- data/lib/{commands/common/thor/reparse.rb → client/operation/module_service_common.rb} +27 -16
- data/lib/client/operation/service/cancel_task.rb +29 -0
- data/lib/client/operation/service/commit_and_push.rb +128 -0
- data/lib/client/operation/service/converge.rb +50 -0
- data/lib/{util/common_util.rb → client/operation/service/create_workspace.rb} +13 -13
- data/lib/client/operation/service/destroy.rb +42 -0
- data/lib/client/operation/service/edit.rb +54 -0
- data/lib/client/operation/service/exec.rb +73 -0
- data/lib/client/operation/service/list.rb +32 -0
- data/lib/client/operation/service/list_actions.rb +34 -0
- data/lib/{commands/thor/dependency.rb → client/operation/service/list_attributes.rb} +16 -12
- data/lib/client/operation/service/list_component_links.rb +29 -0
- data/lib/{commands/common/thor/pull_clone_changes.rb → client/operation/service/list_components.rb} +13 -7
- data/lib/client/operation/service/list_dependent_modules.rb +29 -0
- data/lib/client/operation/service/list_nodes.rb +29 -0
- data/lib/{commands/thor/project.rb → client/operation/service/list_violations.rb} +8 -13
- data/lib/client/operation/service/pull.rb +37 -0
- data/lib/client/operation/service/set_default_target.rb +31 -0
- data/lib/client/operation/service/set_required_attributes.rb +41 -0
- data/lib/client/operation/service/ssh.rb +118 -0
- data/lib/client/operation/service/stage.rb +54 -0
- data/lib/client/operation/service/start.rb +29 -0
- data/lib/client/operation/service/stop.rb +30 -0
- data/lib/{task_status → client/operation/service/task_status}/refresh_mode.rb +15 -25
- data/lib/{task_status → client/operation/service/task_status}/snapshot_mode.rb +4 -5
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/format.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/result/action.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/result/components.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/result/node_level.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/result.rb +4 -4
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/steps/action.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/steps/components.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/steps/node_level.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task/steps.rb +4 -4
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/hierarchical_task.rb +3 -3
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/no_results.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/render.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/stage/render.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/stage.rb +3 -3
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/task_end.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element/task_start.rb +1 -1
- data/lib/{task_status → client/operation/service/task_status}/stream_mode/element.rb +13 -13
- data/lib/{task_status → client/operation/service/task_status}/stream_mode.rb +5 -9
- data/lib/client/operation/service/task_status.rb +77 -0
- data/lib/client/operation/service.rb +54 -0
- data/lib/client/operation.rb +67 -0
- data/lib/client/operation_args.rb +40 -0
- data/lib/{execute/execute_context/result_store.rb → client/render/view/simple.rb} +15 -14
- data/lib/client/render/view/table/processor.rb +248 -0
- data/lib/client/render/view/table.rb +75 -0
- data/lib/client/render.rb +113 -0
- data/lib/client/response/error_handler.rb +97 -0
- data/lib/client/response/render_helper.rb +78 -0
- data/lib/client/response/subclasses.rb +62 -0
- data/lib/client/response.rb +83 -0
- data/lib/client/session.rb +62 -0
- data/lib/client/util/auxiliary.rb +34 -0
- data/lib/client/util/console.rb +81 -0
- data/lib/client/util/disk_cacher.rb +66 -0
- data/lib/client/util/dtk_path.rb +28 -0
- data/lib/{search_hash.rb → client/util/hash_with_optional_keys.rb} +29 -21
- data/lib/client/util/interactive_wizard.rb +84 -0
- data/lib/client/util/module_ref.rb +92 -0
- data/lib/client/util/os_util/print.rb +121 -0
- data/lib/client/util/os_util.rb +122 -0
- data/lib/{commands/thor/utils.rb → client/util/post_body.rb} +1 -1
- data/lib/{execute/error_usage.rb → client/util/query_string_hash.rb} +2 -2
- data/lib/client/util/remote_dependency.rb +67 -0
- data/lib/client/util/ssh_util.rb +89 -0
- data/lib/client/util/validation.rb +28 -0
- data/lib/client/util.rb +18 -0
- data/lib/{util/permission_util.rb → dtk_cli.rb} +10 -9
- data/lib/dtk_client.rb +18 -14
- data/test/default_test.rb +14 -0
- data/test/test_helper.rb +9 -0
- metadata +196 -307
- data/Gemfile_dev +0 -13
- data/bin/dtk-execute +0 -32
- data/bin/dtk-shell +0 -31
- data/lib/auxiliary.rb +0 -61
- data/lib/client.rb +0 -58
- data/lib/command_helper.rb +0 -33
- data/lib/command_helpers/git_repo/merge.rb +0 -153
- data/lib/command_helpers/git_repo.rb +0 -589
- data/lib/command_helpers/jenkins_client/config_xml.rb +0 -288
- data/lib/command_helpers/jenkins_client.rb +0 -106
- data/lib/command_helpers/service_importer.rb +0 -251
- data/lib/command_helpers/service_link.rb +0 -33
- data/lib/command_helpers/test_module_creator.rb +0 -69
- data/lib/command_helpers/test_module_templates/dtk.model.yaml.eruby +0 -10
- data/lib/command_helpers/test_module_templates/spec_helper.rb.eruby +0 -10
- data/lib/command_helpers/test_module_templates/temp_component_spec.rb.eruby +0 -5
- data/lib/commands/common/thor/access_control.rb +0 -133
- data/lib/commands/common/thor/action_result_handler.rb +0 -74
- data/lib/commands/common/thor/assembly_template.rb +0 -92
- data/lib/commands/common/thor/assembly_workspace.rb +0 -1638
- data/lib/commands/common/thor/base_command_helper.rb +0 -59
- data/lib/commands/common/thor/clone.rb +0 -82
- data/lib/commands/common/thor/common.rb +0 -88
- data/lib/commands/common/thor/common_base.rb +0 -49
- data/lib/commands/common/thor/create_target.rb +0 -70
- data/lib/commands/common/thor/edit.rb +0 -255
- data/lib/commands/common/thor/inventory_parser.rb +0 -98
- data/lib/commands/common/thor/list_diffs.rb +0 -128
- data/lib/commands/common/thor/module/import.rb +0 -215
- data/lib/commands/common/thor/module.rb +0 -1011
- data/lib/commands/common/thor/node.rb +0 -53
- data/lib/commands/common/thor/poller.rb +0 -65
- data/lib/commands/common/thor/pull_from_remote.rb +0 -152
- data/lib/commands/common/thor/puppet_forge.rb +0 -72
- data/lib/commands/common/thor/purge_clone.rb +0 -101
- data/lib/commands/common/thor/push_clone_changes.rb +0 -162
- data/lib/commands/common/thor/push_to_remote.rb +0 -94
- data/lib/commands/common/thor/remotes.rb +0 -71
- data/lib/commands/common/thor/set_required_attributes.rb +0 -46
- data/lib/commands/thor/account.rb +0 -239
- data/lib/commands/thor/assembly.rb +0 -361
- data/lib/commands/thor/attribute.rb +0 -79
- data/lib/commands/thor/component.rb +0 -70
- data/lib/commands/thor/component_module.rb +0 -501
- data/lib/commands/thor/component_template.rb +0 -174
- data/lib/commands/thor/developer.rb +0 -144
- data/lib/commands/thor/dtk.rb +0 -152
- data/lib/commands/thor/library.rb +0 -125
- data/lib/commands/thor/node.rb +0 -504
- data/lib/commands/thor/node_group.rb +0 -203
- data/lib/commands/thor/node_template.rb +0 -94
- data/lib/commands/thor/provider.rb +0 -233
- data/lib/commands/thor/remotes.rb +0 -49
- data/lib/commands/thor/service.rb +0 -932
- data/lib/commands/thor/service_module.rb +0 -900
- data/lib/commands/thor/target.rb +0 -250
- data/lib/commands/thor/task.rb +0 -116
- data/lib/commands/thor/test_module.rb +0 -310
- data/lib/commands/thor/workspace.rb +0 -698
- data/lib/config/client.conf.header +0 -20
- data/lib/config/configuration.rb +0 -99
- data/lib/config/default.conf +0 -16
- data/lib/config/disk_cacher.rb +0 -80
- data/lib/configurator.rb +0 -176
- data/lib/context_router.rb +0 -44
- data/lib/core.rb +0 -489
- data/lib/domain/git_adapter.rb +0 -412
- data/lib/domain/git_error_handler.rb +0 -64
- data/lib/domain/response/error_handler.rb +0 -86
- data/lib/domain/response.rb +0 -285
- data/lib/dtk-client/version.rb +0 -20
- data/lib/dtk_constants.rb +0 -40
- data/lib/dtk_error.rb +0 -114
- data/lib/dtk_logger.rb +0 -113
- data/lib/error.rb +0 -85
- data/lib/execute/cli_pure/cli_rerouter.rb +0 -102
- data/lib/execute/command/api_call/map.rb +0 -60
- data/lib/execute/command/api_call/service.rb +0 -91
- data/lib/execute/command/api_call/translation_term.rb +0 -119
- data/lib/execute/command/api_call.rb +0 -60
- data/lib/execute/command_processor/rest_call.rb +0 -59
- data/lib/execute/command_processor.rb +0 -30
- data/lib/execute/execute_context.rb +0 -86
- data/lib/execute/script/add_tenant.rb +0 -121
- data/lib/execute/script.rb +0 -64
- data/lib/parser/adapters/option_parser.rb +0 -70
- data/lib/parser/adapters/thor.rb +0 -555
- data/lib/require_first.rb +0 -104
- data/lib/shell/context.rb +0 -1064
- data/lib/shell/domain/active_context.rb +0 -186
- data/lib/shell/domain/context_entity.rb +0 -89
- data/lib/shell/domain/context_params.rb +0 -223
- data/lib/shell/domain/override_tasks.rb +0 -88
- data/lib/shell/domain/shadow_entity.rb +0 -76
- data/lib/shell/header_shell.rb +0 -44
- data/lib/shell/help_monkey_patch.rb +0 -283
- data/lib/shell/interactive_wizard.rb +0 -256
- data/lib/shell/message_queue.rb +0 -63
- data/lib/shell/status_monitor.rb +0 -124
- data/lib/shell.rb +0 -261
- data/lib/task_status.rb +0 -83
- data/lib/util/console.rb +0 -235
- data/lib/util/dtk_puppet.rb +0 -65
- data/lib/util/module_util.rb +0 -66
- data/lib/util/os_util.rb +0 -385
- data/lib/util/remote_dependency_util.rb +0 -84
- data/lib/util/ssh_util.rb +0 -94
- data/lib/view_processor/augmented_simple_list.rb +0 -44
- data/lib/view_processor/hash_pretty_print.rb +0 -123
- data/lib/view_processor/simple_list.rb +0 -156
- data/lib/view_processor/table_print.rb +0 -309
- data/lib/view_processor.rb +0 -129
- data/puppet/manifests/init.pp +0 -72
- data/puppet/manifests/params.pp +0 -16
- data/puppet/r8meta.puppet.yml +0 -35
- data/puppet/templates/bash_profile.erb +0 -2
- data/puppet/templates/client.conf.erb +0 -1
- data/puppet/templates/dtkclient.erb +0 -2
- data/spec/component_module_spec.rb +0 -34
- data/spec/dependency_spec.rb +0 -6
- data/spec/dtk_shell_spec.rb +0 -13
- data/spec/dtk_spec.rb +0 -33
- data/spec/lib/spec_helper.rb +0 -10
- data/spec/lib/spec_thor.rb +0 -108
- data/spec/node_template_spec.rb +0 -24
- data/spec/project_spec.rb +0 -6
- data/spec/repo_spec.rb +0 -7
- data/spec/response_spec.rb +0 -52
- data/spec/service_module_spec.rb +0 -38
- data/spec/service_spec.rb +0 -50
- data/spec/state_change_spec.rb +0 -7
- data/spec/table_print_spec.rb +0 -48
- data/spec/target_spec.rb +0 -57
- data/spec/task_spec.rb +0 -28
- data/views/assembly/augmented_simple_list.rb +0 -12
- data/views/assembly_template/augmented_simple_list.rb +0 -12
- data/views/list_task/augmented_simple_list.rb +0 -12
@@ -0,0 +1,113 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client
|
19
|
+
class Render
|
20
|
+
module Type
|
21
|
+
TABLE = 'table'
|
22
|
+
SIMPLE = 'simple'
|
23
|
+
|
24
|
+
ALL = [TABLE, SIMPLE]
|
25
|
+
DEFAULT = SIMPLE
|
26
|
+
|
27
|
+
# TODO: DTK-2554: removed below and put in simple, which is yaml
|
28
|
+
# SIMPLE_LIST = 'simple_list'
|
29
|
+
# PRETTY_PRINT = 'hash_pretty_print'
|
30
|
+
# AUG_SIMPLE_LIST = 'augmented_simple_list'
|
31
|
+
end
|
32
|
+
|
33
|
+
Type::ALL.each { |render_type| require_relative("render/view/#{render_type}") }
|
34
|
+
|
35
|
+
extend Auxiliary
|
36
|
+
|
37
|
+
attr_reader :render_type, :semantic_datatype
|
38
|
+
def initialize(render_type, semantic_datatype = nil)
|
39
|
+
@render_type = render_type
|
40
|
+
@semantic_datatype = semantic_datatype
|
41
|
+
end
|
42
|
+
private :initialize
|
43
|
+
|
44
|
+
# opts can have keys
|
45
|
+
# :semantic_datatype
|
46
|
+
# :adapter - way to pass in already created adapter
|
47
|
+
# :print_error_table - Boolean (default: false)
|
48
|
+
# :table_definition - pverride to table def associated with semantic_datatype
|
49
|
+
#
|
50
|
+
# value returned is Boolean indicating whether any additional print needed
|
51
|
+
def self.render(ruby_obj, opts = {})
|
52
|
+
render_type = opts[:render_type]
|
53
|
+
if render_type == Type::TABLE
|
54
|
+
render_opts = {
|
55
|
+
:print_error_table => opts[:print_error_table],
|
56
|
+
}
|
57
|
+
get_adapter(Type::TABLE, opts).render(ruby_obj, render_opts)
|
58
|
+
elsif ruby_obj.kind_of?(Hash)
|
59
|
+
get_adapter(render_type, opts).render(ruby_obj)
|
60
|
+
elsif ruby_obj.kind_of?(Array)
|
61
|
+
get_adapter(render_type, opts).render(ruby_obj)
|
62
|
+
elsif ruby_obj.kind_of?(String)
|
63
|
+
ruby_obj
|
64
|
+
else
|
65
|
+
raise Error.new('ruby_obj has unexpected type')
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def render_text(text)
|
72
|
+
STDOUT << text
|
73
|
+
end
|
74
|
+
|
75
|
+
# opts can have keys
|
76
|
+
# :adapter - way to pass in already created adapter
|
77
|
+
# :semantic_datatype
|
78
|
+
def self.get_adapter(render_type, opts = {})
|
79
|
+
return opts[:adapter] if opts[:adapter]
|
80
|
+
|
81
|
+
raise Error.new('No type is given') unless render_type
|
82
|
+
|
83
|
+
AdapterCache.get?(render_type, opts[:semantic_datatype]) || AdapterCache.set(create_adapter(render_type, opts))
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.create_adapter(render_type, opts = {})
|
87
|
+
klass = const_get snake_to_camel_case(render_type)
|
88
|
+
klass.new(render_type, opts)
|
89
|
+
end
|
90
|
+
|
91
|
+
module AdapterCache
|
92
|
+
STORE_SIMPLE = {}
|
93
|
+
STORE_AUG = {}
|
94
|
+
|
95
|
+
def self.get?(render_type, semantic_datatype = nil)
|
96
|
+
if semantic_datatype
|
97
|
+
(STORE_AUG[render_type]||{})[semantic_datatype]
|
98
|
+
else
|
99
|
+
STORE_SIMPLE[render_type]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.set(adapter)
|
104
|
+
if semantic_datatype = adapter.semantic_datatype
|
105
|
+
(STORE_AUG[adapter.render_type] ||= {})[semantic_datatype] = adapter
|
106
|
+
else
|
107
|
+
STORE_SIMPLE[adapter.render_type] = adapter
|
108
|
+
end
|
109
|
+
adapter
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client
|
19
|
+
class Response
|
20
|
+
module ErrorHandler
|
21
|
+
def self.raise_if_error(response)
|
22
|
+
Error.raise_if_error(response)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.check_for_session_expiried(response)
|
26
|
+
error_code = nil
|
27
|
+
if response && response['errors']
|
28
|
+
response['errors'].each do |err|
|
29
|
+
error_code = err['code']||(err['errors'] && err['errors'].first['code'])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
(error_code == 'forbidden')
|
33
|
+
end
|
34
|
+
|
35
|
+
SpecificErrorCodes = [:unauthorized, :session_timeout, :broken, :forbidden, :timeout, :connection_refused, :resource_not_found, :pg_error]
|
36
|
+
DefaultErrorCode = :error
|
37
|
+
DefaultErrorMsg = 'Internal DTK Client error, please try again'
|
38
|
+
|
39
|
+
Info = Struct.new(:msg, :code, :backtrace)
|
40
|
+
def self.error_info?(response, opts = {})
|
41
|
+
unless errors = response['errors']
|
42
|
+
return opts[:default_error_if_nil] && error_info_default
|
43
|
+
end
|
44
|
+
|
45
|
+
# special rare case
|
46
|
+
errors = errors.first['errors'] if errors.is_a?(Array) && errors.first['errors']
|
47
|
+
|
48
|
+
error_msg = ''
|
49
|
+
error_internal = nil
|
50
|
+
error_backtrace = nil
|
51
|
+
error_code = nil
|
52
|
+
error_on_server = nil
|
53
|
+
|
54
|
+
#TODO: below just 'captures' first error
|
55
|
+
errors.each do |err|
|
56
|
+
error_msg += err['message'] unless err['message'].nil?
|
57
|
+
error_msg += err['error'] unless err['error'].nil?
|
58
|
+
error_msg += remove_html_tags(err['original_exception'].to_s) unless err['original_exception'].nil?
|
59
|
+
error_on_server = true unless err['on_client']
|
60
|
+
error_code = err['code']||(err['errors'] && err['errors'].first['code'])
|
61
|
+
error_internal ||= (err['internal'] or error_code == 'not_found') #'not_found' code is at Ramaze level; so error_internal not set
|
62
|
+
error_backtrace ||= err['backtrace']
|
63
|
+
end
|
64
|
+
|
65
|
+
# in case we could not parse error lets log error info
|
66
|
+
if error_msg.empty?
|
67
|
+
Logger.instance.error("Error info could not be extracted from following response: #{response.to_s}")
|
68
|
+
end
|
69
|
+
|
70
|
+
# normalize it for display
|
71
|
+
error_msg = error_msg.empty? ? DefaultErrorMsg : error_msg
|
72
|
+
|
73
|
+
unless error_code and SpecificErrorCodes.include?(error_code)
|
74
|
+
error_code =
|
75
|
+
if error_internal
|
76
|
+
error_on_server ? :server_error : :client_error
|
77
|
+
else
|
78
|
+
DefaultErrorCode
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
error_code = error_code.to_sym
|
83
|
+
Info.new(error_msg, error_code, error_backtrace)
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def self.remove_html_tags(string_with_tags)
|
89
|
+
string_with_tags.gsub(/<\/?[^>]+>/, '')
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.error_info_default
|
93
|
+
Info.new(DefaultErrorMsg, DefaultErrorCode, nil)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
# This is wrapper for holding rest response information as well as
|
19
|
+
# passing selection of ViewProcessor from Thor selection to render view
|
20
|
+
# selection
|
21
|
+
module DTK::Client
|
22
|
+
class Response
|
23
|
+
module RenderHelperMixin
|
24
|
+
def render_attributes_init!
|
25
|
+
@semantic_datatype = nil
|
26
|
+
@skip_render = false
|
27
|
+
@render_type = Render::Type::DEFAULT
|
28
|
+
end
|
29
|
+
private :render_attributes_init!
|
30
|
+
|
31
|
+
def render_data(print_error_table = false)
|
32
|
+
return if @skip_render
|
33
|
+
|
34
|
+
@print_error_table ||= print_error_table
|
35
|
+
|
36
|
+
render_opts = {
|
37
|
+
:render_type => @render_type,
|
38
|
+
:semantic_datatype => @semantic_datatype,
|
39
|
+
:print_error_table => @print_error_table
|
40
|
+
}
|
41
|
+
Render.render(data, render_opts)
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_render_as_table!(semantic_datatype = nil)
|
45
|
+
return self unless ok?
|
46
|
+
|
47
|
+
unless semantic_datatype ||= semantic_datatype_in_payload
|
48
|
+
error_hash = {
|
49
|
+
'message' => 'Server did not return table datatype',
|
50
|
+
'on_client' => false
|
51
|
+
}
|
52
|
+
return ErrorResponse::Internal.new(error_hash)
|
53
|
+
end
|
54
|
+
@semantic_datatype = normalize_semantic_datatype(semantic_datatype)
|
55
|
+
@render_type = Render::Type::TABLE
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
59
|
+
def skip_render(skip)
|
60
|
+
@skip_render = skip
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def semantic_datatype_in_payload
|
66
|
+
self['datatype'] && self['datatype'].to_sym
|
67
|
+
end
|
68
|
+
|
69
|
+
def hash_part
|
70
|
+
keys.inject(Hash.new){|h,k|h.merge(k => self[k])}
|
71
|
+
end
|
72
|
+
|
73
|
+
def normalize_semantic_datatype(semantic_datatype)
|
74
|
+
semantic_datatype && semantic_datatype.to_sym
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
# This is wrapper for holding rest response information as well as
|
19
|
+
# passing selection of ViewProcessor from Thor selection to render view
|
20
|
+
# selection
|
21
|
+
module DTK::Client
|
22
|
+
class Response
|
23
|
+
class Ok < self
|
24
|
+
def initialize(data = {})
|
25
|
+
super('data'=> data, 'status' => 'ok')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class NotOk < self
|
30
|
+
def initialize(data = {})
|
31
|
+
super('data'=> data, 'status' => 'notok')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class NoOp < self
|
36
|
+
def render_data
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class ErrorResponse < self
|
41
|
+
include ::DTK::Common::Response::ErrorMixin
|
42
|
+
def initialize(hash = {})
|
43
|
+
super('errors' => [hash])
|
44
|
+
end
|
45
|
+
private :initialize
|
46
|
+
|
47
|
+
class Usage < self
|
48
|
+
def initialize(hash_or_string = {})
|
49
|
+
hash = (hash_or_string.kind_of?(String) ? {'message' => hash_or_string} : hash_or_string)
|
50
|
+
super({'code' => 'error'}.merge(hash))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class Internal < self
|
55
|
+
def initialize(hash = {})
|
56
|
+
super({'code' => 'error'}.merge(hash).merge('internal' => true))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
@@ -0,0 +1,83 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
# This is wrapper for holding rest response information as well as
|
19
|
+
# passing selection of ViewProcessor from Thor selection to render view
|
20
|
+
# selection
|
21
|
+
require 'dtk_common_core'
|
22
|
+
|
23
|
+
module DTK::Client
|
24
|
+
class Response < ::DTK::Common::Response
|
25
|
+
require_relative('response/error_handler')
|
26
|
+
require_relative('response/render_helper')
|
27
|
+
require_relative('response/subclasses')
|
28
|
+
|
29
|
+
include RenderHelperMixin
|
30
|
+
|
31
|
+
def initialize(hash = {})
|
32
|
+
super(hash)
|
33
|
+
@print_error_table = false #we use it if we want to print 'error legend' for given tables
|
34
|
+
render_attributes_init!
|
35
|
+
end
|
36
|
+
|
37
|
+
# opts can be
|
38
|
+
# :default_error_if_nil - Boolean
|
39
|
+
def error_info?(opts = {})
|
40
|
+
ErrorHandler.error_info?(self, opts)
|
41
|
+
end
|
42
|
+
|
43
|
+
# This method is used so that client side actions can be wrapped like calls to server
|
44
|
+
def self.wrap_as_response(data = {}, &block)
|
45
|
+
results = (block ? yield : data)
|
46
|
+
if results.nil?
|
47
|
+
NoOp.new
|
48
|
+
elsif results.kind_of?(Response)
|
49
|
+
results
|
50
|
+
else
|
51
|
+
Ok.new(results)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def index_data(*indexes)
|
56
|
+
index_common(*indexes) { |_indexes| nil }
|
57
|
+
end
|
58
|
+
|
59
|
+
def required(*indexes)
|
60
|
+
index_common(*indexes) do |indexes|
|
61
|
+
raise Error, "Missing response field 'response[:#{indexes.join('][:')}]'"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def index_common(*indexes, &block_when_no_data)
|
68
|
+
if indexes.empty?
|
69
|
+
raise Error, 'indexes should not be empty'
|
70
|
+
else
|
71
|
+
val = data
|
72
|
+
indexes.each do |key|
|
73
|
+
unless val.kind_of?(::Hash) and val.has_key?(key.to_s)
|
74
|
+
return block_when_no_data.call(indexes)
|
75
|
+
end
|
76
|
+
val = val[key.to_s]
|
77
|
+
end
|
78
|
+
val
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
require 'singleton'
|
19
|
+
|
20
|
+
module DTK::Client
|
21
|
+
##
|
22
|
+
# Session Singleton we will use to hold connection instance, just a singleton wrapper.
|
23
|
+
# During shell input it will be needed only once, so singleton was obvious solution.
|
24
|
+
#
|
25
|
+
class Session
|
26
|
+
include Singleton
|
27
|
+
|
28
|
+
attr_accessor :conn
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
@conn = Conn.new
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.get_connection
|
35
|
+
instance.conn
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.connection_username
|
39
|
+
instance.conn.get_username
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.re_initialize
|
43
|
+
instance.conn = nil
|
44
|
+
instance.conn = Conn.new
|
45
|
+
instance.conn.cookies
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.logout
|
49
|
+
# from this point @conn is not valid, since there are no cookies set
|
50
|
+
instance.conn.logout
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.rest_post(route, post_body = {})
|
54
|
+
instance.conn.post(route, post_body)
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.rest_get(route, opts = {})
|
58
|
+
instance.conn.get(route, opts)
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
require 'yaml'
|
19
|
+
|
20
|
+
module DTK::Client
|
21
|
+
module Auxiliary
|
22
|
+
def snake_to_camel_case(snake_form)
|
23
|
+
snake_form.to_s.gsub('-','_').to_s.split('_').map{|t|t.capitalize}.join('')
|
24
|
+
end
|
25
|
+
|
26
|
+
def snake_form(command_class, seperator='_')
|
27
|
+
command_class.to_s.gsub(/^.*::/, '').gsub(/Command$/,'').scan(/[A-Z][a-z]+/).map{|w|w.downcase}.join(seperator)
|
28
|
+
end
|
29
|
+
|
30
|
+
def hash_to_yaml(hash_content)
|
31
|
+
YAML.dump(hash_content)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
require 'highline/import'
|
19
|
+
|
20
|
+
module DTK::Client
|
21
|
+
module Console
|
22
|
+
# Display confirmation prompt and repeat message until expected answer is given
|
23
|
+
#
|
24
|
+
# opts can have keys
|
25
|
+
# :disable_ctrl_c - Boolean (default: true)
|
26
|
+
# :add_options - Boolean (default: false)
|
27
|
+
def self.prompt_yes_no(message, opts = {})
|
28
|
+
# used to disable skip with ctrl+c
|
29
|
+
prompt_context(opts) do
|
30
|
+
message += ' (yes|no)' if opts[:add_options]
|
31
|
+
HighLine.agree(message)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.wait_animation(message, time_seconds)
|
36
|
+
print message
|
37
|
+
print " [ ]"
|
38
|
+
STDOUT.flush
|
39
|
+
time_seconds.downto(1) do
|
40
|
+
1.upto(4) do |i|
|
41
|
+
next_output = "\b\b\b\b\b\b\b"
|
42
|
+
case
|
43
|
+
when i % 4 == 0
|
44
|
+
next_output += "[ = ]"
|
45
|
+
when i % 3 == 0
|
46
|
+
next_output += "[ = ]"
|
47
|
+
when i % 2 == 0
|
48
|
+
next_output += "[ = ]"
|
49
|
+
else
|
50
|
+
next_output += "[ = ]"
|
51
|
+
end
|
52
|
+
|
53
|
+
print next_output
|
54
|
+
STDOUT.flush
|
55
|
+
sleep(0.25)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
# remove loading animation
|
59
|
+
print "\b\b\b\b\b\b\bRefreshing..."
|
60
|
+
STDOUT.flush
|
61
|
+
puts
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
# opts can have keys
|
67
|
+
# :disable_ctrl_c - Boolean (default: true)
|
68
|
+
def self.prompt_context(opts = {}, &body)
|
69
|
+
"#{opts[:disable_ctrl_c]}" == 'false' ? body.call : disable_ctrl_c(&body)
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.disable_ctrl_c(&body)
|
73
|
+
trap('INT', 'SIG_IGN')
|
74
|
+
begin
|
75
|
+
body.call
|
76
|
+
ensure
|
77
|
+
trap('INT', false)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::Client
|
19
|
+
#
|
20
|
+
# Class dedicated for caching data on local system as well as for cookie management
|
21
|
+
#
|
22
|
+
class DiskCacher
|
23
|
+
# file name to hold cookies
|
24
|
+
COOKIE_HOLDER_NAME = 'tempdtkstore'
|
25
|
+
FILE_DELIMITER = '--'
|
26
|
+
|
27
|
+
def initialize(cache_dir = OsUtil.temp_dir)
|
28
|
+
@cache_dir = cache_dir
|
29
|
+
@current_user = Configurator.client_username
|
30
|
+
end
|
31
|
+
|
32
|
+
def fetch(file_name, max_age = 0, use_mock_up = true)
|
33
|
+
file = Digest::MD5.hexdigest(file_name)
|
34
|
+
# current user is important so that there are no clashes in writting to temp file
|
35
|
+
# between multiple users on same machine
|
36
|
+
file_path = File.join(@cache_dir, "#{@current_user}#{FILE_DELIMITER}#{file}")
|
37
|
+
|
38
|
+
# we check if the file -- a MD5 hexdigest of the URL -- exists
|
39
|
+
# in the dir. If it does and the data is fresh, we just read
|
40
|
+
# data from the file and return
|
41
|
+
if File.exists? file_path
|
42
|
+
return File.new(file_path).read if ((Time.now - File.mtime(file_path)) < max_age)
|
43
|
+
end
|
44
|
+
|
45
|
+
# if the file does not exist (or if the data is not fresh), we
|
46
|
+
# make an get request and save it to a file
|
47
|
+
response_string = ''
|
48
|
+
response = Session.rest_get("metadata/get/#{file_name}")
|
49
|
+
File.open(file_path, 'w') { |f| f << response_string = response.data } if response.ok?
|
50
|
+
response_string
|
51
|
+
end
|
52
|
+
|
53
|
+
def save_cookie(cookie_content)
|
54
|
+
file_path = File.join(@cache_dir, COOKIE_HOLDER_NAME)
|
55
|
+
File.open(file_path, 'w') do |file|
|
56
|
+
Marshal.dump(cookie_content, file)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def load_cookie
|
61
|
+
file_path = File.join(@cache_dir, COOKIE_HOLDER_NAME)
|
62
|
+
cookie_content = File.exists?(file_path) ? File.open(file_path) {|f| Marshal.load(f)} : nil
|
63
|
+
cookie_content
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|