central 0.2.4 → 0.2.5

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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/central +4 -4
  3. data/lib/central.rb +187 -213
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 59a223e19b875e1e3d7dc50f70f60697816d47e3
4
- data.tar.gz: 8037442fffcaaccbe55bf1209dae265890432836
3
+ metadata.gz: 2c48d4b6cb13b63e3ba6896942008ae004fad3af
4
+ data.tar.gz: 37dc1ea33c1ed5e8521972c46c3d09df02c3aed6
5
5
  SHA512:
6
- metadata.gz: 1ef58f6d6da2bf0f3148677cc86d5cf5779c4d2fa766102c1dfd5cd4ac5aad643d7e55ed78a575b83a6e2d38735bfefdc0bb8a6eebe5935dde1ec4326bf03fa6
7
- data.tar.gz: 025ab8f80c6e4cc29038ff1cacb276206527da789865732539d64887b23b590007c9debe723ab7224ed02de28ac705be2a331cdeaf04ae568ed7a1ade5392858
6
+ metadata.gz: 69a3728b2832dc452ed34d8b88141efe9ea17287fe2555ac5b985e6c89b34122fa0a4037b49701563639fad3442d4894d9a3be671ae449bbded21b78d636dbc9
7
+ data.tar.gz: 3773b38f6bc059f9cddfa576017fd67b1628ed7dbf90702618988b2537f59e31e691e57d0c9134689737e17eb918520cc00728f567ceb9da655ba3ab43714deb
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
 
4
4
  # -------------------------------------------------------------------------
5
5
  # # central - dot files manager licensed under LGPLv3 (see LICENSE file) |
@@ -8,13 +8,13 @@
8
8
 
9
9
  require 'central'
10
10
 
11
- if ARGV.length > 0
11
+ unless ARGV.empty?
12
12
  if ARGV[0] == '-v' || ARGV[0] == '--version' || ARGV[0] == '-version'
13
- puts "central v0.2.4"
13
+ puts 'central v0.2.5'
14
14
  exit 0
15
15
  end
16
16
  if ARGV[0] == '-h' || ARGV[0] == '--help' || ARGV[0] == '-help'
17
- puts "central [path/to/configuration.rb]"
17
+ puts 'central [path/to/configuration.rb]'
18
18
  exit 0
19
19
  end
20
20
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # -------------------------------------------------------------------------
3
2
  # # central - dot files manager licensed under LGPLv3 (see LICENSE file) |
4
3
  # # written in Ruby by Dmitry Geurkov (d.geurkov@gmail.com) |
@@ -9,6 +8,33 @@ require 'socket'
9
8
  require 'open3'
10
9
  require 'fileutils'
11
10
 
11
+ # cli colors
12
+ COLOR_RED = 31
13
+ COLOR_GREEN = 32
14
+
15
+ # putsc, puts with color
16
+ def color(message, color)
17
+ "\e[#{color}m#{message}\e[0m"
18
+ end
19
+
20
+ # info
21
+ def info(message, param = nil)
22
+ puts color(message, COLOR_GREEN) +
23
+ (param.nil? ? '' : ': ' + param)
24
+ end
25
+
26
+ # error
27
+ def error(message, param = nil)
28
+ puts color(message, COLOR_RED) +
29
+ (param.nil? ? '' : ': ' + param)
30
+ end
31
+
32
+ # fail, print message to stderr and exit with 1
33
+ def fail(message, param = nil)
34
+ error message, param
35
+ exit 1
36
+ end
37
+
12
38
  # get hostname
13
39
  def hostname
14
40
  Socket.gethostname
@@ -17,114 +43,106 @@ end
17
43
  # get operating system
18
44
  def os
19
45
  if RUBY_PLATFORM.include?('linux')
20
- return 'linux'
46
+ 'linux'
21
47
  elsif RUBY_PLATFORM.include?('darwin')
22
- return 'osx'
48
+ 'osx'
23
49
  elsif RUBY_PLATFORM.include?('freebsd')
24
- return 'freebsd'
50
+ 'freebsd'
25
51
  elsif RUBY_PLATFORM.include?('solaris')
26
- return 'solaris'
52
+ 'solaris'
27
53
  end
28
54
  end
29
55
 
