docker_core 0.0.17 → 0.0.21

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docker_core.rb +128 -85
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85249b5bf70ef8b313ad2ff28898889db66e92c5b96af40a024e61131453ec4c
4
- data.tar.gz: e4dafbe9bfdcc3fd40fcc3d93b76b8557b599ba07201fdfddff0bcb08ff9c65f
3
+ metadata.gz: 275fb150858e7ab66ce56d30261f078e4298b38ef3c4e341c460c8e9fa13ec9b
4
+ data.tar.gz: dd21636922cc634f306a4573fb829ba329b51b8ac42a89c03bb94e651e8c1619
5
5
  SHA512:
6
- metadata.gz: '0489e8827a51d214072b11f7bc4d32bfb8624484670da293839727de7586c408863728cf84a1e5f83df9be8b1d14df844debf129570f587a377496dbb5aadee6'
7
- data.tar.gz: e3d7a871d1ac19786b3cc06bd8525d33000e76b70208d61e44eaaa794bc7c4e9749ff507ec6ba93a09a636961d81c8cb539555714bb56b6053fd1cdb2351a518
6
+ metadata.gz: cd9098dc3a100fffa7ba45cd9ea6b3fb78310769205c1d600fa8476307f6568a07e0894276975727be8ac05ca66c3f132db4d7d621139ef2db43f24d35b2f555
7
+ data.tar.gz: f2fb926a87426831461558903c764f256b553609d713e8bf9dfb2951f92d4c25b3bf4bc7945dade12eb3470bcee85475fd4585796784b9e3075a92a39b554ea0
data/lib/docker_core.rb CHANGED
@@ -7,6 +7,32 @@ require('thor')
7
7
  require('zlib')
8
8
 
9
9
  module DockerCore
10
+ USER = 'core'
11
+ GROUP = 'core'
12
+
13
+ class Color < Thor::Shell::Color
14
+ # @param [String] text
15
+ # @param [Array<String>] colors
16
+ def self.echo(text, *colors)
17
+ if 0 == colors.size
18
+ return puts(text)
19
+ end
20
+
21
+ color = colors.map do |color|
22
+ if color.is_a?(Symbol)
23
+ next self.const_get(color.to_s.upcase)
24
+ end
25
+
26
+ next "#{color}"
27
+ end.join
28
+
29
+ return puts("#{color}#{text}#{self::CLEAR}")
30
+ end
31
+ end
32
+
33
+ class Runner < Thor
34
+ end
35
+
10
36
  module Image
11
37
  end
12
38
 
@@ -14,9 +40,9 @@ module DockerCore
14
40
  end
15
41
 
16
42
  module Paser
17
- # @param [String] value
18
- def self.boolean(value)
19
- return %w[true yes on].include?("#{value}".strip.downcase)
43
+ # @param [String] text
44
+ def self.boolean(text)
45
+ return %w[true yes on].include?("#{text}".strip.downcase)
20
46
  end
21
47
 
22
48
  # @param [String] text
@@ -25,91 +51,96 @@ module DockerCore
25
51
  end
26
52
 
27
53
  # @param [Hash] hash
28
- def self.options(hash = {})
54
+ def self.options(hash)
29
55
  items = []
30
56
 
