rubysl-fileutils 1.0.0 → 2.0.0

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: b32a64d95c1993c930254216320469b966869446
4
- data.tar.gz: 387397e75debc65e26b03d8ade363b78a25e3875
3
+ metadata.gz: 173d0166bae6fc09c6d92734779f6154ab902977
4
+ data.tar.gz: 94834b7147331eb2267fdb562f8a36fb20e0f6e5
5
5
  SHA512:
6
- metadata.gz: 6cc84df8c5cb4d77a9b3605e63b833a20217424e5b20a65ebb217178754b530473d0d8b332c8ee9c65696c9ee8966a5a3943a8f132cca5e674afaa1549e22daa
7
- data.tar.gz: 2e13c00eebfcd395eccc9df567c940072d611e420ab5f2cd1bff29e1a41e7d1d4fdd435831f992a8b85c72256059ac141099bd854050aba96ba075761f8f3e56
6
+ metadata.gz: 1ad8a03fc6f39ad60cd1ccdbe7f3be92c5a3c125b2740b3ec2a7401b255b4fd03319f99f9676909e6480369bf919f9212ec2cc8b72b054f1d71250846add46bd
7
+ data.tar.gz: bc42abdd8c74f0a52d4a262b340f801bfc74abfc55818e55d6fcb550ad14856ef7144971cd735c29326d459e55c0dcb6ac4546e7e8196b68dc157acf4382cecc
@@ -3,5 +3,5 @@ env:
3
3
  - RUBYLIB=lib
4
4
  script: bundle exec mspec
5
5
  rvm:
6
- - 1.8.7
7
- - rbx-nightly-18mode
6
+ - 1.9.3
7
+ - rbx-nightly-19mode
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # = fileutils.rb
3
3
  #
4
- # Copyright (c) 2000-2006 Minero Aoki
4
+ # Copyright (c) 2000-2007 Minero Aoki
5
5
  #
6
6
  # This program is free software.
7
7
  # You can distribute/modify this program under the same terms of ruby.
@@ -115,6 +115,10 @@ module FileUtils
115
115
  #
116
116
  # FileUtils.cd('/', :verbose => true) # chdir and report it
117
117
  #
118
+ # FileUtils.cd('/') do # chdir
119
+ # [...] # do something
120
+ # end # return to original directory
121
+ #
118
122
  def cd(dir, options = {}, &block) # :yield: dir
119
123
  fu_check_options options, OPT_TABLE['cd']
120
124
  fu_output_message "cd #{dir}" if options[:verbose]
@@ -198,7 +202,7 @@ module FileUtils
198
202
  fu_output_message "mkdir -p #{options[:mode] ? ('-m %03o ' % options[:mode]) : ''}#{list.join ' '}" if options[:verbose]
199
203
  return *list if options[:noop]
200
204
 
201
- list.map {|path| path.sub(%r</\z>, '') }.each do |path|
205
+ list.map {|path| path.chomp(?/) }.each do |path|
202
206
  # optimize for the most common case
203
207
  begin
204
208
  fu_mkdir path, options[:mode]
@@ -212,11 +216,11 @@ module FileUtils
212
216
  stack.push path
213
217
  path = File.dirname(path)
214
218
  end
215
- stack.reverse_each do |path|
219
+ stack.reverse_each do |dir|
216
220
  begin
217
- fu_mkdir path, options[:mode]
218
- rescue SystemCallError => err
219
- raise unless File.directory?(path)
221
+ fu_mkdir dir, options[:mode]
222
+ rescue SystemCallError
223
+ raise unless File.directory?(dir)
220
224
  end
221
225
  end
222
226
  end
@@ -235,7 +239,7 @@ module FileUtils
235
239
  OPT_TABLE['makedirs'] = [:mode, :noop, :verbose]
236
240
 
237
241
  def fu_mkdir(path, mode) #:nodoc:
238
- path = path.sub(%r</\z>, '')
242
+ path = path.chomp(?/)
239
243
  if mode
240
244
  Dir.mkdir path, mode
241
245
  File.chmod mode, path
