dtk-client 0.6.3 → 0.6.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: 6ae387fa3ef1b1ab77afa462b3de70d85dc091d9
4
- data.tar.gz: 28a1fbd9f0f73e2e4d8b3a4071f50610957e5f35
3
+ metadata.gz: d46ddda1f2067a87c86d33e8ca4c9f5a296240a7
4
+ data.tar.gz: 52dc5c9d3fdcd9bfcd7eb61187b0af43033d7ae2
5
5
  SHA512:
6
- metadata.gz: d4c9d5be56fcdacca8fe807b471217ad2ea5a8a85ffa20b875d73b21b1adfcdb7ddf7225a1c08297210eb51efbc1d4c744ce465757a4b75fd7a9970ecad6fe61
7
- data.tar.gz: ba9ea50cf712535d0aa4b95cddf9ad11b1f5c451ee7a57e82b8cff7185645abd98043eba12a8e8235cd6f7e47ce5944583b0389515b5ff52218043d97b5ab868
6
+ metadata.gz: 14b2a72db3ec12725521967a979e5645e5072212d73a84ad02159aef55d51c60591e5757ca8018ccbfc4e3113a414c4adb44fd24e7115b087545aec9d1389911
7
+ data.tar.gz: 9f0d95dbbb042c5059eb375bb001451d60863c17b7860e00ef72d31270cc9074ee98bd82dbbbda5af6c7d7257f3b713f357410910d884f2484390693e0b07a6e
@@ -19,30 +19,26 @@ module DTK::Client
19
19
  # Method will trigger import for each missing module component
20
20
  #
21
21
  def trigger_module_component_import(missing_component_list, required_components, opts={})
22
- puts "Auto-importing missing component module(s)"
23
- does_not_exist, modules_to_import = validate_missing_components(missing_component_list)
24
-
25
- unless does_not_exist.empty?
26
- module_names = does_not_exist.collect{|x| "#{x['namespace']}/#{x['name']}"}
27
- OsUtil.print("You do no have access to component modules '#{module_names}' required by service module, or they do not exist on repo manager and will not be imported!", :yellow)
28
- return false unless Console.confirmation_prompt("Do you want to continue with import of available component modules and service module"+'?')
29
- end
22
+ puts "Auto-importing missing module(s)"
23
+ modules_to_import = missing_component_list
30
24
 
31
25
  required_components.each do |r_module|
32
26
  module_name = "#{r_module['namespace']}/#{r_module['name']}"
33
27
  module_name += "-#{r_module['version']}" if r_module['version']
34
- print "Using component module '#{module_name}'\n"
28
+ module_type = r_module['type']
29
+ print "Using #{module_type.gsub('_',' ')} '#{module_name}'\n"
35
30
  end
36
31
 
37
32
  modules_to_import.each do |m_module|
38
33
  module_name = "#{m_module['namespace']}/#{m_module['name']}"
39
34
  module_name += "-#{m_module['version']}" if m_module['version']
40
- print "Importing component module '#{module_name}' ... "
35
+ module_type = m_module['type']
36
+ print "Importing #{module_type.gsub('_',' ')} '#{module_name}' ... "
41
37
  new_context_params = ::DTK::Shell::ContextParams.new([module_name])
42
38
  new_context_params.override_method_argument!('option_2', m_module['version'])
43
- new_context_params.forward_options( { "skip_cloning" => false}).merge!(opts)
39
+ new_context_params.forward_options( { :skip_cloning => false, :skip_auto_install => true, :module_type => module_type}).merge!(opts)
44
40
 
45
- response = ContextRouter.routeTask("component_module", "install", new_context_params, @conn)
41
+ response = ContextRouter.routeTask(module_type, "install", new_context_params, @conn)
46
42
  puts(response.data(:does_not_exist) ? response.data(:does_not_exist) : "Done.")
47
43
  raise DTK::Client::DtkError, response.error_message unless response.ok?
48
44
  end
@@ -50,37 +46,6 @@ module DTK::Client
50
46
  Response::Ok.new()
51
47
  end
52
48
 
