rubysl-fileutils 2.0.2 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +10 -2
- data/lib/rubysl/fileutils/fileutils.rb +151 -93
- data/lib/rubysl/fileutils/version.rb +1 -1
- data/rubysl-fileutils.gemspec +1 -0
- metadata +26 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8fcbfc22d0164b564987124819d534da344d327
|
4
|
+
data.tar.gz: f60ec059b021ff8f344e5551f11a07bc0cc87daf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42022a36e7987cf88ad2aa5991b5d4f581c9cdb823bfe76d9e6175b3f7d9c9ae19aee01ca5872204e3e0967aecc96177ed2fd4efe3ffb4f2ffedb428d604fb5d
|
7
|
+
data.tar.gz: 5837d545eb8563cd58cf55b367dc8fab70621ddedaa6eea055cd982b2c05ead348b8f70b5fc0502f19744e7321d825e635382e8d2133a0ceb331f1da8e1b3fb4
|
data/.travis.yml
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
language: ruby
|
2
2
|
env:
|
3
3
|
- RUBYLIB=lib
|
4
|
-
|
4
|
+
- RUBYLIB=
|
5
|
+
script: mspec spec
|
5
6
|
rvm:
|
6
|
-
-
|
7
|
+
- 2.0.0
|
8
|
+
- rbx-2.1.1
|
9
|
+
matrix:
|
10
|
+
exclude:
|
11
|
+
- rvm: 2.0.0
|
12
|
+
env: RUBYLIB=lib
|
13
|
+
- rvm: rbx-2.1.1
|
14
|
+
env: RUBYLIB=
|
@@ -118,7 +118,7 @@ module FileUtils
|
|
118
118
|
# FileUtils.cd('/') do # chdir
|
119
119
|
# [...] # do something
|
120
120
|
# end # return to original directory
|
121
|
-
#
|
121
|
+
#
|
122
122
|
def cd(dir, options = {}, &block) # :yield: dir
|
123
123
|
fu_check_options options, OPT_TABLE['cd']
|
124
124
|
fu_output_message "cd #{dir}" if options[:verbose]
|
@@ -142,9 +142,7 @@ module FileUtils
|
|
142
142
|
# FileUtils.uptodate?('hello.o', %w(hello.c hello.h)) or \
|
143
143
|
# system 'make hello.o'
|
144
144
|
#
|
145
|
-
def uptodate?(new, old_list
|
146
|
-
raise ArgumentError, 'uptodate? does not accept any option' if options
|
147
|
-
|
145
|
+
def uptodate?(new, old_list)
|
148
146
|
return false unless File.exist?(new)
|
149
147
|
new_time = File.mtime(new)
|
150
148
|
old_list.each do |old|
|
@@ -156,6 +154,11 @@ module FileUtils
|
|
156
154
|
end
|
157
155
|
module_function :uptodate?
|
158
156
|
|
157
|
+
def remove_tailing_slash(dir)
|
158
|
+
dir == '/' ? dir : dir.chomp(?/)
|
159
|
+
end
|
160
|
+
private_module_function :remove_tailing_slash
|
161
|
+
|
159
162
|
#
|
160
163
|
# Options: mode noop verbose
|
161
164
|
#
|
@@ -202,7 +205,7 @@ module FileUtils
|
|
202
205
|
fu_output_message "mkdir -p #{options[:mode] ? ('-m %03o ' % options[:mode]) : ''}#{list.join ' '}" if options[:verbose]
|
203
206
|
return *list if options[:noop]
|
204
207
|
|
205
|
-
list.map {|path| path
|
208
|
+
list.map {|path| remove_tailing_slash(path)}.each do |path|
|
206
209
|
# optimize for the most common case
|
207
210
|
begin
|
208
211
|
fu_mkdir path, options[:mode]
|
@@ -239,7 +242,7 @@ module FileUtils
|
|
239
242
|
OPT_TABLE['makedirs'] = [:mode, :noop, :verbose]
|
240
243
|
|
241
244
|
def fu_mkdir(path, mode) #:nodoc:
|
242
|
-
path = path
|
245
|
+
path = remove_tailing_slash(path)
|
243
246
|
if mode
|
244
247
|
Dir.mkdir path, mode
|
245
248
|
File.chmod mode, path
|
@@ -267,9 +270,10 @@ module FileUtils
|
|
267
270
|
return if options[:noop]
|
268
271
|
list.each do |dir|
|
269
272
|
begin
|
270
|
-
Dir.rmdir(dir = dir
|
273
|
+
Dir.rmdir(dir = remove_tailing_slash(dir))
|
271
274
|
if parents
|
272
275
|
until (parent = File.dirname(dir)) == '.' or parent == dir
|
276
|
+
dir = parent
|
273
277
|
Dir.rmdir(dir)
|
274
278
|
end
|
275
279
|
end
|
@@ -363,7 +367,7 @@ module FileUtils
|
|
363
367
|
# Options: noop verbose
|
364
368
|
#
|
365
369
|
# Same as
|
366
|
-
# #ln_s(src, dest, :force)
|
370
|
+
# #ln_s(src, dest, :force => true)
|
367
371
|
#
|
368
372
|
def ln_sf(src, dest, options = {})
|
369
373
|
fu_check_options options, OPT_TABLE['ln_sf']
|
@@ -413,7 +417,7 @@ module FileUtils
|
|
413
417
|
#
|
414
418
|
# +src+ can be a list of files.
|
415
419
|
#
|
416
|
-
# # Installing
|
420
|
+
# # Installing Ruby library "mylib" under the site_ruby
|
417
421
|
# FileUtils.rm_r site_ruby + '/mylib', :force
|
418
422
|
# FileUtils.cp_r 'lib/', site_ruby + '/mylib'
|
419
423
|
#
|
@@ -424,7 +428,7 @@ module FileUtils
|
|
424
428
|
# # If you want to copy all contents of a directory instead of the
|
425
429
|
# # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
|
426
430
|
# # use following code.
|
427
|
-
# FileUtils.cp_r 'src/.', 'dest' # cp_r('src', 'dest') makes src
|
431
|
+
# FileUtils.cp_r 'src/.', 'dest' # cp_r('src', 'dest') makes dest/src,
|
428
432
|
# # but this doesn't.
|
429
433
|
#
|
430
434
|
def cp_r(src, dest, options = {})
|
@@ -459,12 +463,14 @@ module FileUtils
|
|
459
463
|
# If +remove_destination+ is true, this method removes each destination file before copy.
|
460
464
|
#
|
461
465
|
def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
|
462
|
-
Entry_.new(src, nil, dereference_root).
|
466
|
+
Entry_.new(src, nil, dereference_root).wrap_traverse(proc do |ent|
|
463
467
|
destent = Entry_.new(dest, ent.rel, false)
|
464
468
|
File.unlink destent.path if remove_destination && File.file?(destent.path)
|
465
469
|
ent.copy destent.path
|
470
|
+
end, proc do |ent|
|
471
|
+
destent = Entry_.new(dest, ent.rel, false)
|
466
472
|
ent.copy_metadata destent.path if preserve
|
467
|
-
end
|
473
|
+
end)
|
468
474
|
end
|
469
475
|
module_function :copy_entry
|
470
476
|
|
@@ -747,7 +753,7 @@ module FileUtils
|
|
747
753
|
File.symlink nil, nil
|
748
754
|
rescue NotImplementedError
|
749
755
|
return false
|
750
|
-
rescue
|
756
|
+
rescue TypeError
|
751
757
|
return true
|
752
758
|
end
|
753
759
|
private_module_function :fu_have_symlink?
|
@@ -823,16 +829,13 @@ module FileUtils
|
|
823
829
|
#
|
824
830
|
def compare_stream(a, b)
|
825
831
|
bsize = fu_stream_blksize(a, b)
|
826
|
-
sa =
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
end
|
834
|
-
end
|
835
|
-
end
|
832
|
+
sa = ""
|
833
|
+
sb = ""
|
834
|
+
begin
|
835
|
+
a.read(bsize, sa)
|
836
|
+
b.read(bsize, sb)
|
837
|
+
return true if sa.empty? && sb.empty?
|
838
|
+
end while sa == sb
|
836
839
|
false
|
837
840
|
end
|
838
841
|
module_function :compare_stream
|
@@ -865,62 +868,78 @@ module FileUtils
|
|
865
868
|
OPT_TABLE['install'] = [:mode, :preserve, :noop, :verbose]
|
866
869
|
|
867
870
|
def user_mask(target) #:nodoc:
|
868
|
-
mask
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
871
|
+
target.each_char.inject(0) do |mask, chr|
|
872
|
+
case chr
|
873
|
+
when "u"
|
874
|
+
mask | 04700
|
875
|
+
when "g"
|
876
|
+
mask | 02070
|
877
|
+
when "o"
|
878
|
+
mask | 01007
|
879
|
+
when "a"
|
880
|
+
mask | 07777
|
881
|
+
else
|
882
|
+
raise ArgumentError, "invalid `who' symbol in file mode: #{chr}"
|
879
883
|
end
|
880
884
|
end
|
881
|
-
mask
|
882
885
|
end
|
883
886
|
private_module_function :user_mask
|
884
887
|
|
885
|
-
def
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
when "x"
|
894
|
-
mask |= 0111
|
895
|
-
when "X"
|
896
|
-
mask |= 0111 if FileTest::directory? path
|
897
|
-
when "s"
|
898
|
-
mask |= 06000
|
899
|
-
when "t"
|
900
|
-
mask |= 01000
|
901
|
-
end
|
888
|
+
def apply_mask(mode, user_mask, op, mode_mask)
|
889
|
+
case op
|
890
|
+
when '='
|
891
|
+
(mode & ~user_mask) | (user_mask & mode_mask)
|
892
|
+
when '+'
|
893
|
+
mode | (user_mask & mode_mask)
|
894
|
+
when '-'
|
895
|
+
mode & ~(user_mask & mode_mask)
|
902
896
|
end
|
903
|
-
mask
|
904
897
|
end
|
905
|
-
private_module_function :
|
898
|
+
private_module_function :apply_mask
|
906
899
|
|
907
|
-
def symbolic_modes_to_i(
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
target
|
900
|
+
def symbolic_modes_to_i(mode_sym, path) #:nodoc:
|
901
|
+
mode_sym.split(/,/).inject(File.stat(path).mode & 07777) do |current_mode, clause|
|
902
|
+
target, *actions = clause.split(/([=+-])/)
|
903
|
+
raise ArgumentError, "invalid file mode: #{mode_sym}" if actions.empty?
|
904
|
+
target = 'a' if target.empty?
|
912
905
|
user_mask = user_mask(target)
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
|
906
|
+
actions.each_slice(2) do |op, perm|
|
907
|
+
need_apply = op == '='
|
908
|
+
mode_mask = (perm || '').each_char.inject(0) do |mask, chr|
|
909
|
+
case chr
|
910
|
+
when "r"
|
911
|
+
mask | 0444
|
912
|
+
when "w"
|
913
|
+
mask | 0222
|
914
|
+
when "x"
|
915
|
+
mask | 0111
|
916
|
+
when "X"
|
917
|
+
if FileTest.directory? path
|
918
|
+
mask | 0111
|
919
|
+
else
|
920
|
+
mask
|
921
|
+
end
|
922
|
+
when "s"
|
923
|
+
mask | 06000
|
924
|
+
when "t"
|
925
|
+
mask | 01000
|
926
|
+
when "u", "g", "o"
|
927
|
+
if mask.nonzero?
|
928
|
+
current_mode = apply_mask(current_mode, user_mask, op, mask)
|
929
|
+
end
|
930
|
+
need_apply = false
|
931
|
+
copy_mask = user_mask(chr)
|
932
|
+
(current_mode & copy_mask) / (copy_mask & 0111) * (user_mask & 0111)
|
933
|
+
else
|
934
|
+
raise ArgumentError, "invalid `perm' symbol in file mode: #{chr}"
|
935
|
+
end
|
936
|
+
end
|
937
|
+
|
938
|
+
if mode_mask.nonzero? || need_apply
|
939
|
+
current_mode = apply_mask(current_mode, user_mask, op, mode_mask)
|
940
|
+
end
|
923
941
|
end
|
942
|
+
current_mode
|
924
943
|
end
|
925
944
|
end
|
926
945
|
private_module_function :symbolic_modes_to_i
|
@@ -930,6 +949,11 @@ module FileUtils
|
|
930
949
|
end
|
931
950
|
private_module_function :fu_mode
|
932
951
|
|
952
|
+
def mode_to_s(mode) #:nodoc:
|
953
|
+
mode.is_a?(String) ? mode : "%o" % mode
|
954
|
+
end
|
955
|
+
private_module_function :mode_to_s
|
956
|
+
|
933
957
|
#
|
934
958
|
# Options: noop verbose
|
935
959
|
#
|
@@ -948,23 +972,25 @@ module FileUtils
|
|
948
972
|
# FileUtils.chmod "u=wr,go=rr", %w(my.rb your.rb his.rb her.rb)
|
949
973
|
# FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', :verbose => true
|
950
974
|
#
|
951
|
-
#
|
952
|
-
#
|
953
|
-
#
|
954
|
-
#
|
955
|
-
#
|
956
|
-
#
|
957
|
-
#
|
958
|
-
#
|
959
|
-
#
|
960
|
-
#
|
961
|
-
#
|
962
|
-
#
|
975
|
+
# "a" :: is user, group, other mask.
|
976
|
+
# "u" :: is user's mask.
|
977
|
+
# "g" :: is group's mask.
|
978
|
+
# "o" :: is other's mask.
|
979
|
+
# "w" :: is write permission.
|
980
|
+
# "r" :: is read permission.
|
981
|
+
# "x" :: is execute permission.
|
982
|
+
# "X" ::
|
983
|
+
# is execute permission for directories only, must be used in conjunction with "+"
|
984
|
+
# "s" :: is uid, gid.
|
985
|
+
# "t" :: is sticky bit.
|
986
|
+
# "+" :: is added to a class given the specified mode.
|
987
|
+
# "-" :: Is removed from a given class given mode.
|
988
|
+
# "=" :: Is the exact nature of the class will be given a specified mode.
|
963
989
|
|
964
990
|
def chmod(mode, list, options = {})
|
965
991
|
fu_check_options options, OPT_TABLE['chmod']
|
966
992
|
list = fu_list(list)
|
967
|
-
fu_output_message sprintf('chmod %
|
993
|
+
fu_output_message sprintf('chmod %s %s', mode_to_s(mode), list.join(' ')) if options[:verbose]
|
968
994
|
return if options[:noop]
|
969
995
|
list.each do |path|
|
970
996
|
Entry_.new(path).chmod(fu_mode(mode, path))
|
@@ -986,9 +1012,9 @@ module FileUtils
|
|
986
1012
|
def chmod_R(mode, list, options = {})
|
987
1013
|
fu_check_options options, OPT_TABLE['chmod_R']
|
988
1014
|
list = fu_list(list)
|
989
|
-
fu_output_message sprintf('chmod -R%s %
|
1015
|
+
fu_output_message sprintf('chmod -R%s %s %s',
|
990
1016
|
(options[:force] ? 'f' : ''),
|
991
|
-
mode, list.join(' ')) if options[:verbose]
|
1017
|
+
mode_to_s(mode), list.join(' ')) if options[:verbose]
|
992
1018
|
return if options[:noop]
|
993
1019
|
list.each do |root|
|
994
1020
|
Entry_.new(root).traverse do |ent|
|
@@ -1019,8 +1045,8 @@ module FileUtils
|
|
1019
1045
|
def chown(user, group, list, options = {})
|
1020
1046
|
fu_check_options options, OPT_TABLE['chown']
|
1021
1047
|
list = fu_list(list)
|
1022
|
-
fu_output_message sprintf('chown %s%s',
|
1023
|
-
|
1048
|
+
fu_output_message sprintf('chown %s %s',
|
1049
|
+
(group ? "#{user}:#{group}" : user || ':'),
|
1024
1050
|
list.join(' ')) if options[:verbose]
|
1025
1051
|
return if options[:noop]
|
1026
1052
|
uid = fu_get_uid(user)
|
@@ -1048,14 +1074,13 @@ module FileUtils
|
|
1048
1074
|
def chown_R(user, group, list, options = {})
|
1049
1075
|
fu_check_options options, OPT_TABLE['chown_R']
|
1050
1076
|
list = fu_list(list)
|
1051
|
-
fu_output_message sprintf('chown -R%s %s%s',
|
1077
|
+
fu_output_message sprintf('chown -R%s %s %s',
|
1052
1078
|
(options[:force] ? 'f' : ''),
|
1053
|
-
|
1079
|
+
(group ? "#{user}:#{group}" : user || ':'),
|
1054
1080
|
list.join(' ')) if options[:verbose]
|
1055
1081
|
return if options[:noop]
|
1056
1082
|
uid = fu_get_uid(user)
|
1057
1083
|
gid = fu_get_gid(group)
|
1058
|
-
return unless uid or gid
|
1059
1084
|
list.each do |root|
|
1060
1085
|
Entry_.new(root).traverse do |ent|
|
1061
1086
|
begin
|
@@ -1376,14 +1401,37 @@ module FileUtils
|
|
1376
1401
|
|
1377
1402
|
def copy_metadata(path)
|
1378
1403
|
st = lstat()
|
1379
|
-
|
1404
|
+
if !st.symlink?
|
1405
|
+
File.utime st.atime, st.mtime, path
|
1406
|
+
end
|
1380
1407
|
begin
|
1381
|
-
|
1408
|
+
if st.symlink?
|
1409
|
+
begin
|
1410
|
+
File.lchown st.uid, st.gid, path
|
1411
|
+
rescue NotImplementedError
|
1412
|
+
end
|
1413
|
+
else
|
1414
|
+
File.chown st.uid, st.gid, path
|
1415
|
+
end
|
1382
1416
|
rescue Errno::EPERM
|
1383
1417
|
# clear setuid/setgid
|
1384
|
-
|
1418
|
+
if st.symlink?
|
1419
|
+
begin
|
1420
|
+
File.lchmod st.mode & 01777, path
|
1421
|
+
rescue NotImplementedError
|
1422
|
+
end
|
1423
|
+
else
|
1424
|
+
File.chmod st.mode & 01777, path
|
1425
|
+
end
|
1385
1426
|
else
|
1386
|
-
|
1427
|
+
if st.symlink?
|
1428
|
+
begin
|
1429
|
+
File.lchmod st.mode, path
|
1430
|
+
rescue NotImplementedError
|
1431
|
+
end
|
1432
|
+
else
|
1433
|
+
File.chmod st.mode, path
|
1434
|
+
end
|
1387
1435
|
end
|
1388
1436
|
end
|
1389
1437
|
|
@@ -1448,6 +1496,16 @@ module FileUtils
|
|
1448
1496
|
yield self
|
1449
1497
|
end
|
1450
1498
|
|
1499
|
+
def wrap_traverse(pre, post)
|
1500
|
+
pre.call self
|
1501
|
+
if directory?
|
1502
|
+
entries.each do |ent|
|
1503
|
+
ent.wrap_traverse pre, post
|
1504
|
+
end
|
1505
|
+
end
|
1506
|
+
post.call self
|
1507
|
+
end
|
1508
|
+
|
1451
1509
|
private
|
1452
1510
|
|
1453
1511
|
$fileutils_rb_have_lchmod = nil
|
data/rubysl-fileutils.gemspec
CHANGED
metadata
CHANGED
@@ -1,57 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubysl-fileutils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Shirai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-11 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.3'
|
20
20
|
type: :development
|
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.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.5'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubysl-prettyprint
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
55
69
|
description: Ruby standard library fileutils.
|
56
70
|
email:
|
57
71
|
- brixen@gmail.com
|
@@ -59,8 +73,8 @@ executables: []
|
|
59
73
|
extensions: []
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
62
|
-
- .gitignore
|
63
|
-
- .travis.yml
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
64
78
|
- Gemfile
|
65
79
|
- LICENSE
|
66
80
|
- README.md
|
@@ -80,12 +94,12 @@ require_paths:
|
|
80
94
|
- lib
|
81
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
82
96
|
requirements:
|
83
|
-
- - ~>
|
97
|
+
- - "~>"
|
84
98
|
- !ruby/object:Gem::Version
|
85
99
|
version: '2.0'
|
86
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
101
|
requirements:
|
88
|
-
- -
|
102
|
+
- - ">="
|
89
103
|
- !ruby/object:Gem::Version
|
90
104
|
version: '0'
|
91
105
|
requirements: []
|