@@ -258,15 +262,24 @@ module FileUtils
258
262
  def rmdir(list, options = {})
259
263
  fu_check_options options, OPT_TABLE['rmdir']
260
264
  list = fu_list(list)
261
- fu_output_message "rmdir #{list.join ' '}" if options[:verbose]
265
+ parents = options[:parents]
266
+ fu_output_message "rmdir #{parents ? '-p ' : ''}#{list.join ' '}" if options[:verbose]
262
267
  return if options[:noop]
263
268
  list.each do |dir|
264
- Dir.rmdir dir.sub(%r</\z>, '')
269
+ begin
270
+ Dir.rmdir(dir = dir.chomp(?/))
271
+ if parents
272
+ until (parent = File.dirname(dir)) == '.' or parent == dir
273
+ Dir.rmdir(dir)
274
+ end
275
+ end
276
+ rescue Errno::ENOTEMPTY, Errno::ENOENT
277
+ end
265
278
  end
266
279
  end
267
280
  module_function :rmdir
268
281
 
269
- OPT_TABLE['rmdir'] = [:noop, :verbose]
282
+ OPT_TABLE['rmdir'] = [:parents, :noop, :verbose]
270
283
 
271
284
  #
272
285
  # Options: force noop verbose
@@ -472,7 +485,7 @@ module FileUtils
472
485
  # +dest+ must respond to #write(str).
473
486
  #
474
487
  def copy_stream(src, dest)
475
- fu_copy_stream0 src, dest, fu_stream_blksize(src, dest)
488
+ IO.copy_stream(src, dest)
476
489
  end
477
490
  module_function :copy_stream
478
491
 
@@ -480,7 +493,7 @@ module FileUtils
480
493
  # Options: force noop verbose
481
494
  #
482
495
  # Moves file(s) +src+ to +dest+. If +file+ and +dest+ exist on the different
483
- # disk partition, the file is copied instead.
496
+ # disk partition, the file is copied then the original file is removed.
484
497
  #
485
498
  # FileUtils.mv 'badname.rb', 'goodname.rb'
486
499
  # FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', :force => true # no error
@@ -526,7 +539,7 @@ module FileUtils
526
539
  OPT_TABLE['move'] = [:force, :noop, :verbose, :secure]
527
540
 
528
541
  def rename_cannot_overwrite_file? #:nodoc:
529
- /djgpp|cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM
542
+ /cygwin|mswin|mingw|bccwin|emx/ =~ RUBY_PLATFORM
530
543
  end
531
544
  private_module_function :rename_cannot_overwrite_file?
532
545
 
@@ -687,7 +700,7 @@ module FileUtils
687
700
  end
688
701
  # is a directory.
689
702
  parent_st = File.stat(File.dirname(fullpath))
690
- unless fu_world_writable?(parent_st)
703
+ unless parent_st.world_writable?
691
704
  remove_entry path, force
692
705
  return
693
706
  end
@@ -730,12 +743,7 @@ module FileUtils
730
743
  end
731
744
  module_function :remove_entry_secure
732
745
 
733
- def fu_world_writable?(st)
734
- (st.mode & 0002) != 0
735
- end
736
- private_module_function :fu_world_writable?
737
-
738
- def fu_have_symlink? #:nodoc
746
+ def fu_have_symlink? #:nodoc:
739
747
  File.symlink nil, nil
740
748
  rescue NotImplementedError
741
749
  return false
@@ -843,10 +851,9 @@ module FileUtils
843
851
  fu_check_options options, OPT_TABLE['install']
844
852
  fu_output_message "install -c#{options[:preserve] && ' -p'}#{options[:mode] ? (' -m 0%o' % options[:mode]) : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]
845
853
  return if options[:noop]
846
- fu_each_src_dest(src, dest) do |s, d|
854
+ fu_each_src_dest(src, dest) do |s, d, st|
847
855
  unless File.exist?(d) and compare_file(s, d)
848
856
  remove_file d, true
849
- st = File.stat(s) if options[:preserve]
850
857
  copy_file s, d
