dtk-client 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ODdhNDYxZmYwMjY5YjVlODJhNzA4YjAzNGZlYTJiMWUzNDU4ZTQ3MQ==
5
- data.tar.gz: !binary |-
6
- YWU3YjdjMjgxNjk4MDMwZDJkMjM5NjhkM2QxNmUwNjQxYTQyMWFiNA==
2
+ SHA1:
3
+ metadata.gz: d6d5f969664f0353c5a8389cb2ff93c540eb3e69
4
+ data.tar.gz: e7161714340eceba543449faceaeed05244c96f6
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YjgxYTk4MWM2ODA2OWNiNjI5NjQwYjJlZGI0MWY5MTMzNjgzMGUyZjExZTZi
10
- OWUxMmQwMjFlYmEyMWI0ZGE1OWQ1YmMyOTI0MzljMDU4MDI0YzM2NmY0ZWEw
11
- ZjY0YTliNzRmMGZjMmMzYzg4YzM5ZDFiNzNkZTBiNWY1OTM3NjQ=
12
- data.tar.gz: !binary |-
13
- MDMyYzU2YWZmYzc4NjQ0YTI2YTIzN2E2OTllMjRhMDZlM2Q5ODU2ZGY1ZTI5
14
- M2Q2OTY3NWY5ODJiOGMxZWY3MzZiZDdhZWViZTZiNGMyYzNlM2Q0YmQ0ODkx
15
- N2NlNzZhYWE5Y2UzYWIzOGJjZDc3ZWUzYzFmZDcyYmNhNzdkMTM=
6
+ metadata.gz: 84773c714f5c6ec8b62c6fe5e3d3aebdd26a75097864e2be1caa5fd217a142109f3ce82a7f0b085182ffcf6de58ad39460504e2e890ddc2b1fab037bccd51427
7
+ data.tar.gz: bad5dfff733069e5538294cc04910251bfcdd8fbbade2e60fe73a479737100cf070f42d9f2e2c7ea7661ca6c1c879c048fb3cea7221a02f870f11ddc21e4b1a4
data/dtk-client.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.files += Dir.glob("puppet/**/*")
16
16
  gem.files += Dir.glob("spec/**/*")
17
17
  gem.files += Dir.glob("views/**/*")
18
-
18
+
19
19
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
20
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
21
21
  gem.name = "dtk-client"
@@ -29,7 +29,7 @@ Gem::Specification.new do |gem|
29
29
  gem.add_dependency 'hirb','~> 0.7.0'
30
30
  gem.add_dependency 'thor','~> 0.15.4'
31
31
  gem.add_dependency 'erubis','~> 2.7.0'
32
- gem.add_dependency 'dtk-common-core','~> 0.6.0'
32
+ gem.add_dependency 'dtk-common-core','0.7.0'
33
33
  gem.add_dependency 'git','~> 1.2.6'
34
34
  gem.add_dependency 'colorize','~> 0.5.8'
35
35
  gem.add_dependency 'highline', '1.6.16'
@@ -1,15 +1,68 @@
1
1
  module DTK::Client
2
2
  module AccessControlMixin
3
3
 
4
- def chmod_aux(module_id, permission_string, namespace = nil)
4
+ def chmod_aux(module_id, permission_string, namespace = nil, chmod_action = :chmod)
5
5
  permission_selector = PermissionUtil.validate_permissions!(permission_string.downcase)
6
6
  post_body = {
7
7
  :module_id => module_id,
8
8
  :permission_selector => permission_selector,
9
+ :chmod_action => chmod_action,
9
10
  :rsa_pub_key => SSHUtil.rsa_pub_key_content(),
10
11
  :remote_module_namespace => namespace
11
12
  }
