dtk-client 0.10.3 → 0.10.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dd1abbc6f5062ad48d35ba88b53cfaf6486c0aa2
4
- data.tar.gz: df24b3e1f53d12977293b7622b52a2ed4f5db48a
3
+ metadata.gz: 43813c96b0c40e8459d6668ca71bd0b8db38958f
4
+ data.tar.gz: ab8249e25eb9242e7b09f45b68b834e5c059764c
5
5
  SHA512:
6
- metadata.gz: 28a5f3cf4bf0c1788abb74067e73335626d82df5077a2007bd0619b2195fc7145d6618c00702c68cdd6f9a1aa600219b94619a3add7357ddfcaa4a062b23103b
7
- data.tar.gz: 1b4369cfcca59952127f284185c190ab71543647ac46a73d6b119cf960a705554fc866676a2a8d40da4664dddcebc129c5bbbb8573b97fa55b12cb650f4075d4
6
+ metadata.gz: 4dbb96de07e1c8ca3f6721b15151196e91f52444b002aef643fedd7aad32e494d2db00d499a807abc474909d7374d1256861fe90b03e2d1ad8a63e9d665651ba
7
+ data.tar.gz: abc0b3255033efc1ad9ee47e99eab523e25f4226732ae837de6c36cb1b9bbe99dd696d021ee18f46aa4518392f09997cb83aa809c283eb3040d6ee4f629fba85
@@ -25,10 +25,9 @@ module DTK::Client
25
25
  sc.flag Token.version
26
26
  sc.action do |_global_options, options, args|
27
27
  module_name = args[0]
28
- module_ref = module_ref_in_options_or_context(:module_ref => module_name, :version => options[:version])
28
+ module_ref = module_ref_object_from_options_or_context(:module_ref => module_name, :version => options[:version])
29
29
  arg = {
30
30
  :module_ref => module_ref,
31
- :module_name => module_name,
32
31
  :target_directory => args[1]
33
32
  }
34
33
  Operation::Module.clone_module(arg)
@@ -25,7 +25,7 @@ module DTK::Client
25
25
  sc.switch Token.skip_prompt
26
26
 
27
27
  sc.action do |_global_options, options, args|
28
- module_ref = module_ref_in_options_or_context?(:module_ref => args[0], :version => options[:version])
28
+ module_ref = module_ref_object_from_options_or_context?(:module_ref => args[0], :version => options[:version])
29
29
  Operation::Module.delete_from_remote(:module_ref => module_ref, :skip_prompt => options[:skip_prompt])
30
30
  end
31
31
  end
@@ -37,7 +37,7 @@ module DTK::Client
37
37
  # in so doing installes depedent modules onto teh dtk server; this step though does not install main module onto
38
38
  # server (the later step Operation::Module.install does this)
39
39
  has_remote_repo = true
40
- module_ref = module_ref_in_options_or_context?(:module_ref => module_name, :version => version)
40
+ module_ref = module_ref_object_from_options_or_context?(:module_ref => module_name, :version => version)
41
41
  target_repo_dir = Operation::Module.install_from_catalog(:module_ref => module_ref, :version => options[:version], :directory_path => directory_path)
42
42
  end
43
43
 
@@ -48,7 +48,7 @@ module DTK::Client
48
48
  end
49
49
 
50
50
  install_opts = directory_path ? { :directory_path => directory_path, :version => (version || 'master') } : options