851
858
  File.utime st.atime, st.mtime, d if options[:preserve]
852
859
  File.chmod options[:mode], d if options[:mode]
@@ -857,23 +864,110 @@ module FileUtils
857
864
 
858
865
  OPT_TABLE['install'] = [:mode, :preserve, :noop, :verbose]
859
866
 
867
+ def user_mask(target) #:nodoc:
868
+ mask = 0
869
+ target.each_byte do |byte_chr|
870
+ case byte_chr.chr
871
+ when "u"
872
+ mask |= 04700
873
+ when "g"
874
+ mask |= 02070
875
+ when "o"
876
+ mask |= 01007
877
+ when "a"
878
+ mask |= 07777
879
+ end
880
+ end
881
+ mask
882
+ end
883
+ private_module_function :user_mask
884
+
885
+ def mode_mask(mode, path) #:nodoc:
886
+ mask = 0
887
+ mode.each_byte do |byte_chr|
888
+ case byte_chr.chr
889
+ when "r"
890
+ mask |= 0444
891
+ when "w"
892
+ mask |= 0222
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
902
+ end
903
+ mask
904
+ end
905
+ private_module_function :mode_mask
906
+
907
+ def symbolic_modes_to_i(modes, path) #:nodoc:
908
+ current_mode = (File.stat(path).mode & 07777)
909
+ modes.split(/,/).inject(0) do |mode, mode_sym|
910
+ mode_sym = "a#{mode_sym}" if mode_sym =~ %r!^[+-=]!
911
+ target, mode = mode_sym.split %r![+-=]!
912
+ user_mask = user_mask(target)
913
+ mode_mask = mode_mask(mode ? mode : "", path)
914
+
915
+ case mode_sym
916
+ when /=/
917
+ current_mode &= ~(user_mask)
918
+ current_mode |= user_mask & mode_mask
919
+ when /\+/
920
+ current_mode |= user_mask & mode_mask
921
+ when /-/
922
+ current_mode &= ~(user_mask & mode_mask)
923
+ end
924
+ end
925
+ end
926
+ private_module_function :symbolic_modes_to_i
927
+
928
+ def fu_mode(mode, path) #:nodoc:
929
+ mode.is_a?(String) ? symbolic_modes_to_i(mode, path) : mode
930
+ end
931
+ private_module_function :fu_mode
932
+
860
933
  #
861
934
  # Options: noop verbose
862
935
  #
863
936
  # Changes permission bits on the named files (in +list+) to the bit pattern
864
937
  # represented by +mode+.
865
938
  #
939
+ # +mode+ is the symbolic and absolute mode can be used.
940
+ #
941
+ # Absolute mode is
866
942
  # FileUtils.chmod 0755, 'somecommand'
867
943
  # FileUtils.chmod 0644, %w(my.rb your.rb his.rb her.rb)
868
944
  # FileUtils.chmod 0755, '/usr/bin/ruby', :verbose => true
869
945
  #
946
+ # Symbolic mode is
947
+ # FileUtils.chmod "u=wrx,go=rx", 'somecommand'
948
+ # FileUtils.chmod "u=wr,go=rr", %w(my.rb your.rb his.rb her.rb)
949
+ # FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', :verbose => true
950
+ #
951
+ # "a" is user, group, other mask.
952
+ # "u" is user's mask.
953
+ # "g" is group's mask.
954
+ # "o" is other's mask.
955
+ # "w" is write permission.
956
+ # "r" is read permission.
957
+ # "x" is execute permission.
958
+ # "s" is uid, gid.
959
+ # "t" is sticky bit.
960
+ # "+" is added to a class given the specified mode.
961
+ # "-" Is removed from a given class given mode.
962
+ # "=" Is the exact nature of the class will be given a specified mode.
963
+
870
964
  def chmod(mode, list, options = {})
871
965
  fu_check_options options, OPT_TABLE['chmod']
872
966
  list = fu_list(list)
873
967
  fu_output_message sprintf('chmod %o %s', mode, list.join(' ')) if options[:verbose]
874
968
  return if options[:noop]