53
- # check if component modules dependencies specified in service module exist on repo manager
54
- def validate_missing_components(missing_component_list)
55
- thor_options = {}
56
- thor_options["remote"] = true
57
- new_context_params = ::DTK::Shell::ContextParams.new
58
- new_context_params.forward_options(thor_options)
59
- new_context_params.add_context_to_params(:"component-module", :"component-module")
60
- response = ContextRouter.routeTask("component_module", "list", new_context_params, @conn)
61
- return response unless response.ok?
62
-
63
- does_not_exist, modules_to_import = [], []
64
-
65
- missing_component_list.each do |missing_cmp|
66
- cmp = response.data.select{|x| x['display_name'].eql?("#{missing_cmp['namespace']}/#{missing_cmp['name']}")}
67
- if cmp.empty?
68
- does_not_exist << missing_cmp
69
- else
70
- cmp = cmp.first
71
- if remote_version = cmp['versions']
72
- missing_version = missing_cmp['version']||'CURRENT'
73
- does_not_exist << missing_cmp unless (remote_version.include?(missing_version))
74
- else
75
- does_not_exist << missing_cmp if missing_cmp['version']
76
- end
77
- end
78
- end
79
-
80
- modules_to_import = missing_component_list - does_not_exist
81
- return does_not_exist, modules_to_import
82
- end
83
-
84
49
  def resolve_missing_components(service_module_id, service_module_name, namespace_to_use, force_clone=false)
85
50
  # Get dependency component modules and cross reference them with local component modules
86
51
  module_component_list = post rest_url("service_module/list_component_modules"), { :service_module_id => service_module_id }
@@ -52,7 +52,7 @@ module DTK::Client
52
52
  # mode will be :create or :update
53
53
  # service_module_name_x can be name or fullname (NS:MOduleName)
54
54
  def promote_assembly_aux(mode,assembly_or_workspace_id,service_module_name_x=nil,assembly_template_name=nil,opts={})