51
- module_ref = module_ref_in_options_or_context?(install_opts)
51
+ module_ref = module_ref_object_from_options_or_context?(install_opts)
52
52
  operation_args = {
53
53
  :module_ref => module_ref,
54
54
  :base_dsl_file_obj => @base_dsl_file_obj,
@@ -25,7 +25,7 @@ module DTK::Client
25
25
  sc.action do |_global_options, options, _args|
26
26
  opts = {}
27
27
  unless options[:all]
28
- if module_ref = module_ref_in_options_or_context?(options)
28
+ if module_ref = module_ref_object_from_options_or_context?(options)
29
29
  opts.merge!(:module_ref => module_ref)
30
30
  end
31
31
  end
@@ -22,7 +22,7 @@ module DTK::Client
22
22
  command_body c, 'publish', 'Publish module installed on server to the repo manager' do |sc|
23
23
  sc.flag Token.directory_path, :desc => 'Absolute or relative path to module directory containing updates to publish; not need if in the module directory'
24
24
  sc.action do |_global_options, options, _args|
25
- module_ref = module_ref_in_options_or_context(options)
25
+ module_ref = module_ref_object_from_options_or_context(options)
26
26
  Operation::Module.publish(:module_ref => module_ref, :directory_path => options[:directory_path])
27
27
  end
28
28
  end
@@ -22,9 +22,9 @@ module DTK::Client
22
22
  command_body c, 'pull-dtkn', 'Pull content from repo manager to client module directory and push to server' do |sc|
23
23
  sc.flag Token.directory_path, :desc => 'Absolute or relative path to module directory containing content to update; not need if in the module directory'
24
24
  sc.action do |_global_options, options, _args|
25
- module_ref = module_ref_in_options_or_context(options)
25
+ module_ref = module_ref_object_from_options_or_context(options)
26
26
  Operation::Module.pull_dtkn(:module_ref => module_ref, :base_dsl_file_obj => @base_dsl_file_obj)
27
- Operation::Module.push(:module_ref => module_ref, :base_dsl_file_obj => @base_dsl_file_obj, :directory_path => options[:directory_path])
27
+ Operation::Module.push(:module_ref => module_ref, :base_dsl_file_obj => @base_dsl_file_obj, :directory_path => options[:directory_path], :method => "pulled")
28
28
  end
29
29
  end
30
30
  end
@@ -22,7 +22,7 @@ module DTK::Client
22
22
  command_body c, :push, 'Push content from client module directory to server' do |sc|
23
23
  sc.flag Token.directory_path, :desc => 'Absolute or relative path to module directory containing updates to push; not need if in the module directory'
24
24
  sc.action do |_global_options, options, _args|
25
- module_ref = module_ref_in_options_or_context(options)
25
+ module_ref = module_ref_object_from_options_or_context(options)
26
26
  Operation::Module.push(:module_ref => module_ref, :base_dsl_file_obj => @base_dsl_file_obj)
27
27
  end
28
28
  end
@@ -22,7 +22,7 @@ module DTK::Client
22
22
  command_body c, 'push-dtkn', 'Push content from client module directory to repo manager' do |sc|
23
23
  sc.flag Token.directory_path, :desc => 'Absolute or relative path to module directory containing updates to push; not need if in the module directory'
24
24
  sc.action do |_global_options, options, _args|
25
- module_ref = module_ref_in_options_or_context(options)
25
+ module_ref = module_ref_object_from_options_or_context(options)
26
26
  Operation::Module.push_dtkn(:module_ref => module_ref, :base_dsl_file_obj => @base_dsl_file_obj, :directory_path => options[:directory_path])
27
27
  end
28
28
  end
@@ -30,7 +30,7 @@ module DTK::Client
30
30
  # sc.switch Token.purge, :desc => 'Overwrite any content that presently exists in the service instance directory to be created'
31
31
  # sc.flag Token.version
32
32
  sc.action do |_global_options, options, args|
33
- module_ref = module_ref_in_options_or_context(options)
33
+ module_ref = module_ref_object_from_options_or_context(options)
34
34
  assembly_name = args[0]
35
35
  version = options[:version] || module_ref.version
36
36
  service_name = options[:service_name]
@@ -32,9 +32,9 @@ module DTK::Client
32
32
  if options[:uninstall_name].nil?
33
33
  module_ref =
34
34
  if module_name = args[0]
35
- module_ref_in_options_or_context?({:module_ref => module_name, :version => (version || 'master')}, module_refs_opts)
35
+ module_ref_object_from_options_or_context?({:module_ref => module_name, :version => (version || 'master')}, module_refs_opts)
36
36
  else
37
- module_ref_in_options_or_context(options, module_refs_opts)
37
+ module_ref_object_from_options_or_context(options, module_refs_opts)
38
38
  end
39
39
  else
40
40
  module_name = options["name"]
@@ -30,7 +30,7 @@ module DTK::Client
30
30
  # sc.switch Token.purge, :desc => 'Overwrite any content that presently exists in the service instance directory to be created'
31
31
  # sc.flag Token.version
32
32
  sc.action do |_global_options, options, args|
33
- module_ref = module_ref_in_options_or_context(options)
33
+ module_ref = module_ref_object_from_options_or_context(options)
34
34
  assembly_name = args[0]
35
35
  version = options[:version] || module_ref.version
36
36
  service_name = options[:service_name]
data/lib/cli/context.rb CHANGED
@@ -161,11 +161,11 @@ module DTK::Client
161
161
  ::DTK::DSL::FileType::ServiceInstance::DSLFile::Top
162
162
  ]