12
- post rest_url("#{resolve_module_type}/remote_chmod"), post_body
13
+ response = post rest_url("#{resolve_module_type}/remote_chmod"), post_body
14
+ return response unless response.ok?
15
+
16
+ if response.data(:simple_flow)
17
+ puts "Module is now public."
18
+ else
19
+ # in case there are dependencies
20
+ main_module_name = response.data(:main_module)['full_name']
21
+ puts "Main module '#{main_module_name}' has dependencies that are not public: "
22
+ unless response.data(:missing_modules).empty?
23
+ missing = response.data(:missing_modules).collect { |a| a['full_name'] }
24
+ OsUtil.print(" These modules are missing on repository: #{missing.join(', ')}", :red)
25
+ end
26
+ unless response.data(:no_permission).empty?
27
+ no_permission = response.data(:no_permission).collect { |a| a['full_name'] }
28
+ OsUtil.print(" You cannot change permissions for dependencies: #{no_permission.join(', ')}", :yellow)
29
+ end
30
+ unless response.data(:with_permission).empty?
31
+ with_permission = response.data(:with_permission)
32
+ with_permission_names = with_permission.collect { |a| a['full_name'] }
33
+ OsUtil.print(" You can change permissions for dependencies: #{with_permission_names.join(', ')}", :white)
34
+
35
+ # fix for bug in comments for DTK-1959
36
+ # need to send hash instead of array to be able to parse properly in rest_request_params
37
+ with_permission_hash = {}
38
+ with_permission.each do |wp|
39
+ with_permission_hash.merge!("#{wp['name']}" => wp)
40
+ end
41
+
42
+ response.data["with_permission"] = with_permission_hash
43
+ end
44
+
45
+ puts "How should we resolve these dependencies: "
46
+ input = ::DTK::Shell::InteractiveWizard.resolve_input("(A)ll / (M)ain Module / (N)one ", ['M','A','N'], true)
47
+ if 'N'.eql?(input)
48
+ return nil
49
+ else
50
+ puts "Sending input information ... "
51
+ post_body = {
52
+ :module_id => module_id,
53
+ :module_info => response.data,
54
+ :public_action => 'A'.eql?(input) ? :all : :one,
55
+ :rsa_pub_key => SSHUtil.rsa_pub_key_content(),
56
+ :remote_module_namespace => namespace
57
+ }
58
+
59
+ response = post rest_url("#{resolve_module_type}/confirm_make_public"), post_body
60
+ return response unless response.ok?
61
+ puts "Modules are now public."
62
+ end
63
+ end
64
+
65
+ nil
13
66
  end
14
67
 
15
68
  def chown_aux(module_id, remote_user, namespace = nil)
@@ -674,6 +674,17 @@ module DTK::Client
674
674
  post rest_url("assembly/add_node"), post_body
675
675
  end
676
676
 
677
+ def create_node_group_aux(context_params)
678
+ assembly_or_workspace_id, node_group_name, node_template_identifier = context_params.retrieve_arguments([[:service_id, :workspace_id!],:option_1!,:option_2!],method_argument_names)
679
+ post_body = {
680
+ :assembly_id => assembly_or_workspace_id,
681
+ :cardinality => options.cardinality,
682
+ :node_group_name => node_group_name,
683
+ :node_template_identifier => node_template_identifier
684
+ }
685
+ post rest_url("assembly/add_node_group"), post_body
686
+ end
687
+
677
688
  def purge_aux(context_params)
678
689
  assembly_or_workspace_id = context_params.retrieve_arguments([REQ_ASSEMBLY_OR_WS_ID],method_argument_names)
679
690
  unless options.force?
@@ -22,7 +22,7 @@ PULL_CATALOGS = ["dtkn"]
22
22
  module DTK::Client
23
23
  class CommonModule
24
24
  dtk_require_common_commands('thor/module/import')
25
-
25
+
26
26
  def initialize(command,context_params)
27
27
  @command = command
28
28
  @context_params = context_params
@@ -374,12 +374,12 @@ module DTK::Client
374
374
 
375
375
  def make_public_module_aux(context_params)
376
376
  module_id = context_params.retrieve_arguments([REQ_MODULE_ID], method_argument_names)
377
- chmod_aux(module_id, "o+r", options.namespace)
377
+ chmod_aux(module_id, "o+r", options.namespace, :make_public)
378
378
  end