30
56
  def linux?
31
- return os == 'linux'
57
+ os == 'linux'
32
58
  end
33
59
 
34
60
  def osx?
35
- return os == 'osx'
61
+ os == 'osx'
36
62
  end
37
63
 
38
64
  def freebsd?
39
- return os == 'freebsd'
65
+ os == 'freebsd'
40
66
  end
41
67
 
42
68
  def solaris?
43
- return os == 'solaris'
69
+ os == 'solaris'
44
70
  end
45
71
 
46
- # run shell command and get output, optionaly can print command running if verbose and if not silent will also print to stdout and stderr
47
- $shell_return_value = nil
48
- def shell(command,verbose: false, silent: true)
49
- puts "Executing: #{command}" if verbose
72
+ # run shell command and get output, optionaly can print command running
73
+ # if verbose and if not silent will also print to stdout and stderr
74
+ def shell(command, verbose: false, silent: true)
75
+ info 'Executing', command if verbose
76
+ exit_code = nil
50
77
  stdout = ''
51
78
  stdout_line = ''
52
79
  stderr = ''
53
80
  stderr_line = ''
54
- Open3.popen3(command) do |i,o,e,t|
81
+ Open3.popen3(command) do |_, o, e, t|
55
82
  stdout_open = true
56
83
  stderr_open = true
57
- while stdout_open or stderr_open
84
+ while stdout_open || stderr_open
58
85
  if stdout_open
59
86
  begin
60
87
  ch = o.read_nonblock(1)
61
- stdout.insert(-1,ch)
88
+ stdout.insert(-1, ch)
62
89
  unless silent
63
- stdout_line.insert(-1,ch)
90
+ stdout_line.insert(-1, ch)
64
91
  if ch == "\n"
65
92
  STDOUT.puts stdout_line
66
93
  stdout_line = ''
67
94
  end
68
95
  end
69
96
  rescue IO::WaitReadable
70
- IO.select([o],nil,nil,0.1) unless stderr_open
97
+ IO.select([o], nil, nil, 0.01) unless stderr_open
71
98
  rescue EOFError
72
99
  stdout_open = false
73
100
  end
74
101
  end
75
- if stderr_open
76
- begin
77
- ch = e.read_nonblock(1)
78
- stderr.insert(-1,ch)
79
- unless silent
80
- stderr_line.insert(-1,ch)
81
- if ch == "\n"
82
- STDERR.puts stderr_line
83
- stderr_line = ''
84
- end
102
+ next unless stderr_open
103
+
104
+ begin
105
+ ch = e.read_nonblock(1)
106
+ stderr.insert(-1, ch)
107
+ unless silent
108
+ stderr_line.insert(-1, ch)
109
+ if ch == "\n"
110
+ STDERR.puts stderr_line
111
+ stderr_line = ''
85
112
  end
86
- rescue IO::WaitReadable
87
- IO.select([e],nil,nil,0.1) unless stdout_open
88
- rescue EOFError
89
- stderr_open = false
90
113
  end
114
+ rescue IO::WaitReadable
115
+ IO.select([e], nil, nil, 0.01) unless stdout_open
116
+ rescue EOFError
117
+ stderr_open = false
91
118
  end
92
119
  end
93
- $shell_return_value = t.value
94
- end
95
- if stderr == ''
96
- return stdout
97
- else
98
- return stdout, stderr
120
+ exit_code = t.value
99
121
  end
122
+ [exit_code, stdout, stderr]
100
123
  end
101
124
 
102
125
  # run shell command with sudo prefix, acts same as shell
103
- def sudo(command,verbose:,silent:)
104
- return shell('sudo '+command, verbose: verbose, silent: silent)
126
+ def sudo(command, verbose:, silent:)
127
+ shell('sudo ' + command, verbose: verbose, silent: silent)
105
128
  end
106
129
 
107
130
  # function used to check that system has all required tools installed
108
- def check_tool(name,check)
109
- begin
110
- output = shell(check+' 2>&1').downcase
111
- if output == '' or output.include?('command not found')
112
- STDERR.puts "#{name} not found, please install it to use central"
113
- exit 1
114
- end
115
- rescue Errno::ENOENT
116
- STDERR.puts "#{name} not found, please install it to use central"
117
- exit 1
131
+ def check_tool(name, check)
132
+ _, output, = shell(check + ' 2>&1')
133
+ if output == '' || output.downcase.include?('command not found')
134
+ fail "#{name} not found, please install it to use central"
118
135
  end