163
163
 
164
- def module_ref_in_options_or_context(options, module_refs_opts = {})
165
- module_ref_in_options_or_context?(options, module_refs_opts) || raise_error_when_missing_context(:module_ref, options)
164
+ def module_ref_object_from_options_or_context(options, module_refs_opts = {})
165
+ module_ref_object_from_options_or_context?(options, module_refs_opts) || raise_error_when_missing_context(:module_ref, options)
166
166
  end
167
167
 
168
- def module_ref_in_options_or_context?(options, module_refs_opts = {})
168
+ def module_ref_object_from_options_or_context?(options, module_refs_opts = {})
169
169
  # using :ignore_parsing_errors to ret namespace, name and version from .yaml file even if there are parsing errors
170
170
  @options.merge!(:ignore_parsing_errors => module_refs_opts[:ignore_parsing_errors])
171
171
 
data/lib/cli/version.rb CHANGED
@@ -18,7 +18,7 @@
18
18
  module DTK
19
19
  module Client
20
20
  module CLI
21
- VERSION="0.10.3"
21
+ VERSION="0.10.4"
22
22
  end
23
23
  end
24
24
  end
@@ -42,9 +42,14 @@ module DTK::Client
42
42
  @client_dir_path = opts[:client_dir_path]
43
43
  end
44
44
 
45
+ def self.pretty_print(module_name, namespace, version = nil)
46
+ # TODO: update ::DTK::Common::PrettyPrintForm to insert 'master' when version is nil
47
+ ::DTK::Common::PrettyPrintForm.module_ref(module_name, :namespace => namespace, :version => version || 'master')
48
+ end
45
49
  def pretty_print
46
- ::DTK::Common::PrettyPrintForm.module_ref(@module_name, :namespace => @namespace, :version => @version)
50
+ self.class.pretty_print(@module_name, @namespace, @version)
47
51
  end
52
+
48
53
  # TODO: look at deprecating print_form
49
54
  def print_form
50
55
  NamespaceModuleName.print_form(@namespace, @module_name, :version => @version)
@@ -41,35 +41,47 @@ module DTK::Client
41
41
 
42
42
  private
43
43
 
44
+ # opts can have keys
45
+ # :remote_info - Boolean
46
+ # :type
47
+ # :rsa_pub_key
44
48
  def module_version_exists?(module_ref, opts = {})
45
49
  self.class.module_version_exists?(module_ref, opts)
46
50
  end
47
-
48
51
  def self.module_version_exists?(module_ref, opts = {})
49
52
  type = opts[:type] || :common_module
50
- query_string_hash = QueryStringHash.new(module_ref_hash(module_ref).merge(:module_type => type))
53
+ query_string_hash = module_ref_query_string_hash(module_ref, module_type: type)
51
54
 
52
55
  if ret_remote_info = opts[:remote_info]
53
- query_string_hash.merge!(:remote_info => ret_remote_info, :rsa_pub_key => opts[:rsa_pub_key])
56
+ query_string_hash = query_string_hash.merge(:remote_info => ret_remote_info, :rsa_pub_key => opts[:rsa_pub_key])
54
57
  end
55
58
 
56
59
  response = rest_get(BaseRoute, query_string_hash)
57
60
  response.data.empty? ? nil : response
58
61
  end
59
62
 
63
+ def self.module_ref_post_body(module_ref)
64
+ PostBody.new(module_ref_hash(module_ref))
65
+ end
66
+
67
+ # opts can have keys:
68
+ # :module_type
69
+ def self.module_ref_query_string_hash(module_ref, opts = {})
70
+ QueryStringHash.new(module_ref_hash(module_ref, opts))
71
+ end
72
+
73
+ # opts can have keys:
74
+ # :module_type
60
75
  # Can be used as input hash for QueryParams and PostBody