875
969
  list.each do |path|
876
- Entry_.new(path).chmod mode
970
+ Entry_.new(path).chmod(fu_mode(mode, path))
877
971
  end
878
972
  end
879
973
  module_function :chmod
@@ -887,6 +981,7 @@ module FileUtils
887
981
  # to the bit pattern represented by +mode+.
888
982
  #
889
983
  # FileUtils.chmod_R 0700, "/tmp/app.#{$$}"
984
+ # FileUtils.chmod_R "u=wrx", "/tmp/app.#{$$}"
890
985
  #
891
986
  def chmod_R(mode, list, options = {})
892
987
  fu_check_options options, OPT_TABLE['chmod_R']
@@ -898,7 +993,7 @@ module FileUtils
898
993
  list.each do |root|
899
994
  Entry_.new(root).traverse do |ent|
900
995
  begin
901
- ent.chmod mode
996
+ ent.chmod(fu_mode(mode, ent.path))
902
997
  rescue
903
998
  raise unless options[:force]
904
999
  end
@@ -980,20 +1075,26 @@ module FileUtils
980
1075
 
981
1076
  def fu_get_uid(user) #:nodoc:
982
1077
  return nil unless user
983
- user = user.to_s
984
- if /\A\d+\z/ =~ user
985
- then user.to_i
986
- else Etc.getpwnam(user).uid
1078
+ case user
1079
+ when Integer
1080
+ user
1081
+ when /\A\d+\z/
1082
+ user.to_i
1083
+ else
1084
+ Etc.getpwnam(user).uid
987
1085
  end
988
1086
  end
989
1087
  private_module_function :fu_get_uid
990
1088
 
991
1089
  def fu_get_gid(group) #:nodoc:
992
1090
  return nil unless group
993
- group = group.to_s
994
- if /\A\d+\z/ =~ group
995
- then group.to_i
996
- else Etc.getgrnam(group).gid
1091
+ case group
1092
+ when Integer
1093
+ group
1094
+ when /\A\d+\z/
1095
+ group.to_i
1096
+ else
1097
+ Etc.getgrnam(group).gid
997
1098
  end
998
1099
  end
999
1100
  private_module_function :fu_get_gid
@@ -1027,7 +1128,7 @@ module FileUtils
1027
1128
  created = nocreate = options[:nocreate]
1028
1129
  t = options[:mtime]
1029
1130
  if options[:verbose]
1030
- fu_output_message "touch #{nocreate ? ' -c' : ''}#{t ? t.strftime(' -t %Y%m%d%H%M.%S') : ''}#{list.join ' '}"
1131
+ fu_output_message "touch #{nocreate ? '-c ' : ''}#{t ? t.strftime('-t %Y%m%d%H%M.%S ') : ''}#{list.join ' '}"
1031
1132
  end
1032
1133
  return if options[:noop]
1033
1134
  list.each do |path|
@@ -1054,14 +1155,11 @@ module FileUtils
1054
1155
  private
1055
1156
 
1056
1157
  def fu_windows?
1057
- /mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM
1158
+ /mswin|mingw|bccwin|emx/ =~ RUBY_PLATFORM
1058
1159
  end
1059
1160
 
1060
- def fu_copy_stream0(src, dest, blksize) #:nodoc:
1061
- # FIXME: readpartial?
1062
- while s = src.read(blksize)
1063
- dest.write s
1064
- end
1161
+ def fu_copy_stream0(src, dest, blksize = nil) #:nodoc:
1162
+ IO.copy_stream(src, dest)
1065
1163
  end
1066
1164
 
1067
1165
  def fu_stream_blksize(*streams)
@@ -1110,7 +1208,7 @@ module FileUtils
1110
1208
 
1111
1209
  def path
1112
1210
  if @path
1113
- @path.to_str
1211
+ File.path(@path)
1114
1212
  else
1115
1213
  join(@prefix, @rel)
1116
1214
  end
@@ -1175,7 +1273,9 @@ module FileUtils
1175
1273
  end
1176
1274
 
1177
1275
  def entries