136
+ rescue Errno::ENOENT
137
+ fail "#{name} not found, please install it to use central"
119
138
  end
120
139
 
121
- check_tool('file','file --version')
122
- check_tool('grep','grep --version')
123
- check_tool('ln','ln --version')
124
- check_tool('readlink','readlink --version')
125
- check_tool('git','git --version')
126
- check_tool('curl','curl --version')
127
-
140
+ check_tool('file', 'file --version')
141
+ check_tool('grep', 'grep --version')
142
+ check_tool('ln', 'ln --version')
143
+ check_tool('readlink', 'readlink --version')
144
+ check_tool('git', 'git --version')
145
+ check_tool('curl', 'curl --version')
128
146
 
129
147
  # current working directory
130
148
  def pwd
@@ -133,7 +151,7 @@ end
133
151
 
134
152
  # absolute path
135
153
  def abs(path)
136
- path = File.absolute_path(File.expand_path(path))
154
+ File.absolute_path(File.expand_path(path))
137
155
  end
138
156
 
139
157
  # change current working directory
@@ -165,80 +183,70 @@ end
165
183
 
166
184
  # get full path of symlink
167
185
  def symlink_path(symlink)
168
- shell("readlink \"#{abs(symlink)}\" 2>&1").strip
186
+ _, out, = shell("readlink -f \"#{abs(symlink)}\" 2>&1")
187
+ out.strip
169
188
  end
170
189
 
171
190
  # make directory including intermediate directories
172
191
  def mkdir(path)
173
192
  path = abs(path)
174
- unless dir_exists?(path)
175
- out = shell("mkdir -p \"#{path}\" 2>&1")
176
- unless $shell_return_value.success?
177
- STDERR.puts out
178
- STDERR.puts "Couldn't create directory: #{path}"
179
- exit 1
180
- end
181
- puts "Created directory: #{path}"
193
+ return if dir_exists?(path)
194
+
195
+ exit_code, out, = shell("mkdir -p \"#{path}\" 2>&1")
196
+ unless exit_code.success?
197
+ error out
198
+ fail "Couldn't create directory", path
182
199
  end
200
+ info 'Created directory', path
183
201
  end
184
202
 
185
203
  # remove file/directory
186
- def rm(path,recursive: false)
204
+ def rm(path, recursive: false)
187
205
  path = abs(path)
188
- if recursive
189
- recursive = '-R '
190
- else
191
- recursive = ''
192
- end
206
+ recursive = recursive ? '-R ' : ''
193
207
  is_dir = dir_exists?(path)
194
208
  is_symlink = symlink?(path)
195
- out = shell("rm #{recursive}-f \"#{path}\" 2>&1")
196
- unless $shell_return_value.success?
197
- STDERR.puts out
198
- STDERR.puts "Couldn't remove path: #{path}"
199
- exit 1
209
+ exit_code, out, = shell("rm #{recursive}-f \"#{path}\" 2>&1")
210
+ unless exit_code.success?
211
+ error out
212
+ fail "Couldn't remove path", path
200
213
  end
201
214
  if is_dir
202
- puts "Removed directory: #{path}"
215
+ info 'Removed directory', path
203
216
  elsif is_symlink
204
- puts "Removed symlink: #{path}"
217
+ info 'Removed symlink', path
205
218
  else
206
- puts "Removed file: #{path}"
219
+ info 'Removed file', path
207
220
  end
208
221
  end
209
222
 
210
223
  # remove directory recursively
211
224
  def rmdir(path)
212
- rm(path,recursive: true)
225
+ rm(path, recursive: true)
213
226
  end
214
227
 
215
228
  # touch file
216
229
  def touch(path)
217
230
  path = abs(path)
218
- unless file_exists?(path)
219
- out = shell("touch \"#{path}\" 2>&1")
220
- unless $shell_return_value.success?
221
- STDERR.puts out
222
- STDERR.puts "Couldn't touch file: #{path}"
223
- exit 1
224
- end
225
- puts "Touched file: #{path}"
231
+ return if file_exists?(path)
232
+
233
+ exit_code, out, = shell("touch \"#{path}\" 2>&1")
234
+ unless exit_code.success?
235
+ error out
236
+ fail "Couldn't touch file", path
226
237
  end