55
- namespace = nil
55
+ namespace,local_clone_dir_exists = nil, nil
56
56
  post_body = {
57
57
  :assembly_id => assembly_or_workspace_id,
58
58
  :mode => mode.to_s
@@ -67,12 +67,10 @@ module DTK::Client
67
67
  end
68
68
 
69
69
  namespace ||= opts[:default_namespace]
70
- local_clone_dir_exists = Helper(:git_repo).local_clone_dir_exists?(:service_module, service_module_name, :namespace => namespace)
71
-
72
70
  if namespace
71
+ local_clone_dir_exists = Helper(:git_repo).local_clone_dir_exists?(:service_module, service_module_name, :namespace => namespace)
73
72
  post_body.merge!(:namespace => namespace)
74
73
  post_body.merge!(:local_clone_dir_exists => true) if local_clone_dir_exists
75
- # post_body.merge!(:local_clone_dir_exists => true) if Helper(:git_repo).local_clone_dir_exists?(:service_module, service_module_name, :namespace => namespace)
76
74
  end
77
75
 
78
76
  post_body.merge!(:assembly_template_name => assembly_template_name) if assembly_template_name
@@ -85,7 +83,7 @@ module DTK::Client
85
83
  service_module_name ||= response.data(:module_name)
86
84
  opts = {:local_branch=>workspace_branch, :namespace => namespace}
87
85
 
88
- if local_clone_dir_exists
86
+ if (mode == :update) || local_clone_dir_exists
89
87
  response = Helper(:git_repo).synchronize_clone(:service_module,service_module_name,commit_sha,opts)
90
88
  else
91
89
  response = Helper(:git_repo).create_clone_with_branch(:service_module, service_module_name, repo_url, workspace_branch, version, namespace)
@@ -257,9 +257,10 @@ module DTK::Client
257
257
 
258
258
  unless response.ok?
259
259
  response.set_data_hash({ :full_module_name => new_module_name })
260
- # remove new directory if import failed
261
- # DTK-1768: removed below; TODO: see if there is any case where applicable
262
- # FileUtils.rm_rf(module_final_dir) unless (namespace && git_import)
260
+ # remove new directory and leave the old one if import without namespace failed
261
+ if old_dir and (old_dir != module_final_dir)
262
+ FileUtils.rm_rf(module_final_dir) unless (namespace && git_import)
263
+ end
263
264
  return response
264
265
  end
265
266
 
@@ -283,19 +284,14 @@ module DTK::Client
283
284
  response = push_module_aux(context_params, true)
284
285
 
285
286
  unless response.ok?
286
- # remove new directory if import failed
287
- # DTK-1768: removed below; TODO: see if there is any case where applicable
288
- # Also think what should be done is if failure then move the directory back to old dir position
289
- # (if it has been moved)
290
- # FileUtils.rm_rf(module_final_dir) unless (namespace && git_import)
287
+ # remove new directory and leave the old one if import without namespace failed
288
+ if old_dir and (old_dir != module_final_dir)
289
+ FileUtils.rm_rf(module_final_dir) unless (namespace && git_import)
290
+ end
291
291
  return response
292
292
  end
293
293
 
294
- # remove the old one if no errors while importing
295
- # DTK-1768: removed below; and replaced by removing old dir if unequal to final dir
296
- # was not sure why clause namespace && git_import was in so kept this condition
297
- # FileUtils.rm_rf(old_dir) unless (namespace && git_import)
298
- # New:
294
+ # remove source directory if no errors while importing
299
295
  if old_dir and (old_dir != module_final_dir)
300
296
  FileUtils.rm_rf(old_dir) unless (namespace && git_import)
301
297
  end
@@ -319,6 +315,7 @@ module DTK::Client
319
315
  # in case of auto-import via service import, we skip cloning to speed up a process
320
316
  skip_cloning = context_params.get_forwarded_options()['skip_cloning'] if context_params.get_forwarded_options()
321
317
  do_not_raise = context_params.get_forwarded_options()[:do_not_raise] if context_params.get_forwarded_options()
318
+ skip_ainstall = context_params.get_forwarded_options() ? context_params.get_forwarded_options()[:skip_auto_install] : false
322
319
  module_type = get_module_type(context_params)
323
320
 
324
321
  # ignore_component_error = context_params.get_forwarded_options()[:ignore_component_error]||options.ignore? if context_params.get_forwarded_options()
@@ -344,14 +341,18 @@ module DTK::Client
344
341
  post_body.merge!(:additional_message => additional_message) if additional_message
345
342
 
346
343
  response = post rest_url("#{module_type}/import"), post_body
347
- RemoteDependencyUtil.print_dependency_warnings(response)
344
+ are_there_warnings = RemoteDependencyUtil.print_dependency_warnings(response)
345
+
346
+ # prompt to see if user is ready to continue with warnings/errors
347
+ if are_there_warnings
348
+ return false unless Console.confirmation_prompt("Do you want to ignore the warnings and proceed with import"+'?')
349
+ end
348
350
 
349
351
  # case when we need to import additional components
350
- if (response.ok? && (missing_components = response.data(:missing_module_components)))
352
+ if (response.ok? && !skip_ainstall && (missing_components = response.data(:missing_module_components)))
351
353
  required_components = response.data(:required_modules)
352
354
  opts = {:do_not_raise=>true}
353
355
  module_opts = ignore_component_error ? opts.merge(:ignore_component_error => true) : opts.merge(:additional_message=>true)
354
- module_opts.merge!(:module_type => 'component-module')
355
356
 
356
357
  continue = trigger_module_component_import(missing_components, required_components, module_opts)
357
358
  return unless continue
@@ -93,8 +93,8 @@ module DTK::Client
93
93
  post rest_url("node/info"), post_body
94
94
  end
95
95
 
96
- desc "NODE-NAME/ID ssh REMOTE-USER [--keypair PATH-TO-PEM]","SSH into node, optional parameters are path to keypair and remote user."
97
- method_option "--keypair",:type => :string, :desc => "Keypair used for connection, if not provided default is used", :banner => "KEYPAIR"
96
+ desc "NODE-NAME/ID ssh REMOTE-USER [-i PATH-TO-PEM]","SSH into node, optional parameters are path to indentity file."
97
+ method_option "--identity-file",:aliases => '-i',:type => :string, :desc => "Identity-File used for connection, if not provided default is used", :banner => "IDENTITY-FILE"
98
98
  def ssh(context_params)
99
99
  if OsUtil.is_windows?
100
100
  puts "[NOTICE] SSH functionality is currenly not supported on Windows."
@@ -102,11 +102,10 @@ module DTK::Client
102
102
  end
103
103
 
104
104
  node_id, remote_user = context_params.retrieve_arguments([:node_id!,:option_1!],method_argument_names)
105
- keypair_location = options.keypair
106
105
 
107
- if keypair_location
108
- unless File.exists?(keypair_location)
109
- raise ::DTK::Client::DtkError, "Not able to find keypair, '#{keypair_location}'"
106
+ if identity_file_location = options['identity-file']
107
+ unless File.exists?(identity_file_location)
108
+ raise ::DTK::Client::DtkError, "Not able to find identity file, '#{identity_file_location}'"
110
109
  end
111
110
  end
112
111
 
@@ -121,23 +120,20 @@ module DTK::Client
121
120
 
122
121
  connection_string = "#{remote_user}@#{public_dns}"
123
122
 
124
- default_keypair = OsUtil.dtk_keypair_location()
125
-
126
- # vanilla ssh command using only pub key
127
- vanilla_ssh =
123
+ default_identity_file = OsUtil.dtk_identity_file_location()
128
124
 
129
125
  ssh_command = nil
130
126
 
131
- if keypair_location
127
+ if identity_file_location
132
128
  # provided PEM key
133
- ssh_command = "ssh -o \"StrictHostKeyChecking no\" -o \"UserKnownHostsFile /dev/null\" -i #{keypair_location} #{connection_string}"
129
+ ssh_command = "ssh -o \"StrictHostKeyChecking no\" -o \"UserKnownHostsFile /dev/null\" -i #{identity_file_location} #{connection_string}"
134
130
  elsif SSHUtil.ssh_reachable?(remote_user, public_dns)
135
131
  # it has PUB key access
136
132
  ssh_command = "ssh -o \"StrictHostKeyChecking no\" -o \"UserKnownHostsFile /dev/null\" #{connection_string}"
137
133
  else
138
- # using default keypair
139
- if default_keypair
140
- ssh_command = "ssh -o \"StrictHostKeyChecking no\" -o \"UserKnownHostsFile /dev/null\" -i #{default_keypair} #{connection_string}"
134
+ # using default identity_file
135
+ if default_identity_file
136
+ ssh_command = "ssh -o \"StrictHostKeyChecking no\" -o \"UserKnownHostsFile /dev/null\" -i #{default_identity_file} #{connection_string}"
141
137
  end
142
138
  end
143
139
 
@@ -147,7 +143,7 @@ module DTK::Client
147
143
  Kernel.system(ssh_command)
148
144
  OsUtil.print("You are leaving SSH terminal, and returning to DTK Shell ...", :yellow)
149
145
  else
150
- return response
146
+ response
151
147
  end
152
148
  end
153
149
 
@@ -167,7 +167,7 @@ TODO: overlaps with different meaning
167
167
  ['set-attribute',"set-attribute ATTRIBUTE-NAME [VALUE] [-u]","# (Un)Set attribute value. The option -u will unset the attribute's value."],
168
168
  ['start', "start", "# Start node instance."],
169
169
  ['stop', "stop", "# Stop node instance."],
170
- ['ssh', "ssh REMOTE-USER [--keypair PATH-TO-PEM]", "# SSH into node, optional parameters are path to keypair and remote user."]
170
+ ['ssh', "ssh REMOTE-USER [-i PATH-TO-PEM]","# SSH into node, optional parameters are path to identity file."]
171
171
  ],
