dtk-client 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
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: []