238
+ info 'Touched file', path
227
239
  end
228
240
 
229
241
  # change file permissions
230
- def chmod(path,permissions,recursive: false)
242
+ def chmod(path, permissions, recursive: false)
231
243
  path = abs(path)
232
- if recursive
233
- recursive = '-R '
234
- else
235
- recursive = ''
236
- end
244
+ recursive = recursive ? '-R ' : ''
237
245
  shell("chmod #{recursive}#{permissions} \"#{path}\"")
238
246
  end
239
247
 
240
248
  # symlink path
241
- def symlink(from,to)
249
+ def symlink(from, to)
242
250
  from = abs(from)
243
251
  to = abs(to)
244
252
  if symlink?(from)
@@ -247,187 +255,156 @@ def symlink(from,to)
247
255
  symlink from, to
248
256
  end
249
257
  elsif file_exists?(from)
250
- STDERR.puts "File #{from} exists in place of symlink..."
251
- exit 1
258
+ fail "File #{from} exists in place of symlink..."
252
259
  elsif dir_exists?(from)
253
- STDERR.puts "Directory #{from} exists in place of symlink..."
254
- exit 1
260
+ fail "Directory #{from} exists in place of symlink..."
255
261
  else
256
- out = shell("ln -s \"#{to}\" \"#{from}\" 2>&1")
257
- unless $shell_return_value.success?
258
- STDERR.puts out
259
- STDERR.puts "Couldn't create symlink: #{from} → #{to}"
260
- exit 1
262
+ exit_code, out, = shell("ln -s \"#{to}\" \"#{from}\" 2>&1")
263
+ unless exit_code.success?
264
+ error out
265
+ fail "Couldn't create symlink", "#{from} → #{to}"
261
266
  end
262
- puts "Created symlink: #{from} → #{to}"
267
+ info 'Created symlink', "#{from} → #{to}"
263
268
  end
264
269
  end
265
270
 
266
271
  # git clone url into a path
267
- def git(url,path,branch: nil,silent: false,depth: nil)
272
+ def git(url, path, branch: nil, silent: true, depth: nil)
268
273
  path = abs(path)
269
274
  if dir_exists?(path) && dir_exists?("#{path}/.git")
270
- cwd = pwd()
275
+ cwd = pwd
271
276
  chdir path
272
277
  out = nil
273
278
  if branch
274
- out = shell('git fetch 2>&1',{:silent => silent})
275
- if out.size > 0
276
- puts out if silent
277
- end
278
- out = shell("git checkout #{branch} 2>&1",{:silent => silent})
279
+ _, out, = shell('git fetch 2>&1', silent: silent)
280
+ puts out if silent && out.size.positive?
281
+ _, out, = shell("git checkout #{branch} 2>&1", silent: silent)
279
282
  unless out.downcase.include? 'is now at'
280
283
  puts out if silent
281
284
  end
282
- out = shell("git pull origin #{branch} 2>&1",{:silent => silent})
285
+ _, out, = shell("git pull origin #{branch} 2>&1", silent: silent)
283
286
  else
284
- out = shell('git pull 2>&1',{:silent => silent})
287
+ _, out, = shell('git pull 2>&1', silent: silent)
285
288
  end
286
- unless out.downcase.include? "already up-to-date"
289
+ unless out.downcase.include? 'already up-to-date'
287
290
  puts out if silent
288
- puts "Git repository pulled: #{url} → #{path}"
291
+ info 'Git repository pulled', "#{url} → #{path}"
289
292
  end
290
293
  chdir cwd
291
294
  else
292
- if branch
293
- branch = "-b #{branch} "
294
- else
295
- branch = ''
296
- end
297
- if depth
298
- depth = '--depth '+depth.to_s+' '
299
- else
300
- depth = ''
301
- end
302
- out = shell("git clone #{depth}#{branch}#{url} \"#{path}\" 2>&1",{:silent => silent})
295
+ branch = branch ? "-b #{branch} " : ''
296
+ depth = depth ? "--depth #{depth} " : ''
297
+ _, out, = shell("git clone #{depth}#{branch}#{url} \"#{path}\" 2>&1",
298
+ silent: silent)
303
299
  puts out if silent