172
172
  :component => [
173
173
  ['info',"info","# Return info about component instance belonging to given node."],
@@ -449,7 +449,7 @@ TODO: will put in dot release and will rename to 'extend'
449
449
  # post rest_url("assembly/list_smoketests"), post_body
450
450
  #end
451
451
 
452
- desc "SERVICE-NAME/ID grant-access SYS-USER NAME [PATH-TO-PUB-KEY] [--nodes NODE-NAMES]", "Grant access to given service and its nodes"
452
+ desc "SERVICE-NAME/ID grant-access USER-ACCOUNT PUB-KEY-NAME [PATH-TO-PUB-KEY] [--nodes NODE-NAMES]", "Grants ssh access to user account USER-ACCOUNT for nodes in service instance"
453
453
  method_option :nodes, :type => :string, :default => nil
454
454
  def grant_access(context_params)
455
455
  service_id, system_user, rsa_key_name, path_to_rsa_pub_key = context_params.retrieve_arguments([:service_id!,:option_1!, :option_2!, :option_3],method_argument_names)
@@ -475,7 +475,7 @@ TODO: will put in dot release and will rename to 'extend'
475
475
  nil
476
476
  end
477
477
 
478
- desc "SERVICE-NAME/ID revoke-access SYS-USER NAME [--nodes NODE-NAMES]", "Revoke access to given service and its nodes"
478
+ desc "SERVICE-NAME/ID revoke-access USER-ACCOUNT PUB-KEY-NAME [PATH-TO-PUB-KEY] [--nodes NODE-NAMES]", "Revokes ssh access to user account USER-ACCOUNT for nodes in service instance"
479
479
  method_option :nodes, :type => :string, :default => nil
480
480
  def revoke_access(context_params)
481
481
  service_id, system_user, rsa_key_name = context_params.retrieve_arguments([:service_id!,:option_1!, :option_2!],method_argument_names)
@@ -431,10 +431,10 @@ module DTK::Client
431
431
  response = push(context_params,true)
432
432
 
433
433
  unless response.ok?
434
- # remove new directory if import failed
435
- # DTK-1768: removed below; TODO: see if need to put a variant back in
436
- # was not sure why clause namespace is there
437
- # FileUtils.rm_rf(module_final_dir) unless namespace
434
+ # remove new directory and leave the old one if import without namespace failed
435
+ if old_dir and (old_dir != module_final_dir)
436
+ FileUtils.rm_rf(module_final_dir) unless namespace
437
+ end
438
438
  return response
439
439
  end
440
440
 
@@ -197,5 +197,35 @@ module DTK::Client
197
197
 
198
198
  return post rest_url("target/delete"), post_body
199
199
  end
200
+
201
+ desc "TARGET-NAME/ID edit-target [--keypair KEYPAIR] [--security-group SECURITY-GROUP(S)]","Edit keypair or security-group for given target"
202
+ method_option :keypair, :type => :string
203
+ method_option :security_group, :type => :string, :aliases => '--security-groups'
204
+ def edit_target(context_params)
205
+ target_id = context_params.retrieve_arguments([:target_id!],method_argument_names)
206
+ keypair, security_group = context_params.retrieve_thor_options([:keypair, :security_group], options)
207
+
208
+ raise ::DTK::Client::DtkValidationError.new("You have to provide security-group or keypair to edit target!") unless keypair || security_group
209
+
210
+ security_groups, iaas_properties = [], {}
211
+ iaas_properties.merge!(:keypair => keypair) if keypair
212
+
213
+ if security_group
214
+ raise ::DTK::Client::DtkValidationError.new("Multiple security groups should be separated with ',' and without spaces between them (e.g. --security_groups gr1,gr2,gr3,...) ") if security_group.end_with?(',')
215
+ security_groups = security_group.split(',')
216
+ if (security_groups.empty? || security_groups.size==1)
217
+ iaas_properties.merge!(:security_group => security_group)
218
+ else
219
+ iaas_properties.merge!(:security_group_set => security_groups)
220
+ end
221
+ end
222
+ @@invalidate_map << :target
223
+
224
+ post_body = {
225
+ :target_id => target_id,
226
+ :iaas_properties => iaas_properties
227
+ }
228
+ return post rest_url("target/edit_target"), post_body
229
+ end
200
230
  end
201
231
  end
@@ -140,7 +140,7 @@ module DTK::Client
140
140
  ['set-attribute',"set-attribute ATTRIBUTE-NAME [VALUE] [-u]","# (Un)Set attribute value. The option -u will unset the attribute's value."],
141
141
  ['start', "start", "# Start node instance."],
142
142
  ['stop', "stop", "# Stop node instance."],
143
- ['ssh', "ssh REMOTE-USER [--keypair PATH-TO-PEM]", "# SSH into node, optional parameters are path to keypair and remote user."]
143
+ ['ssh', "ssh REMOTE-USER [-i PATH-TO-PEM]","# SSH into node, optional parameters are path to identity file."]
144
144
  ],