31
- hash.each do |key, value|
32
- name = '--' + self.kebab(key)
33
- item = (true == value) ? name : %Q(#{name}="#{value}")
34
- items << item
57
+ if hash.is_a?(Hash)
58
+ hash.each do |key, value|
59
+ name = '--' + self.kebab(key)
60
+
61
+ if true == value
62
+ items << name
63
+ next
64
+ end
65
+
66
+ value = "#{value}".gsub(/\\/, '\&\&').gsub('"', '\"')
67
+ items << %(#{name}="#{value}")
68
+ next
69
+ end
35
70
  end
36
71
 
37
72
  return items
38
73
  end
39
74
 
40
- def self.make(*arguments)
41
- items = []
75
+ # @param [Array] items
76
+ def self.arguments(*items)
77
+ list = []
42
78
 
43
- arguments.each do |item|
79
+ items.each do |item|
44
80
  if item.is_a?(Array)
45
- items.concat(item.map { |value| "#{value}" })
81
+ list.concat(item.map { |value| "#{value}" })
46
82
  next
47
83
  end
48
84
 
49
85
  if item.is_a?(Hash)
50
- items.concat(self.options(item))
86
+ list.concat(self.options(item))
51
87
  next
52
88
  end
53
89
 
54
- items << "#{item}"
90
+ list << "#{item}"
55
91
  next
56
92
  end
57
93
 
58
- return items
59
- end
60
-
61
- def self.command(*arguments)
62
- return self.make(*arguments).join(' ')
94
+ return list
63
95
  end
64
96
  end
65
97
 
66
- module Shell
67
- include(Thor::Shell)
68
-
69
- USER = 'core'
70
- GROUP = 'core'
71
-
72
- # @param [String] text
73
- # @param [Array<String>] colors
74
- def self.echo(text, *colors)
75
- if 0 == colors.size
76
- return puts(text)
98
+ module Process
99
+ # @param [Array] arguments
100
+ # @param [Boolean] substitute
101
+ def self.command(*arguments, substitute: false)
102
+ if substitute
103
+ arguments.unshift('su-exec', USER)
77
104
  end
78
105
 
79
- color = colors.map do |color|
80
- if color.is_a?(Symbol)
81
- next Color.const_get(color.to_s.upcase)
82
- end
83
-
84
- next "#{color}"
85
- end.join
86
-
87
- return puts("#{color}#{text}#{Color::CLEAR}")
88
- end
89
-
90
- # @param [Boolean] strip
91
- def self.capture(*arguments, strip: true)
92
- command = Paser.command(*arguments)
93
- data = `#{command}`
94
- return strip ? "#{data}".strip : data
106
+ return Paser.arguments(*arguments).join(' ')
95
107
  end
96
108
 
109
+ # @param [Array] arguments
110
+ # @param [Boolean] substitute
97
111
  # @param [Boolean] force
98
- def self.execute(*arguments, force: false)
112
+ # @param [Boolean] strip
113
+ # @param [Boolean] verbose
114
+ def self.capture(*arguments, substitute: false, force: false, strip: true, verbose: false)
99
115
  begin
100
- command = Paser.command(*arguments)
101
- self.echo("+ #{command}", Color::GREEN)
102
- print(`#{command}`)
116
+ command = self.command(*arguments, substitute: substitute)
117
+
118
+ if verbose
119
+ Color.echo("+ #{command}", Color::GREEN)
120
+ end
121
+
122
+ data = `#{command}`
123
+ return strip ? "#{data}".strip : data
103
124
  rescue
104
125
  raise unless force
126
+ return ''
105
127
  end
106
128
  end
107
129
 
130
+ # @param [Array] arguments
131
+ # @param [Boolean] substitute
108
132
  # @param [Boolean] force
109
- # @param [String] user
110
- def self.sudo(*arguments, force: false, user: USER)
111
- arguments.unshift('su-exec', user)
112
- self.execute(*arguments, force: force)
133
+ def self.run(*arguments, substitute: false, force: false)
134
+ data = self.capture(*arguments, substitute: substitute, force: force, strip: false, verbose: true)
135
+ print(data)
136
+ end
137
+
138
+ # @param [Array] arguments
139
+ # @param [Boolean] substitute
140
+ def self.execute(*arguments, substitute: false)
141
+ command = self.command(*arguments, substitute: substitute)
142
+ Color.echo("= #{command}", Color::CYAN)
143
+ exec(command)
113
144
  end
114
145
 
115
146
  # @param [String] title
@@ -117,14 +148,23 @@ module DockerCore
117
148
  # @param [Array] arguments
118
149
  def self.invoke(title, delegate, *arguments)
119
150
  color = Color::YELLOW
120
- self.echo("> #{title}", color)
151
+ Color.echo("> #{title}", color)
121
152
  delegate.call(*arguments)
122
- self.echo("< #{title}", color)
153
+ Color.echo("< #{title}", color)
154
+ end
155
+
156
+ end
157
+
158
+ module Shell
159
+ def self.architecture
160
+ hash = { x86: '386', x86_64: 'amd64', armhf: 'armv6', armv7l: 'armv7', aarch64: 'arm64' }
161
+ machine = "#{Etc.uname[:machine]}"
162
+ return hash.fetch(machine.to_sym, machine)
123
163
  end
124
164
 
125
165
  # @param [Array<String>] arguments
126
166
  # @return [Array<String>]
127
- def self.find_files(*arguments)
167
+ def self.find_paths(*arguments)
128
168
  return Dir.glob(arguments.flatten, File::FNM_DOTMATCH).map do |item|
129
169
  next File.path(item)
130
170
  end.filter do |item|
@@ -136,19 +176,21 @@ module DockerCore
136
176
  # @param [String] user
137
177
  # @param [String] group
138
178
  def self.change_owner(*arguments, user: USER, group: GROUP)
139
- self.find_files(*arguments).each do |path|
179
+ self.find_paths(*arguments).each do |path|
140
180
  FileUtils.chown_R(user, group, path, force: true)
141
181
  end
142
182
  end
143
183
 
144
184
  # @param [Array<String>] arguments
185
+ # @param [String, Integer] mode
145
186
  def self.change_mode(mode, *arguments)
146
- self.find_files(*arguments).each do |path|
187
+ self.find_paths(*arguments).each do |path|
147
188
  FileUtils.chmod_R(mode, path, force: true)
148
189
  end
149
190
  end
150
191
 
151
192
  # @param [Array<String>] arguments
193
+ # @param [Integer, nil] mode
152
194
  def self.make_folders(*arguments, mode: nil)
153
195
  stack = []
154
196
  paths = arguments.map do |path|
@@ -172,17 +214,17 @@ module DockerCore
172
214
  end
173
215
 
174
216
  # @param [Array<String>] arguments
175
- def self.remove_folders(*arguments)
176
- self.find_files(*arguments).each do |path|
217
+ def self.remove_paths(*arguments)
218
+ self.find_paths(*arguments).each do |path|
177
219
  FileUtils.rm_rf(path)
178
220
  end
179
221
  end
180
222
 
181
223
  # @param [String, Array<String>] source
182
224
  # @param [String] target
183
- def self.move_files(source, target)
184
- files = [source].flatten
185
- FileUtils.mv(self.find_files(*files), target)
225
+ def self.move_paths(source, target)
226
+ paths = [source].flatten
227
+ FileUtils.mv(self.find_paths(*paths), target)
186
228
  end
187
229
 
188
230
  # @param [String] uri
@@ -211,9 +253,10 @@ module DockerCore
211
253
  return File.binwrite(file, content)
212
254
  end
213
255
 
256
+ # @param [Object] io
214
257
  # @param [String] path
215
258
  # @param [Boolean] verbose
216
- def self.untar(io, path, verbose: false)
259
+ def self.unpack_archive(io, path, verbose: false)
217
260
  Gem::Package::TarReader.new(io) do
218
261
 
219
262
  # @type [Gem::Package::TarReader] reader
@@ -226,7 +269,7 @@ module DockerCore
226
269
  file = File.join(path, entry.full_name)
227
270
 
228
271
  if verbose
229
- self.echo(": #{file}", Color::GREEN)
272
+ Color.echo(": #{file}", Color::GREEN)
230
273
  end
231
274
 
232
275
  if entry.directory?
@@ -247,18 +290,18 @@ module DockerCore
247
290
  # @param [String] file
248
291
  # @param [String] path
249
292
  # @param [Boolean] verbose
250
- def self.ungzip(file, path, verbose: false)
293
+ def self.inflate_file(file, path, verbose: false)
251
294
  Zlib::GzipReader.open(file) do
252
295
 
253
296
  # @type [Zlib::GzipReader] reader
254
297
  |reader|
255
- self.untar(reader, path, verbose: verbose)
298
+ self.unpack_archive(reader, path, verbose: verbose)
256
299
  end
257
300
  end
258
301
 
259
302
  # @param [String] path
260
303
  # @param [Boolean] verbose
261
- def self.tar(path, verbose: false)
304
+ def self.tape_archive(path, verbose: false)
262
305
  io = StringIO.new('')
263
306
  offset = path.size + 1
264
307
 
@@ -266,12 +309,12 @@ module DockerCore
266
309
 
267
310
  # @type [Gem::Package::TarWriter] writer
268
311
  |writer|
269
- self.find_files(File.join(path, '**/*')).each do |name|
312
+ self.find_paths(File.join(path, '**/*')).each do |name|
270
313
  mode = File.stat(name).mode
271
314
  file = name.slice(offset ..)
272
315
 
273
316
  if verbose
274
- self.echo(": #{file}", Color::GREEN)
317
+ Color.echo(": #{file}", Color::GREEN)
275
318
  end
276
319
 
277
320
  if File.directory?(name)
@@ -295,22 +338,24 @@ module DockerCore
295
338
  # @param [String] file
296
339
  # @param [String] path
297
340
  # @param [Boolean] verbose
298
- def self.gzip(file, path, verbose: false)
341
+ def self.deflate_file(file, path, verbose: false)
299
342
  Zlib::GzipWriter.open(file, Zlib::BEST_COMPRESSION) do
300
343
 
301
344
  # @type [Zlib::GzipWriter] writer
302
345
  |writer|
303
- writer.write(self.tar(path, verbose: verbose))
346
+ writer.write(self.tape_archive(path, verbose: verbose))
304
347
  end
305
348
  end
306
349
 
307
350
  # @param [Integer] uid
308
351
  # @param [Integer] gid
309
352
  def self.update_user(uid: 500, gid: 500)
310
- self.execute('deluser', USER, force: true)
311
- self.execute('delgroup', GROUP, force: true)
312
- self.execute('addgroup', { system: true, gid: ENV.fetch('DOCKER_CORE_GID', gid) }, GROUP)
313
- self.execute('adduser', { system: true, 'disabled-password': true, 'no-create-home': true, ingroup: GROUP, gecos: USER, shell: '/bin/bash', uid: ENV.fetch('DOCKER_CORE_UID', uid) }, USER)
353
+ uid = ENV.fetch('DOCKER_CORE_UID', uid)
354
+ gid = ENV.fetch('DOCKER_CORE_GID', gid)
355
+ Process.run('deluser', USER, force: true)
356
+ Process.run('delgroup', GROUP, force: true)
357
+ Process.run('addgroup', { system: true, gid: gid }, GROUP)
358
+ Process.run('adduser', { system: true, 'disabled-password': true, 'no-create-home': true, ingroup: GROUP, gecos: USER, shell: '/bin/bash', uid: uid }, USER)
314
359
  end
315
360
 
316
361
  # @param [String] stdout
@@ -323,24 +368,22 @@ module DockerCore
323
368
  if '' != stderr
324
369
  File.symlink('/dev/stderr', File.path(stderr))
325
370
  end
371
+
372
+ return
326
373
  end
327
374
 
328
375
  # @param [Array<String>] arguments
376
+ # @param [Integer ,nil] mode
329
377
  def self.clear_folders(*arguments, mode: nil)
330
- self.remove_folders(*arguments)
378
+ self.remove_paths(*arguments)
331
379
  self.make_folders(*arguments, mode: mode)
332
380
  end
333
381
 
334
- def self.architecture
335
- hash = { x86: '386', x86_64: 'amd64', armhf: 'armv6', aarch64: 'arm64' }
336
- machine = "#{Etc.uname[:machine]}"
337
- return hash.fetch(machine.to_sym, machine)
338
- end
339
-
340
382
  # @param [String] repository
341
383
  def self.github_latest_version(repository)
342
384
  uri = URI("https://api.github.com/repos/#{repository}/releases/latest")
343
- return JSON.parse(Net::HTTP.get(uri))['tag_name']
385
+ data = JSON.parse(Net::HTTP.get(uri))['tag_name']
386
+ return "#{data}"
344
387
  end
345
388
  end
346
389
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - agrozyme
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-24 00:00:00.000000000 Z
11
+ date: 2021-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fileutils