304
- puts "Git repository cloned: #{url} → #{path}"
300
+ info 'Git repository cloned', "#{url} → #{path}"
305
301
  end
306
302
  end
307
303
 
308
304
  # download url into a path using curl
309
- def curl(url,path, verbose: false)
305
+ def curl(url, path, verbose: false)
310
306
  path = abs(path)
311
- puts "Downloading #{url} → #{path}"
312
- output = shell("curl -s -S \"#{url}\"",verbose: verbose, silent: true)
313
- unless $shell_return_value.success?
314
- STDERR.puts output
315
- STDERR.puts "Couldn't download file from #{url}..."
316
- exit 1
307
+ info 'Downloading', "#{url} → #{path}"
308
+ exit_code, output, = shell("curl -s -S \"#{url}\"",
309
+ verbose: verbose, silent: true)
310
+ unless exit_code.success?
311
+ error output
312
+ fail "Couldn't download file from", url
317
313
  end
318
- File.write(path,output)
319
- puts "Downloaded #{url} → #{path}"
314
+ File.write(path, output)
315
+ info 'Downloaded', "#{url} → #{path}"
320
316
  end
321
317
 
322
318
  # read content of a file
323
319
  def read(file)
324
320
  file = abs(file)
325
- if file_exists?(file)
326
- return File.read(file)
327
- else
328
- STDERR.puts "Couldn't read file #{file}..."
329
- exit 1
330
- end
321
+ return File.read(file) if file_exists?(file)
322
+
323
+ fail "Couldn't read file", file
331
324
  end
332
325
 
333
326
  # write content into a file
334
- def write(file,content)
327
+ def write(file, content)
335
328
  file = abs(file)
336
- File.write(file,content)
329
+ File.write(file, content)
337
330
  end
338
331
 
339
332
  # source file in sh/bash/zsh script
340
- def source(file,source)
333
+ def source(file, source)
341
334
  file = abs(file)
342
335
  source = abs(source)
343
336
  source_line = "source \"#{source}\""
344
- out = shell("grep -Fx '#{source_line}' \"#{file}\"")
345
- if out == ""
346
- shell("echo '#{source_line}' >> \"#{file}\"")
347
- puts "Added source #{source} line to #{file}"
348
- end
337
+ _, out, = shell("grep -Fx '#{source_line}' \"#{file}\"")
338
+ return unless out == ''
339
+
340
+ shell("echo '#{source_line}' >> \"#{file}\"")
341
+ info 'Added source', "#{source} line to #{file}"
349
342
  end
350
343
 
351
344
  # list directory content
352
- def ls(path,dotfiles: false, grep: '', dir: true, file: true)
345
+ def ls(path, dotfiles: false, grep: '', dir: true, file: true)
353
346
  path = abs(path)
354
- if dotfiles
355
- dotfiles = '-a '
356
- else
357
- dotfiles = ''
358
- end
347
+ dotfiles = dotfiles ? '-a ' : ''
359
348
  command = "ls -1 #{dotfiles}\"#{path}\" 2>&1"
360
- if grep.length > 0
361
- command += " | grep #{grep}"
362
- end
363
- output = shell(command)
349
+ command += " | grep #{grep}" unless grep.empty?
350
+
351
+ _, output, = shell(command)
364
352
  if output.downcase.end_with?('no such file or directory')
365
- STDERR.puts "Couldn't ls directory #{path}..."
366
- exit 1
353
+ fail "Couldn't ls directory", path
367
354
  end
355
+
368
356
  ls = output.split("\n")
369
- unless dir
370
- ls = ls.keep_if {|f| !File.directory?("#{path}/#{f}") }
371
- end
372
- unless file
373
- ls = ls.keep_if {|f| !File.file?("#{path}/#{f}") }
374
- end
375
- return ls
357
+ ls = ls.keep_if { |f| !File.directory?("#{path}/#{f}") } unless dir
358
+ ls = ls.keep_if { |f| !File.file?("#{path}/#{f}") } unless file
359
+ ls
360
+ end
361
+
362
+ # copy_file
363
+ def copy_file(from, to)
364
+ fail "Couldn't access file", from unless file_exists?(from)
365
+
366
+ return if file_exists?(to) && FileUtils.compare_file(from, to)
367
+
368
+ FileUtils.copy_file(from, to)
369
+ info 'Copied file', "#{from} → #{to}"
376
370
  end