61
- def self.module_ref_hash(module_ref)
76
+ def self.module_ref_hash(module_ref, opts = {})
62
77
  {
63
- :namespace => module_ref.namespace,
64
- :module_name => module_ref.module_name,
65
- :version? => module_ref.version
78
+ :namespace => module_ref.namespace,
79
+ :module_name => module_ref.module_name,
80
+ :version? => module_ref.version,
81
+ :module_type? => opts[:module_type]
66
82
  }
67
83
  end
68
84
 
69
- def self.module_ref_query_string_hash(module_ref)
70
- QueryStringHash.new(module_ref_hash(module_ref))
71
- end
72
-
73
85
  end
74
86
  end
75
87
  end
@@ -18,32 +18,30 @@
18
18
  module DTK::Client
19
19
  class Operation::Module
20
20
  class CloneModule < self
21
- attr_reader :module_ref, :target_repo_dir, :module_name, :version
22
- def initialize(module_name, module_ref, target_directory)
23
- @module_name = module_name
21
+ attr_reader :target_repo_dir, :module_ref
22
+ def initialize(module_ref, target_directory)
24
23
  @module_ref = module_ref
25
- @target_repo_dir = target_directory || ClientModuleDir.ret_path_with_current_dir(module_name)
26
- @version = module_ref.version
24
+ @target_repo_dir = target_directory || ClientModuleDir.ret_path_with_current_dir(module_ref.module_name)
27
25
  end
28
26
  private :initialize
29
27
 
30
28
  def self.execute(args = Args.new)
31
29
  wrap_operation(args) do |args|
32
30
  module_ref = args.required(:module_ref)
33
- module_name = args.required(:module_name)
34
31
  target_directory = args[:target_directory]
35
- new(module_name, module_ref, target_directory).clone_module
32
+ new(module_ref, target_directory).clone_module
36
33
  end
37
34
  end
38
35
 
39
36
  def clone_module
40
- opts = {
41
- :namespace => module_ref.namespace,
42
- :version => version
43
- }
37
+ unless module_info = module_version_exists?(@module_ref, :type => :common_module, :remote_info => true, :rsa_pub_key => SSHUtil.rsa_pub_key_content)
38
+ raise Error::Usage, "DTK module '#{@module_ref.pretty_print}' does not exist on the DTK Server."
39
+ end
44
40
 
45
- unless module_info = module_version_exists?(module_ref, :type => :common_module, :remote_info => true, :rsa_pub_key => SSHUtil.rsa_pub_key_content)
46
- raise Error::Usage, "DTK module '#{DTK::Common::PrettyPrintForm.module_ref(module_ref.module_name, opts)}' does not exist on server."
41
+ # This handles state where a depenent module is just created as a component module and consequently we tell server
42
+ # to create the common_module tied to it
43
+ unless module_info.data(:repo)
44
+ module_info = create_module_repo_from_component_info
47
45
  end
48
46
 
49
47
  branch = module_info.required(:branch, :name)
@@ -54,8 +52,8 @@ module DTK::Client
54
52
  :module_type => :common_module,
55
53
  :repo_url => module_info.required(:repo, :url),
56
54
  :branch => module_info.required(:branch, :name),
57
- :module_name => module_name,
58
- :repo_dir => target_repo_dir
55
+ :module_name => @module_ref.module_name,
56
+ :repo_dir => @target_repo_dir
59
57
  }
60
58
 
61
59
  ret = ClientModuleDir::GitRepo.clone_module_repo(clone_args)
@@ -64,8 +62,23 @@ module DTK::Client
64
62
  LoadSource.fetch_from_remote(module_info, self)
65
63
  end
66
64
 
67
- OsUtil.print_info("DTK module '#{DTK::Common::PrettyPrintForm.module_ref(module_ref.module_name, opts)}' has been successfully cloned into '#{ret.required(:target_repo_dir)}'")
65
+ OsUtil.print_info("DTK module '#{@module_ref.pretty_print}' has been successfully cloned into '#{ret.required(:target_repo_dir)}'")
66
+ end
67
+
68
+ def version
69
+ @module_ref.version
70
+ end
71
+
72
+ private
73
+
74
+ def create_module_repo_from_component_info
75
+ rest_post("#{BaseRoute}/create_repo_from_component_info", module_ref_post_body)
68
76
  end