379
379
 
380
380
  def make_private_module_aux(context_params)
381
381
  module_id = context_params.retrieve_arguments([REQ_MODULE_ID], method_argument_names)
382
- chmod_aux(module_id, "o-rwd", options.namespace)
382
+ chmod_aux(module_id, "o-rwd", options.namespace, :make_private)
383
383
  end
384
384
 
385
385
  def add_collaborators_module_aux(context_params)
@@ -442,7 +442,7 @@ module DTK::Client
442
442
  # if catalog.to_s.eql?("origin")
443
443
  # push_clone_changes_aux(:component_module,component_module_id,version,options["message"]||DEFAULT_COMMIT_MSG,internal_trigger)
444
444
  if catalog.to_s.eql?("dtkn")
445
- module_refs_content = RemoteDependencyUtil.module_ref_content(module_location) if module_type == 'service_module'
445
+ module_refs_content = RemoteDependencyUtil.module_ref_content(module_location)
446
446
  remote_module_info = get_remote_module_info_aux(module_type.to_sym, module_id, options["namespace"], version, module_refs_content, local_namespace)
447
447
  return remote_module_info unless remote_module_info.ok?
448
448
 
@@ -34,7 +34,6 @@ module DTK::Client
34
34
  post_body = get_workspace_branch_info_post_body(module_type, module_id, version, opts).merge(:json_diffs => json_diffs, :commit_sha => commit_sha)
35
35
  post_body.merge!(:modification_type => opts[:modification_type]) if opts[:modification_type]
36
36
  post_body.merge!(:force_parse => true) if options['force-parse'] || opts[:force_parse]
37
- post_body.merge!(:skip_module_ref_update => true) if opts[:skip_module_ref_update]
38
37
  post_body.merge!(:update_from_includes => true) if opts[:update_from_includes]
39
38
 
40
39
  if opts[:set_parsed_false]
@@ -143,6 +143,10 @@ module DTK::Client
143
143
  unless File.exists?(identity_file_location)
144
144
  raise ::DTK::Client::DtkError, "Not able to find identity file, '#{identity_file_location}'"
145
145
  end
146
+ elsif default_identity_file = OsUtil.dtk_identity_file_location()
147
+ if File.exists?(default_identity_file)
148
+ identity_file_location = default_identity_file
149
+ end
146
150
  end
147
151
 
148
152
  context_params.forward_options({ :json_return => true })
@@ -160,8 +164,7 @@ module DTK::Client
160
164
 
161
165
  connection_string = "#{remote_user}@#{public_dns}"
162
166
 
163
- default_identity_file = OsUtil.dtk_identity_file_location()
164
-
167
+
165
168
  ssh_command = nil
166
169
 
167
170
  if identity_file_location
@@ -170,11 +173,6 @@ module DTK::Client
170
173
  elsif SSHUtil.ssh_reachable?(remote_user, public_dns)
171
174
  # it has PUB key access
172
175
  ssh_command = "ssh -o \"StrictHostKeyChecking no\" -o \"UserKnownHostsFile /dev/null\" #{connection_string}"
173
- else
174
- # using default identity_file
175
- if default_identity_file
176
- ssh_command = "ssh -o \"StrictHostKeyChecking no\" -o \"UserKnownHostsFile /dev/null\" -i #{default_identity_file} #{connection_string}"
177
- end
178
176
  end
179
177
 
180
178
  raise ::DTK::Client::DtkError, "No public key access or PEM provided, please grant access or provide valid PEM key" if ssh_command.nil?
@@ -73,6 +73,7 @@ module DTK::Client
73
73
  :context => {
74
74
  :add_component => "component_template",
75
75
  :create_node => "node_template",
76
+ :create_node_group => "node_template",
76
77
  :add_component_dependency => "component_template"
77
78
  },