377
371
 
378
372
  # copy
379
- def copy(from,to)
373
+ def copy(from, to)
380
374
  from = abs(from)
381
375
  to = abs(to)
382
376
  if dir_exists?(from)
383
- (Dir.entries(from).select { |f| f != "." and f != ".." }).each do |f|
377
+ (Dir.entries(from).select { |f| f != '.' && f != '..' }).each do |f|
384
378
  FileUtils.mkdir_p(to)
385
- copy("#{from}/#{f}","#{to}/#{f}")
379
+ copy("#{from}/#{f}", "#{to}/#{f}")
386
380
  end
387
381
  else
388
- unless file_exists?(from)
389
- STDERR.puts "Couldn't access file #{from}..."
390
- exit 1
391
- end
392
- if !file_exists?(to) or !FileUtils.compare_file(from,to)
393
- FileUtils.copy_file(from,to)
394
- puts "Copied file: #{from} → #{to}"
395
- end
382
+ copy_file(from, to)
396
383
  end
397
384
  end
398
385
 
399
386
  # process erb template into an output_file
400
- def erb(file,output_file = nil)
387
+ def erb(file, output_file = nil)
401
388
  file = abs(file)
402
- if output_file == nil
403
- if file.end_with?('.erb')
404
- output_file = file[0...-4]
405
- else
406
- output_file = file+'.out'
407
- end
408
- end
409
- if file_exists?(file)
410
- output = ERB.new(File.read(file)).result
411
- if File.exist?(output_file) && File.read(output_file) == output
412
- return
413
- end
414
- File.write(output_file,output)
415
- puts "Processed erb #{file} → #{output_file}"
416
- else
417
- STDERR.puts "Couldn't process erb file #{file}..."
418
- exit 1
389
+ fail 'No erb file found', file unless file_exists?(file)
390
+
391
+ if output_file.nil?
392
+ output_file = file.end_with?('.erb') ? file[0...-4] : file + '.out'
419
393
  end
394
+ out = ERB.new(File.read(file)).result
395
+ return if File.exist?(output_file) && File.read(output_file) == out
396
+
397
+ File.write(output_file, out)
398
+ info 'Processed erb', "#{file} → #{output_file}"
420
399
  end
421
400
 
422
401
  # run configuration.rb file
423
402
  def run(file)
424
- cwd = pwd()
403
+ cwd = pwd
425
404
  file = abs(file)
426
- unless file_exists?(file)
427
- STDERR.puts "No configuration file: #{file} found"
428
- exit 1
429
- end
430
- puts "Running configuration: "+file
405
+ fail 'No configuration file found', file unless file_exists?(file)
406
+
407
+ info 'Running configuration', file
431
408
  file_cwd = file_dir(file)
432
409
  chdir file_cwd
433
410
  load file
@@ -436,19 +413,16 @@ end
436
413
 
437
414
  # run configuration.rb file only if it exists
438
415
  def run_if_exists(file)
439
- if file_exists?(file)
440
- run file
441
- end
416
+ run file if file_exists?(file)
442
417
  end
443
418
 
444
419
  # run central configuration
445
420
  def central(configurations)
446
- if configurations.instance_of?(Array) && configurations.length > 0
447
- configurations.each {|configuration| run configuration }
421
+ if configurations.instance_of?(Array) && !configurations.empty?
422
+ configurations.each { |configuration| run configuration }
448
423
  elsif configurations.instance_of?(String)
449
424
  run configurations
450
425
  else
451
426
  run 'configuration.rb'
452
427
  end
453
428
  end
454
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: central
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Geurkov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-19 00:00:00.000000000 Z
11
+ date: 2019-05-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: central dotfile management system
14
14
  email: d.geurkov@gmail.com
@@ -31,7 +31,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '0'
34
+ version: '2.0'
35
35
  required_rubygems_version: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="