77
+
78
+ def module_ref_post_body
79
+ self.class.module_ref_post_body(@module_ref)
80
+ end
81
+
69
82
  end
70
83
  end
71
84
  end
@@ -31,7 +31,7 @@ module DTK::Client
31
31
  @base_module_ref = base_module_ref
32
32
  @component_module_refs = component_module_refs
33
33
  @print_helper = PrintHelper.new(:module_ref => @base_module_ref, :source => :remote)
34
- @prompt_helper = PromptHelper.new(:update_all => opts[:skip_prompt])
34
+ @prompt_helper = PromptHelper.new(:update_all => opts[:skip_prompt], :update_none => opts[:update_none])
35
35
  end
36
36
  private :initialize
37
37
 
@@ -83,14 +83,7 @@ module DTK::Client; class Operation::Module
83
83
  :version? => version
84
84
  }
85
85
 
86
- response = rest_post "#{BaseRoute}/install_component_module", PostBody.new(post_body)
87
-
88
- clone_args = {
89
- :module_type => :component_module,
90
- :repo_url => response.required(:repo_url),
91
- :branch => response.required(:workspace_branch),
92
- :module_name => response.required(:full_module_name)
93
- }
86
+ response = rest_post "#{BaseRoute}/install_component_info", PostBody.new(post_body)
94
87
 
95
88
  @print_helper.print_done_message
96
89
  response
@@ -21,6 +21,7 @@ module DTK::Client
21
21
  def self.execute(args = Args.new)
22
22
  wrap_operation(args) do |args|
23
23
  module_ref = args.required(:module_ref)
24
+ method = args[:method] || "pushed"
24
25
 
25
26
  unless client_dir_path = module_ref.client_dir_path
26
27
  raise Error, "Not implemented yet; need to make sure module_ref.client_dir_path is set when client_dir_path given"
@@ -52,22 +53,46 @@ module DTK::Client
52
53
  )
53
54
 
54
55
  response = rest_post("#{BaseRoute}/update_from_repo", post_body)
56
+
57
+ if missing_dependencies = response.data(:missing_dependencies)
58
+ unless missing_dependencies.empty?
59
+ dependent_modules = missing_dependencies.map { |dependency| Install::ModuleRef.new(:namespace => dependency['namespace_name'], :module_name => dependency['display_name'], :version => dependency['version_info']) }
60
+ begin
61
+ Install::DependentModules.install(module_ref, dependent_modules, :update_none => true)
62
+ rescue TerminateInstall
63
+ @print_helper.print_terminated_installation
64
+ return nil
65
+ end
66
+ end
67
+ response = rest_post("#{BaseRoute}/update_from_repo", post_body.merge(:skip_missing_check => true))
68
+ end
55
69
  # TODO: DTK-2786; uncomment out to see what diffs is returning for different examples of what is deleted, added or modified before push
56
70
  # pp [:debug_diffs, response.data(:diffs)]
57
- process_semantic_diffs(response.data(:diffs))
71
+ print = process_semantic_diffs(response.data(:diffs), method)
58
72
 
59
73
  # if diffs is nil then indicate no diffs, otherwise render diffs in yaml
60
- OsUtil.print_info("No Diffs to be pushed.") if response.data(:diffs).nil?
74
+ OsUtil.print_info("No Diffs to be #{method}.") if response.data(:diffs).nil? || !print
61
75
  nil
62
76
  end
63
77
  end
64
78
 
65
- def self.process_semantic_diffs(diffs)
79
+ def self.process_semantic_diffs(diffs, method)
66
80
  return if (diffs || {}).empty?
67
- OsUtil.print_info("\nDiffs that were pushed:")
81
+ print = false
82
+
83
+ diffs.each {|diff| print = true unless diff[1].nil?}
84
+
85
+ if print
86
+ OsUtil.print_info("\nDiffs that were #{method}:")
87
+
88
+ diffs.each { |v| diffs.delete(v[0]) if v[1].nil? }
89
+ OsUtil.print(hash_to_yaml(diffs).gsub("---\n", ""))
90
+ end
91
+
92
+ print
93
+ end
68
94
 