1178
- Dir.entries(path())\
1276
+ opts = {}
1277
+ opts[:encoding] = ::Encoding::UTF_8 if fu_windows?
1278
+ Dir.entries(path(), opts)\
1179
1279
  .reject {|n| n == '.' or n == '..' }\
1180
1280
  .map {|n| Entry_.new(prefix(), join(rel(), n.untaint)) }
1181
1281
  end
@@ -1237,6 +1337,9 @@ module FileUtils
1237
1337
  when file?
1238
1338
  copy_file dest
1239
1339
  when directory?
1340
+ if !File.exist?(dest) and descendant_diretory?(dest, path)
1341
+ raise ArgumentError, "cannot copy directory %s to itself %s" % [path, dest]
1342
+ end
1240
1343
  begin
1241
1344
  Dir.mkdir dest
1242
1345
  rescue
@@ -1264,12 +1367,11 @@ module FileUtils
1264
1367
  end
1265
1368
 
1266
1369
  def copy_file(dest)
1267
- st = stat()
1268
- File.open(path(), 'rb') {|r|
1269
- File.open(dest, 'wb', st.mode) {|w|
1270
- fu_copy_stream0 r, w, (fu_blksize(st) || fu_default_blksize())
1271
- }
1272
- }
1370
+ File.open(path()) do |s|
1371
+ File.open(dest, 'wb', s.stat.mode) do |f|
1372
+ IO.copy_stream(s, f)
1373
+ end
1374
+ end
1273
1375
  end
1274
1376
 
1275
1377
  def copy_metadata(path)
@@ -1295,7 +1397,7 @@ module FileUtils
1295
1397
 
1296
1398
  def remove_dir1
1297
1399
  platform_support {
1298
- Dir.rmdir path().sub(%r</\z>, '')
1400
+ Dir.rmdir path().chomp(?/)
1299
1401
  }
1300
1402
  end
1301
1403
 
@@ -1385,60 +1487,58 @@ module FileUtils
1385
1487
  end
1386
1488
 
1387
1489
  def join(dir, base)
1388
- return dir.to_str if not base or base == '.'
1389
- return base.to_str if not dir or dir == '.'
1490
+ return File.path(dir) if not base or base == '.'
1491
+ return File.path(base) if not dir or dir == '.'
1390
1492
  File.join(dir, base)
1391
1493
  end