78
79
  :command => {
@@ -621,6 +622,23 @@ TODO: will put in dot release and will rename to 'extend'
621
622
  DTK::Client::OsUtil.print(message, :yellow)
622
623
  end
623
624
 
625
+ desc "SERVICE-NAME/ID create-node-group ^^NODE-GROUP-NAME NODE-TEMPLATE [-n CARDINALITY]", "Add (stage) a new node group in the service."
626
+ method_option :cardinality, :aliases => '-n', :type => :string, :default => 1
627
+ def create_node_group(context_params)
628
+ response = create_node_group_aux(context_params)
629
+ return response unless response.ok?
630
+
631
+ @@invalidate_map << :assembly
632
+ @@invalidate_map << :assembly_node
633
+ @@invalidate_map << :service
634
+ @@invalidate_map << :service_node
635
+ @@invalidate_map << :workspace
636
+ @@invalidate_map << :workspace_node
637
+
638
+ message = "Created node group '#{response.data["display_name"]}'."
639
+ DTK::Client::OsUtil.print(message, :yellow)
640
+ end
641
+
624
642
  desc "SERVICE-NAME/ID link-components TARGET-CMP-NAME SOURCE-CMP-NAME [DEPENDENCY-NAME]","Link the target component to the source component."
625
643
  def link_components(context_params)
626
644
  link_components_aux(context_params)
@@ -48,6 +48,7 @@ module DTK::Client
48
48
  :context => {
49
49
  :add_component => "component_template",
50
50
  :create_node => "node_template",
51
+ :create_node_group => "node_template",
51
52
  :add_component_dependency => "component_template",
52
53
  :set_target => 'target'
53
54
  },
@@ -266,6 +267,23 @@ module DTK::Client
266
267
  DTK::Client::OsUtil.print(message, :yellow)
267
268
  end
268
269
 
270
+ desc "WORKSPACE-NAME/ID create-node-group ^^NODE-GROUP-NAME NODE-TEMPLATE [-n CARDINALITY]", "Add (stage) a new node group in the workspace."
271
+ method_option :cardinality, :aliases => '-n', :type => :string, :default => 1
272
+ def create_node_group(context_params)
273
+ response = create_node_group_aux(context_params)
274
+ return response unless response.ok?
275
+
276
+ @@invalidate_map << :assembly
277
+ @@invalidate_map << :assembly_node
278
+ @@invalidate_map << :service
279
+ @@invalidate_map << :service_node
280
+ @@invalidate_map << :workspace
281
+ @@invalidate_map << :workspace_node
282
+
283
+ message = "Created node group '#{response.data["display_name"]}'."
284
+ DTK::Client::OsUtil.print(message, :yellow)
285
+ end
286
+
269
287
  desc "WORKSPACE-NAME/ID link-components TARGET-CMP-NAME SOURCE-CMP-NAME [DEPENDENCY-NAME]","Link the target component to the source component."
270
288
  def link_components(context_params)
271
289
  link_components_aux(context_params)
@@ -1,3 +1,3 @@
1
1
  module DtkClient
2
- VERSION="0.7.0"
2
+ VERSION="0.7.1"
3
3
  end
@@ -468,7 +468,7 @@ module DTK
468
468
  namespace, name = nil, ''
469
469
 
470
470
  if (component_full_name||'').include?(':')
471
- match = component_full_name.match(/(\w*\-?\w*):{1}(.*)/)
471
+ match = component_full_name.match(/(^[^:]+):{1}(.*$)/)
472
472
  namespace, name = [$1,$2]
473
473
 
474
474
  return [nil, component_full_name] if (name.include?(':') && !name.include?('::'))
@@ -11,16 +11,16 @@ module DTK
11
11
 
12
12
  PP_LINE_HEAD = '--------------------------------- DATA ---------------------------------'
13
13
  PP_LINE = '------------------------------------------------------------------------'
14
- INVALID_INPUT = Client::OsUtil.colorize(" Input is not valid.", :yellow)
14
+ INVALID_INPUT = Client::OsUtil.colorize(" Input is not valid. ", :yellow)
15
15
  EC2_REGIONS = ['us-east-1','us-west-1','us-west-2','eu-west-1','sa-east-1','ap-northeast-1','ap-southeast-1','ap-southeast-2' ]
16
-
16
+
17
17
 
18
18
  def initialize
19
19
  end
20
20
 
21
21
  def self.validate_region(region)
22
22
  unless EC2_REGIONS.include? region
23
- raise ::DTK::Client::DtkValidationError.new("Region '#{region}' is not EC2 region, use one of: #{EC2_REGIONS.join(',')}")
23
+ raise ::DTK::Client::DtkValidationError.new("Region '#{region}' is not EC2 region, use one of: #{EC2_REGIONS.join(',')}")
24
24
  end
25
25
  end
26
26
 
@@ -42,7 +42,7 @@ module DTK
42
42
  validation = nil
43
43
  when :question
44
44
  output = "#{metadata[:question]} (#{metadata[:options].join('|')}): "
45
- validation =
45
+ validation =
46
46
  metadata[:options]
47
47
  when :selection
48
48
  options = ""
@@ -90,7 +90,7 @@ module DTK
90
90
  end
91
91
 
92
92
 
93
- def self.resolve_input(output, validation, is_required, is_recursion_call)
93
+ def self.resolve_input(output, validation, is_required, is_recursion_call=false)
94
94
  tab_prefix = is_recursion_call ? "\t" : ""
95
95
 
96
96
  # there was a bug within windows that does not support multiline input in readline method
@@ -100,10 +100,10 @@ module DTK
100
100
  puts prompt_input
101
101
  prompt_input = ">> "
102
102
  end
103
-
103
+
104
104
  # while line = Readline.readline(prompt_input, true)
105
105
  #using 'ask' from highline gem to be able to hide input for key and secret
106
- while line = ask("#{prompt_input}") { |q| q.echo = false}
106
+ while line = ask("#{prompt_input}") { |q| q.echo = true }
107
107
  if is_required && line.empty?
108
108
  puts INVALID_INPUT
109
109
  next
@@ -130,7 +130,7 @@ module DTK
130
130
  description =
131
131
  if param_info['display_name'] =~ Regexp.new(param_info['description'])
132
132
  param_info['display_name']
133
- else
133
+ else
134
134
  "#{param_info['display_name']} (#{param_info['description']})"
135
135
  end
136
136
  datatype_info = (param_info['datatype'] ? DTK::Client::OsUtil.colorize(" [#{param_info['datatype'].upcase}]", :yellow) : '')
@@ -143,7 +143,7 @@ module DTK
143
143
  checkup_hash[id] = {:value => line, :description => description}
144
144
  break
145
145
  end
146
-
146
+
147
147
  end
148
148
 
149
149
  # pp print for provided parameters
@@ -152,14 +152,14 @@ module DTK
152
152
  # make sure this is satisfactory
153
153
  while line = Readline.readline("Is provided information ok? (yes|no) ", true)
154
154
  # start all over again
155
- return resolve_missing_params(param_list) if 'no'.eql? line
155
+ return resolve_missing_params(param_list) if 'no'.eql? line
156
156
  # continue with the code
157
157
  break if 'yes'.eql? line
158
158
  end
159
159
 
160
160
  rescue Interrupt => e
161
161
  puts
162
- # TODO: Provide original error here
162
+ # TODO: Provide original error here
163
163
  raise DTK::Client::DtkError, "You have decided to skip correction wizard."
164
164
  end
165
165
 
@@ -188,7 +188,7 @@ end
188
188
  =begin
189
189
  desc "create","Wizard that will guide you trough creation of target and target-template"
190
190
  def create(context_params)
191
-
191
+
192
192
  # we get existing templates
193
193
  target_templates = post rest_url("target/list"), { :subtype => :template }
194
194
 
@@ -206,9 +206,9 @@ end
206
206
  # in case user has not selected template id we will needed information to create target
207
207
  wizard_params.concat([
208
208
  {:iaas_type => { :type => :selection, :options => [:ec2] }},
209
- {:aws_install => { :type => :question,
210
- :question => "Do we have your permission to add necessery 'key-pair' and 'security-group' to your EC2 account?",
211
- :options => ["yes","no"],
209
+ {:aws_install => { :type => :question,
210
+ :question => "Do we have your permission to add necessery 'key-pair' and 'security-group' to your EC2 account?",
211
+ :options => ["yes","no"],
212
212
  :required_options => ["yes"],
213
213
  :explanation => "This permission is necessary for creation of a custom target."
214
214
  }},
@@ -104,30 +104,21 @@ module DTK
104
104
  error_index = ""
105
105
  error_type = value_of(structured_element,'errors.dtk_type') || ""
106
106
 
107
- if error_type.empty?
108
- val = value_of(structured_element,'dtk_type')||''
109
- # extract e.g. 3.1.1.1 from '3.1.1.1 action' etc.
110
- error_type = val.scan( /\d+[,.]\d?[,.]?\d?[,.]?\d?[,.]?\d?/ ).first
111
- end
112
-
113
- # we set index for each message first => [ 1 ], second => [ 2 ], etc.
114
- if error_type == "user_error" || error_type == "test_error"
115
- error_index = "[ #{@error_data.size + 1} ]"
116
- else
117
- server_error = true
118
- error_index = error_type
119
- end
107
+ val = value_of(structured_element,'dtk_type')||''
108
+ # extract e.g. 3.1.1.1 from '3.1.1.1 action' etc.
109
+ error_index = "[ #{val.scan( /\d+[,.]\d?[,.]?\d?[,.]?\d?[,.]?\d?/ ).first} ]"
120
110
 
121
111
  # original table takes that index
122
112
  evaluated_element.send("#{k}=", error_index)
123
113
  # we set new error element
124
- error_element.id = error_index
125
- # if error_index.empty?
126
- if server_error
127
- error_element.message = "[SERVER ERROR] " + error_message
114
+ error_element.id = error_index
115
+
116
+ if error_type == "user_error"
117
+ error_element.message = "[USER ERROR] " + error_message
118
+ elsif error_type == "test_error"
119
+ error_element.message = "[TEST ERROR] " + error_message
128
120
  else
129
- error_element.message = "[USER ERROR] " + error_message if error_type == "user_error"
130
- error_element.message = "[TEST ERROR] " + error_message if error_type == "test_error"
121
+ error_element.message = "[SERVER ERROR] " + error_message
131
122
  end
132
123
 
133
124
  # add it with other
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dtk-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rich PELAVIN
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-23 00:00:00.000000000 Z
11
+ date: 2015-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.2.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.2.4
27
27
  - !ruby/object:Gem::Dependency
@@ -56,98 +56,98 @@ dependencies:
56
56
  name: mime-types
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.25'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.25'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: hirb
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.7.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.7.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: thor
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 0.15.4
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.15.4
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: erubis
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: 2.7.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 2.7.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: dtk-common-core
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: 0.6.0
117
+ version: 0.7.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - '='
123
123
  - !ruby/object:Gem::Version
124
- version: 0.6.0
124
+ version: 0.7.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: git
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ~>
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
131
  version: 1.2.6
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ~>
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: 1.2.6
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: colorize
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ~>
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
145
  version: 0.5.8
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ~>
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: 0.5.8
153
153
  - !ruby/object:Gem::Dependency
@@ -337,17 +337,17 @@ require_paths:
337
337
  - lib
338
338
  required_ruby_version: !ruby/object:Gem::Requirement
339
339
  requirements:
340
- - - ! '>='
340
+ - - ">="
341
341
  - !ruby/object:Gem::Version
342
342
  version: '0'
343
343
  required_rubygems_version: !ruby/object:Gem::Requirement
344
344
  requirements:
345
- - - ! '>='
345
+ - - ">="
346
346
  - !ruby/object:Gem::Version
347
347
  version: '0'
348
348
  requirements: []
349
349
  rubyforge_project:
350
- rubygems_version: 2.2.2
350
+ rubygems_version: 2.4.1
351
351
  signing_key:
352
352
  specification_version: 4
353
353
  summary: DTK CLI client for DTK server interaction.