69
- diffs.each { |v| diffs.delete(v[0]) if v[1].nil? }
70
- OsUtil.print(hash_to_yaml(diffs).gsub("---\n", ""))
95
+ class TerminateInstall < ::Exception
71
96
  end
72
97
  end
73
98
  end
@@ -23,6 +23,7 @@ module DTK::Client
23
23
  module_ref = args.required(:module_ref)
24
24
  name = args.required(:name)
25
25
  version = args.required(:version)
26
+ versions = nil
26
27
 
27
28
  unless name.nil?
28
29
  query_string_hash = QueryStringHash.new(
@@ -57,23 +58,15 @@ module DTK::Client
57
58
 
58
59
  raise Error::Usage, "Invalid module name." if module_ref.nil?
59
60
 
60
- opts = {
61
- :namespace => module_ref.namespace,
62
- :version => module_ref.version
63
- }
64
-
65
61
  unless args[:skip_prompt]
66
- return false unless Console.prompt_yes_no("Are you sure you want to uninstall module '#{DTK::Common::PrettyPrintForm.module_ref(module_ref.module_name, opts)}' from the server?", :add_options => true)
62
+ return false unless Console.prompt_yes_no("Are you sure you want to uninstall module '#{module_ref.pretty_print}' from the DTK Server?", :add_options => true)
67
63
  end
68
64
 
69
- post_body = PostBody.new(
70
- :module_name => module_ref.module_name,
71
- :namespace => module_ref.namespace,
72
- :version? => module_ref.version
73
- )
65
+ post_body = module_ref_post_body(module_ref)
66
+ post_body.merge!(:versions => versions) if versions
74
67
 
75
68
  rest_post("#{BaseRoute}/delete", post_body)
76
- OsUtil.print_info("DTK module '#{DTK::Common::PrettyPrintForm.module_ref(module_ref.module_name, opts)}' has been deleted successfully.")
69
+ OsUtil.print_info("DTK module '#{module_ref.pretty_print}' has been uninstalled successfully.")
77
70
  nil
78
71
  end
79
72
  end
@@ -40,14 +40,15 @@ module DTK::Client
40
40
  post_body = PostBody.new(
41
41
  :task_params? => task_params
42
42
  )
43
- response = rest_post("#{BaseRoute}/#{service_instance}/#{action}", post_body)
43
+ encoded_action = URI.encode_www_form_component("#{action}")
44
+ response = rest_post("#{BaseRoute}/#{service_instance}/#{encoded_action}", post_body)
44
45
 
45
46
  if confirmation_message = response.data(:confirmation_message)
46
47
  unless Console.prompt_yes_no("Service instance has been stopped, do you want to start it?", :add_options => true)
47
48
  return Response::Ok.new(:empty_workflow => true)
48
49
  end
49
50
 
50
- response = rest_post("#{BaseRoute}/#{service_instance}/#{action}", post_body.merge!(:start_assembly => true, :skip_violations => true))
51
+ response = rest_post("#{BaseRoute}/#{service_instance}/#{encoded_action}", post_body.merge!(:start_assembly => true, :skip_violations => true))
51
52
  end
52
53
 
53
54
  if response.data(:empty_workflow)
@@ -54,7 +54,7 @@ module DTK::Client
54
54
  end
55
55
  end
56
56
 
57
- raise Error, errors unless errors.empty?
57
+ raise Error::Usage, errors unless errors.empty?
58
58
  end
59
59
 
60
60
  private
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dtk-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.3
4
+ version: 0.10.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reactor8
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-19 00:00:00.000000000 Z
11
+ date: 2017-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dtk-common-core
@@ -380,7 +380,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
380
380
  version: '0'
381
381
  requirements: []
382
382
  rubyforge_project:
383
- rubygems_version: 2.4.6
383
+ rubygems_version: 2.5.1
384
384
  signing_key:
385
385
  specification_version: 4
386
386
  summary: DTK CLI client for DTK server interaction.