145
145
 
146
146
  :component => [
data/lib/configurator.rb CHANGED
@@ -144,8 +144,11 @@ module DTK
144
144
 
145
145
  def self.enter_catalog_credentials()
146
146
  property_template = {}
147
- { :username => 'Catalog Username', :password => 'Catalog Password' }.each do |p, v|
148
- value = ask("#{v}: ") { |q| q.echo = false if p == :password }
147
+ # needed to preserve the order for ruby 1.8.7
148
+ # ruby 1.8 does not preserve order of insertation
149
+ wizard_values = { :username => 'Catalog Username', :password => 'Catalog Password' }
150
+ [:username, :password].each do |p|
151
+ value = ask("#{wizard_values[p]}: ") { |q| q.echo = false if p == :password }
149
152
  property_template.store(p, value)
150
153
  end
151
154
  property_template
@@ -1,3 +1,3 @@
1
1
  module DtkClient
2
- VERSION="0.6.3"
2
+ VERSION="0.6.4"
3
3
  end
data/lib/util/os_util.rb CHANGED
@@ -9,7 +9,7 @@ module DTK
9
9
 
10
10
  extend Auxiliary
11
11
 
12
- DTK_KEYPAIR = 'dtk.pem'
12
+ DTK_IDENTITY_FILE = 'dtk.pem'
13
13
 
14
14
  class << self
15
15
  def is_mac?
@@ -181,10 +181,10 @@ module DTK
181
181
  #
182
182
  # Checks to find dtk.pem in configuration node, if not found displays tip message
183
183
  #
184
- def dtk_keypair_location()
185
- path_to_keypair = "#{dtk_local_folder}#{DTK_KEYPAIR}"
186
- return path_to_keypair if File.exists?(path_to_keypair)
187
- print("TIP: You can save your keypair as '#{path_to_keypair}' and it will be used as default keypair.", :yellow)
184
+ def dtk_identity_file_location()
185
+ path_to_identity_file = "#{dtk_local_folder}#{DTK_IDENTITY_FILE}"
186
+ return path_to_identity_file if File.exists?(path_to_identity_file)
187
+ print("TIP: You can save your identity file as '#{path_to_identity_file}' and it will be used as default identityfile.", :yellow)
188
188
  nil
189
189
  end
190
190
 
@@ -279,6 +279,7 @@ module DTK
279
279
  load File.expand_path('../../lib/shell/domain.rb', File.dirname(__FILE__))
280
280
  load File.expand_path('../../lib/domain/git_adapter.rb', File.dirname(__FILE__))
281
281
  load File.expand_path('../../lib/command_helpers/git_repo.rb', File.dirname(__FILE__))
282
+ load File.expand_path('../../lib/command_helpers/service_importer.rb', File.dirname(__FILE__))
282
283
  paths = []
283
284
  paths << File.expand_path('../../lib/commands/thor/*.rb', File.dirname(__FILE__))
284
285
  paths << File.expand_path('../../lib/commands/common/thor/*.rb', File.dirname(__FILE__))
@@ -10,14 +10,18 @@ module DTK
10
10
  class << self
11
11
 
12
12
  def print_dependency_warnings(response, success_msg=nil)
13
- return if response.nil? || response.data.nil?
13
+ are_there_warnings = false
14
+ return are_there_warnings if response.nil? || response.data.nil?
15
+
14
16
  warnings = response.data['dependency_warnings']
15
17
  if warnings && !warnings.empty?
16
18
  print_out "Following warnings have been detected for current module by Repo Manager:\n"
17
19
  warnings.each { |w| print_out(" - #{w}") }
18
20
  puts
21
+ are_there_warnings = true
19
22
  end
20
23
  print_out success_msg, :green if success_msg
24
+ are_there_warnings
21
25
  end
22
26
 
23
27
  def module_ref_content(location)
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.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rich PELAVIN
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-22 00:00:00.000000000 Z
11
+ date: 2014-10-27 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
117
  version: 0.6.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
124
  version: 0.6.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
@@ -328,12 +328,12 @@ require_paths:
328
328
  - lib
329
329
  required_ruby_version: !ruby/object:Gem::Requirement
330
330
  requirements:
331
- - - ">="
331
+ - - '>='
332
332
  - !ruby/object:Gem::Version
333
333
  version: '0'
334
334
  required_rubygems_version: !ruby/object:Gem::Requirement
335
335
  requirements:
336
- - - ">="
336
+ - - '>='
337
337
  - !ruby/object:Gem::Version
338
338
  version: '0'
339
339
  requirements: []