1494
+
1495
+ if File::ALT_SEPARATOR
1496
+ DIRECTORY_TERM = "(?=[/#{Regexp.quote(File::ALT_SEPARATOR)}]|\\z)".freeze
1497
+ else
1498
+ DIRECTORY_TERM = "(?=/|\\z)".freeze
1499
+ end
1500
+ SYSCASE = File::FNM_SYSCASE.nonzero? ? "-i" : ""
1501
+
1502
+ def descendant_diretory?(descendant, ascendant)
1503
+ /\A(?#{SYSCASE}:#{Regexp.quote(ascendant)})#{DIRECTORY_TERM}/ =~ File.dirname(descendant)
1504
+ end
1392
1505
  end # class Entry_
1393
1506
 
1394
1507
  def fu_list(arg) #:nodoc:
1395
- [arg].flatten.map {|path| path.to_str }
1508
+ [arg].flatten.map {|path| File.path(path) }
1396
1509
  end
1397
1510
  private_module_function :fu_list
1398
1511
 
1399
1512
  def fu_each_src_dest(src, dest) #:nodoc:
1400
1513
  fu_each_src_dest0(src, dest) do |s, d|
1401
1514
  raise ArgumentError, "same file: #{s} and #{d}" if fu_same?(s, d)
1402
- yield s, d
1515
+ yield s, d, File.stat(s)
1403
1516
  end
1404
1517
  end
1405
1518
  private_module_function :fu_each_src_dest
1406
1519
 
1407
1520
  def fu_each_src_dest0(src, dest) #:nodoc:
1408
- if src.is_a?(Array)
1409
- src.each do |s|
1410
- s = s.to_str
1521
+ if tmp = Array.try_convert(src)
1522
+ tmp.each do |s|
1523
+ s = File.path(s)
1411
1524
  yield s, File.join(dest, File.basename(s))
1412
1525
  end
1413
1526
  else
1414
- src = src.to_str
1527
+ src = File.path(src)
1415
1528
  if File.directory?(dest)
1416
1529
  yield src, File.join(dest, File.basename(src))
1417
1530
  else
1418
- yield src, dest.to_str
1531
+ yield src, File.path(dest)
1419
1532
  end
1420
1533
  end
1421
1534
  end
1422
1535
  private_module_function :fu_each_src_dest0
1423
1536
 
1424
1537
  def fu_same?(a, b) #:nodoc:
1425
- if fu_have_st_ino?
1426
- st1 = File.stat(a)
1427
- st2 = File.stat(b)
1428
- st1.dev == st2.dev and st1.ino == st2.ino
1429
- else
1430
- File.expand_path(a) == File.expand_path(b)
1431
- end
1432
- rescue Errno::ENOENT
1433
- return false
1538
+ File.identical?(a, b)
1434
1539
  end
1435
1540
  private_module_function :fu_same?
1436
1541
 
1437
- def fu_have_st_ino? #:nodoc:
1438
- not fu_windows?
1439
- end
1440
- private_module_function :fu_have_st_ino?
1441
-
1442
1542
  def fu_check_options(options, optdecl) #:nodoc:
1443
1543
  h = options.dup
1444
1544
  optdecl.each do |opt|
@@ -1449,8 +1549,8 @@ module FileUtils
1449
1549
  private_module_function :fu_check_options
1450
1550
 
1451
1551
  def fu_update_option(args, new) #:nodoc:
1452
- if args.last.is_a?(Hash)
1453
- args[-1] = args.last.dup.update(new)
1552
+ if tmp = Hash.try_convert(args.last)
1553
+ args[-1] = tmp.dup.update(new)
1454
1554
  else
1455
1555
  args.push new
1456
1556
  end
@@ -1516,8 +1616,14 @@ module FileUtils
1516
1616
  OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }
1517
1617
  end
1518
1618
 
1519
- METHODS = singleton_methods() - %w( private_module_function
1520
- commands options have_option? options_of collect_method )
1619
+ LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern)
1620
+ module LowMethods
1621
+ module_eval("private\n" + ::FileUtils::LOW_METHODS.map {|name| "def #{name}(*)end"}.join("\n"),
1622
+ __FILE__, __LINE__)
1623
+ end
1624
+
1625
+ METHODS = singleton_methods() - [:private_module_function,
1626
+ :commands, :options, :have_option?, :options_of, :collect_method]
1521
1627
 
1522
1628
  #
1523
1629
  # This module has all methods of FileUtils module, but it outputs messages
@@ -1551,6 +1657,7 @@ module FileUtils
1551
1657
  #
1552
1658
  module NoWrite
1553
1659
  include FileUtils
1660
+ include LowMethods
1554
1661
  @fileutils_output = $stderr
1555
1662
  @fileutils_label = ''
1556
1663
  ::FileUtils.collect_method(:noop).each do |name|
@@ -1577,6 +1684,7 @@ module FileUtils
1577
1684
  #
1578
1685
  module DryRun
1579
1686
  include FileUtils
1687
+ include LowMethods
1580
1688
  @fileutils_output = $stderr
1581
1689
  @fileutils_label = ''
1582
1690
  ::FileUtils.collect_method(:noop).each do |name|
@@ -1,5 +1,5 @@
1
1
  module RubySL
2
2
  module FileUtils
3
- VERSION = "1.0.0"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
@@ -16,6 +16,8 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ["lib"]
18
18
 
19
+ spec.add_runtime_dependency "redcard", "~> 1.0"
20
+
19
21
  spec.add_development_dependency "bundler", "~> 1.3"
20
22
  spec.add_development_dependency "rake", "~> 10.0"
21
23
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysl-fileutils
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
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-08-27 00:00:00.000000000 Z
11
+ date: 2013-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: redcard
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement