ptools 1.3.3 → 1.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c180275bc8e38301a9c1d13771831614cf4febb5
4
- data.tar.gz: 0de46ac283166ffc26a20955f2b4d4809116a6fc
2
+ SHA256:
3
+ metadata.gz: be2c833dd51c09611f84da85481ae3b8039d427955fa951c5aab0745bef680d7
4
+ data.tar.gz: 612f6f1ab4cb5e605d9b1c18d26a9b35b95e798a9e9e11d54f539bb5ee1f1082
5
5
  SHA512:
6
- metadata.gz: 8bf975d8d26c1f464f48cdb831347eba7a4094ccba45e9f974766ca14f343db58d87a41dad2a7647ad1f3b3a1923622549177c6936638b60a796ba33088984ee
7
- data.tar.gz: 849697b55d1a7ee705f5eec78f3a2e19dcfe086e5b1cbf753bcf185509554dac11ee153709fd356ff8dc601d7806ebe9cc5d288abfb70cd6df5c6cd631449fdb
6
+ metadata.gz: 8ec40d7c6e2d9edb2cc0e5a41a74469d7a17d208cd67d0461963488c20f97ab06b125c17903c976c6f741f93a36612ccdd63fde6c9ac0a64671340b2dbe7d78c
7
+ data.tar.gz: 7cd78b2d229c8f98a7df154275d74cb0055336bac5b40368112dd83a3cf5b8ed96c3b708b5fe5cda543a263041ab2ab44fe1a656e8be70f5d4c0c36259646bb0
Binary file
data.tar.gz.sig CHANGED
Binary file
data/CHANGES CHANGED
@@ -1,10 +1,38 @@
1
+ == 1.4.0 - 20-Aug-2020
2
+ * Switched from test-unit to rspec, and reworked the tests bit in general.
3
+ * Removed the File.null method since Ruby has IO::NULL.
4
+
5
+ == 1.3.7 - 24-Jun-2020
6
+ * Fixed a bug where the File.binary? method would bomb on a zero byte file.
7
+ Thanks go to Alexandru Emil Lupu for the spot and patch.
8
+ * Remove Gemfile.lock from repo. You can generate that yourself locally if
9
+ you want.
10
+
11
+ == 1.3.6 - 7-Jun-2020
12
+ * Updated gemspec, added more versions to .travis.yml file, fixed typo.
13
+ Thanks go to Al Snow for the updates.
14
+ * Fixed a bug where the File.binary? method would return true for utf16
15
+ or utf32 encoded files. Thanks go to Andrew McAndre for the spot.
16
+ * Updated cert.
17
+
18
+ == 1.3.5 - 3-Sep-2017
19
+ * The File.image? method now checks against .ico files.
20
+ * Eliminated Fixnum warning that showed up in Ruby 2.4.x.
21
+ * Updated cert.
22
+
23
+ == 1.3.4 - 4-Jul-2017
24
+ * The File.binary? method now lets you set your own percentage for the
25
+ internal heuristic as an optional second argument.
26
+ * The VERSION constant is now frozen.
27
+ * Minor updates to the Rakefile and gemspec.
28
+ * Updated cert file.
29
+
1
30
  == 1.3.3 - 25-Sep-2015
2
31
  * This gem is now signed.
3
32
  * The Rakefile tasks now assume Rubygems 2.x.
4
33
 
5
34
  == 1.3.2 - 11-Dec-2014
6
- * Update to the File.tail method that deals prevents potential line ending
7
- issues in JRuby.
35
+ * Update to the File.tail method that prevents potential line ending issues in JRuby.
8
36
  * Added known issues with JRuby to the README.
9
37
 
10
38
  == 1.3.1 - 9-Dec-2014
data/Gemfile CHANGED
@@ -8,5 +8,5 @@ end
8
8
 
9
9
  group :test do
10
10
  gem 'rake'
11
- gem 'test-unit'
11
+ gem 'rspec'
12
12
  end
data/MANIFEST CHANGED
@@ -1,20 +1,27 @@
1
1
  * CHANGES
2
2
  * README
3
3
  * MANIFEST
4
+ * Gemfile
4
5
  * Rakefile
5
6
  * ptools.gemspec
6
7
  * certs/djberg96_pub.pem
7
8
  * lib/ptools.rb
8
- * test/test_constants.rb
9
- * test/test_head.rb
10
- * test/test_image.rb
11
- * test/test_nlconvert.rb
12
- * test/test_null.rb
13
- * test/test_tail.rb
14
- * test/test_touch.rb
15
- * test/test_wc.rb
16
- * test/test_which.rb
17
- * test/test_whereis.rb
18
- * test/img/test.gif
19
- * test/img/test.jpg
20
- * test/img/test.png
9
+ * spec/binary_spec.rb
10
+ * spec/constants_spec.rb
11
+ * spec/head_spec.rb
12
+ * spec/image_spec.rb
13
+ * spec/nlconvert_spec.rb
14
+ * spec/sparse_spec.rb
15
+ * spec/tail_spec.rb
16
+ * spec/touch_spec.rb
17
+ * spec/wc_spec.rb
18
+ * spec/whereis_spec.rb
19
+ * spec/which_spec.rb
20
+ * spec/img/test.gif
21
+ * spec/img/test.ico
22
+ * spec/img/test.jpg
23
+ * spec/img/test.png
24
+ * spec/txt/empty.txt
25
+ * spec/txt/english.txt
26
+ * spec/txt/english.utf16
27
+ * spec/txt/korean.txt
data/README CHANGED
@@ -47,14 +47,16 @@
47
47
 
48
48
  Thanks go to Matt Hoyle for help with the File.tail method.
49
49
 
50
+ And thanks to any and all contributors!
51
+
50
52
  == Future Plans
51
53
  Add whatever other tools people think might be useful.
52
54
 
53
55
  == License
54
- Artistic 2.0
56
+ Artistic-2.0
55
57
 
56
58
  == Copyright
57
- (C) 2003-2014 Daniel J. Berger
59
+ (C) 2003-2020 Daniel J. Berger
58
60
  All Rights Reserved.
59
61
 
60
62
  == Warranty
data/Rakefile CHANGED
@@ -2,15 +2,16 @@ require 'rake'
2
2
  require 'rake/clean'
3
3
  require 'rake/testtask'
4
4
  require 'rbconfig'
5
+ require 'rspec/core/rake_task'
5
6
  include RbConfig
6
7
 
7
8
  CLEAN.include("**/*.gem", "**/*.rbc", "**/*coverage*")
8
9
 
9
10
  desc 'Install the ptools package (non-gem)'
10
11
  task :install do
11
- sitelibdir = CONFIG["sitelibdir"]
12
- file = "lib/ptools.rb"
13
- FileUtils.cp(file, sitelibdir, :verbose => true)
12
+ sitelibdir = CONFIG["sitelibdir"]
13
+ file = "lib/ptools.rb"
14
+ FileUtils.cp(file, sitelibdir, :verbose => true)
14
15
  end
15
16
 
16
17
  namespace 'gem' do
@@ -33,103 +34,54 @@ namespace 'gem' do
33
34
  end
34
35
  end
35
36
 
36
- Rake::TestTask.new do |t|
37
- task :test => :clean
38
- t.verbose = true
39
- t.warning = true
40
- end
41
-
42
- namespace 'test' do
43
- desc "Check test coverage using rcov"
44
- task :coverage => [:clean] do
45
- require 'rcov'
46
- rm_rf 'coverage'
47
- sh "rcov -Ilib test/test*.rb"
37
+ namespace 'spec' do
38
+ RSpec::Core::RakeTask.new(:binary) do |t|
39
+ t.pattern = 'spec/binary_spec.rb'
48
40
  end
49
41
 
50
- Rake::TestTask.new('binary') do |t|
51
- t.libs << 'test'
52
- t.verbose = true
53
- t.warning = true
54
- t.test_files = FileList['test/test_binary.rb']
42
+ RSpec::Core::RakeTask.new(:constants) do |t|
43
+ t.pattern = 'spec/constants_spec.rb'
55
44
  end
56
45
 
57
- Rake::TestTask.new('constants') do |t|
58
- t.libs << 'test'
59
- t.verbose = true
60
- t.warning = true
61
- t.test_files = FileList['test/test_constants.rb']
46
+ RSpec::Core::RakeTask.new(:head) do |t|
47
+ t.pattern = 'spec/head_spec.rb'
62
48
  end
63
49
 
64
- Rake::TestTask.new('head') do |t|
65
- t.libs << 'test'
66
- t.verbose = true
67
- t.warning = true
68
- t.test_files = FileList['test/test_head.rb']
50
+ RSpec::Core::RakeTask.new(:image) do |t|
51
+ t.pattern = 'spec/image_spec.rb'
69
52
  end
70
53
 
71
- Rake::TestTask.new('image') do |t|
72
- t.libs << 'test'
73
- t.verbose = true
74
- t.warning = true
75
- t.test_files = FileList['test/test_image.rb']
54
+ RSpec::Core::RakeTask.new(:nlconvert) do |t|
55
+ t.pattern = 'spec/nlconvert_spec.rb'
76
56
  end
77
57
 
78
- Rake::TestTask.new('nlconvert') do |t|
79
- t.libs << 'test'
80
- t.verbose = true
81
- t.warning = true
82
- t.test_files = FileList['test/test_nlconvert.rb']
58
+ RSpec::Core::RakeTask.new(:sparse) do |t|
59
+ t.pattern = 'spec/sparse_spec.rb'
83
60
  end
84
61
 
85
- Rake::TestTask.new('null') do |t|
86
- t.libs << 'test'
87
- t.verbose = true
88
- t.warning = true
89
- t.test_files = FileList['test/test_null.rb']
62
+ RSpec::Core::RakeTask.new(:tail) do |t|
63
+ t.pattern = 'spec/tail_spec.rb'
90
64
  end
91
65
 
92
- Rake::TestTask.new('sparse') do |t|
93
- t.libs << 'test'
94
- t.verbose = true
95
- t.warning = true
96
- t.test_files = FileList['test/test_is_sparse.rb']
66
+ RSpec::Core::RakeTask.new(:touch) do |t|
67
+ t.pattern = 'spec/touch_spec.rb'
97
68
  end
98
69
 
99
- Rake::TestTask.new('tail') do |t|
100
- t.libs << 'test'
101
- t.verbose = true
102
- t.warning = true
103
- t.test_files = FileList['test/test_tail.rb']
70
+ RSpec::Core::RakeTask.new(:wc) do |t|
71
+ t.pattern = 'spec/wc_spec.rb'
104
72
  end
105
-
106
- Rake::TestTask.new('touch') do |t|
107
- t.libs << 'test'
108
- t.verbose = true
109
- t.warning = true
110
- t.test_files = FileList['test/test_touch.rb']
111
- end
112
-
113
- Rake::TestTask.new('wc') do |t|
114
- t.libs << 'test'
115
- t.verbose = true
116
- t.warning = true
117
- t.test_files = FileList['test/test_wc.rb']
73
+
74
+ RSpec::Core::RakeTask.new(:whereis) do |t|
75
+ t.pattern = 'spec/whereis_spec.rb'
118
76
  end
119
77
 
120
- Rake::TestTask.new('whereis') do |t|
121
- t.libs << 'test'
122
- t.verbose = true
123
- t.warning = true
124
- t.test_files = FileList['test/test_whereis.rb']
78
+ RSpec::Core::RakeTask.new(:which) do |t|
79
+ t.pattern = 'spec/which_spec.rb'
125
80
  end
126
81
 
127
- Rake::TestTask.new('which') do |t|
128
- t.libs << 'test'
129
- t.verbose = true
130
- t.warning = true
131
- t.test_files = FileList['test/test_which.rb']
82
+ RSpec::Core::RakeTask.new(:all) do |t|
83
+ t.pattern = 'spec/*_spec.rb'
132
84
  end
133
85
  end
134
86
 
135
- task :default => :test
87
+ task :default => 'spec:all'
@@ -1,21 +1,26 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhkamJl
2
+ MIIEcDCCAtigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MREwDwYDVQQDDAhkamJl
3
3
  cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
4
- MB4XDTE1MDkwMjIwNDkxOFoXDTE2MDkwMTIwNDkxOFowPzERMA8GA1UEAwwIZGpi
4
+ MB4XDTE4MDMxODE1MjIwN1oXDTI4MDMxNTE1MjIwN1owPzERMA8GA1UEAwwIZGpi
5
5
  ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
6
- bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyTkvXqRp6hLs9eoJOS
7
- Hmi8kRYbq9Vkf15/hMxJpotYMgJVHHWrmDcC5Dye2PbnXjTkKf266Zw0PtT9h+lI
8
- S3ts9HO+vaCFSMwFFZmnWJSpQ3CNw2RcHxjWkk9yF7imEM8Kz9ojhiDXzBetdV6M
9
- gr0lV/alUr7TNVBDngbXEfTWscyXh1qd7xZ4EcOdsDktCe5G45N/o3662tPQvJsi
10
- FOF0CM/KuBsa/HL1/eoEmF4B3EKIRfTHrQ3hu20Kv3RJ88QM4ec2+0dd97uX693O
11
- zv6981fyEg+aXLkxrkViM/tz2qR2ZE0jPhHTREPYeMEgptRkTmWSKAuLVWrJEfgl
12
- DtkCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEwe
13
- nn6bfJADmuIDiMSOzedOrL+xMB0GA1UdEQQWMBSBEmRqYmVyZzk2QGdtYWlsLmNv
14
- bTAdBgNVHRIEFjAUgRJkamJlcmc5NkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD
15
- ggEBAHmNOCWoDVD75zHFueY0viwGDVP1BNGFC+yXcb7u2GlK+nEMCORqzURbYPf7
16
- tL+/hzmePIRz7i30UM//64GI1NLv9jl7nIwjhPpXpf7/lu2I9hOTsvwSumb5UiKC
17
- /sqBxI3sfj9pr79Wpv4MuikX1XPik7Ncb7NPsJPw06Lvyc3Hkg5X2XpPtLtS+Gr2
18
- wKJnmzb5rIPS1cmsqv0M9LPWflzfwoZ/SpnmhagP+g05p8bRNKjZSA2iImM/GyYZ
19
- EJYzxdPOrx2n6NYR3Hk+vHP0U7UBSveI6+qx+ndQYaeyCn+GRX2PKS9h66YF/Q1V
20
- tGSHgAmcLlkdGgan182qsE/4kKM=
6
+ bTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBALgfaroVM6CI06cxr0/h
7
+ A+j+pc8fgpRgBVmHFaFunq28GPC3IvW7Nvc3Y8SnAW7pP1EQIbhlwRIaQzJ93/yj
8
+ u95KpkP7tA9erypnV7dpzBkzNlX14ACaFD/6pHoXoe2ltBxk3CCyyzx70mTqJpph
9
+ 75IB03ni9a8yqn8pmse+s83bFJOAqddSj009sGPcQO+QOWiNxqYv1n5EHcvj2ebO
10
+ 6hN7YTmhx7aSia4qL/quc4DlIaGMWoAhvML7u1fmo53CYxkKskfN8MOecq2vfEmL
11
+ iLu+SsVVEAufMDDFMXMJlvDsviolUSGMSNRTujkyCcJoXKYYxZSNtIiyd9etI0X3
12
+ ctu0uhrFyrMZXCedutvXNjUolD5r9KGBFSWH1R9u2I3n3SAyFF2yzv/7idQHLJJq
13
+ 74BMnx0FIq6fCpu5slAipvxZ3ZkZpEXZFr3cIBtO1gFvQWW7E/Y3ijliWJS1GQFq
14
+ 058qERadHGu1yu1dojmFRo6W2KZvY9al2yIlbkpDrD5MYQIDAQABo3cwdTAJBgNV
15
+ HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUFZsMapgzJimzsbaBG2Tm8j5e
16
+ AzgwHQYDVR0RBBYwFIESZGpiZXJnOTZAZ21haWwuY29tMB0GA1UdEgQWMBSBEmRq
17
+ YmVyZzk2QGdtYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAW2tnYixXQtKxgGXq
18
+ /3iSWG2bLwvxS4go3srO+aRXZHrFUMlJ5W0mCxl03aazxxKTsVVpZD8QZxvK91OQ
19
+ h9zr9JBYqCLcCVbr8SkmYCi/laxIZxsNE5YI8cC8vvlLI7AMgSfPSnn/Epq1GjGY
20
+ 6L1iRcEDtanGCIvjqlCXO9+BmsnCfEVehqZkQHeYczA03tpOWb6pon2wzvMKSsKH
21
+ ks0ApVdstSLz1kzzAqem/uHdG9FyXdbTAwH1G4ZPv69sQAFAOCgAqYmdnzedsQtE
22
+ 1LQfaQrx0twO+CZJPcRLEESjq8ScQxWRRkfuh2VeR7cEU7L7KqT10mtUwrvw7APf
23
+ DYoeCY9KyjIBjQXfbj2ke5u1hZj94Fsq9FfbEQg8ygCgwThnmkTrrKEiMSs3alYR
24
+ ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
25
+ WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
21
26
  -----END CERTIFICATE-----
@@ -3,7 +3,7 @@ require 'win32/file' if File::ALT_SEPARATOR
3
3
 
4
4
  class File
5
5
  # The version of the ptools library.
6
- PTOOLS_VERSION = '1.3.3'
6
+ PTOOLS_VERSION = '1.4.0'.freeze
7
7
 
8
8
  # :stopdoc:
9
9
 
@@ -23,8 +23,8 @@ class File
23
23
 
24
24
  # :startdoc:
25
25
 
26
- # Returns whether or not the file is an image. Only JPEG, PNG, BMP and
27
- # GIF are checked against.
26
+ # Returns whether or not the file is an image. Only JPEG, PNG, BMP,
27
+ # GIF, and ICO are checked against.
28
28
  #
29
29
  # This method does some simple read and extension checks. For a version
30
30
  # that is more robust, but which depends on a 3rd party C library (and is
@@ -39,46 +39,20 @@ class File
39
39
  # http://en.wikipedia.org/wiki/Magic_number_(programming)
40
40
  #
41
41
  def self.image?(file)
42
- bool = IMAGE_EXT.include?(File.extname(file).downcase) # Match ext
43
- bool = bmp?(file) || jpg?(file) || png?(file) || gif?(file) || tiff?(file) # Check data
42
+ bool = IMAGE_EXT.include?(File.extname(file).downcase)
43
+ bool = bmp?(file) || jpg?(file) || png?(file) || gif?(file) || tiff?(file) || ico?(file)
44
44
  bool
45
45
  end
46
46
 
47
- # Returns the name of the null device (aka bitbucket) on your platform.
48
- #
49
- # Examples:
50
- #
51
- # # On Linux
52
- # File.null # => '/dev/null'
53
- #
54
- # # On MS Windows
55
- # File.null # => 'NUL'
56
- #--
57
- # The values I used here are based on information from
58
- # http://en.wikipedia.org/wiki//dev/null
59
- #
60
- def self.null
61
- case RbConfig::CONFIG['host_os']
62
- when /mswin|win32|msdos|mingw|windows/i
63
- 'NUL'
64
- when /amiga/i
65
- 'NIL:'
66
- when /openvms/i
67
- 'NL:'
68
- else
69
- '/dev/null'
70
- end
71
- end
72
-
73
- class << self
74
- alias null_device null
75
- end
76
-
77
47
  # Returns whether or not +file+ is a binary non-image file, i.e. executable,
78
48
  # shared object, ect. Note that this is NOT guaranteed to be 100% accurate.
79
49
  # It performs a "best guess" based on a simple test of the first
80
50
  # +File.blksize+ characters, or 4096, whichever is smaller.
81
51
  #
52
+ # By default it will check to see if more than 30 percent of the characters
53
+ # are non-text characters. If so, the method returns true. You can configure
54
+ # this percentage by passing your own as a second argument.
55
+ #
82
56
  # Example:
83
57
  #
84
58
  # File.binary?('somefile.exe') # => true
@@ -87,13 +61,15 @@ class File
87
61
  # Based on code originally provided by Ryan Davis (which, in turn, is
88
62
  # based on Perl's -B switch).
89
63
  #
90
- def self.binary?(file)
64
+ def self.binary?(file, percentage = 0.30)
65
+ return false if File.stat(file).zero?
91
66
  return false if image?(file)
67
+ return false if check_bom?(file)
92
68
  bytes = File.stat(file).blksize
93
69
  bytes = 4096 if bytes > 4096
94
70
  s = (File.read(file, bytes) || "")
95
71
  s = s.encode('US-ASCII', :undef => :replace).split(//)
96
- ((s.size - s.grep(" ".."~").size) / s.size.to_f) > 0.30
72
+ ((s.size - s.grep(" ".."~").size) / s.size.to_f) > percentage
97
73
  end
98
74
 
99
75
  # Looks for the first occurrence of +program+ within +path+.
@@ -428,6 +404,20 @@ class File
428
404
 
429
405
  private
430
406
 
407
+ # Returns whether or not the given +text+ contains a BOM marker.
408
+ # If present, we can generally assume it's a text file.
409
+ #
410
+ def self.check_bom?(file)
411
+ text = File.read(file, 4).force_encoding('utf-8')
412
+
413
+ bool = false
414
+ bool = true if text[0,3] == "\xEF\xBB\xBF"
415
+ bool = true if text[0,4] == "\x00\x00\xFE\xFF" || text[0,4] == "\xFF\xFE\x00\x00"
416
+ bool = true if text[0,2] == "\xFF\xFE" || text[0,2] == "\xFE\xFF"
417
+
418
+ bool
419
+ end
420
+
431
421
  def self.nl_for_platform(platform)
432
422
  platform = RbConfig::CONFIG["host_os"] if platform == 'local'
433
423
 
@@ -479,4 +469,8 @@ class File
479
469
 
480
470
  true
481
471
  end
472
+
473
+ def self.ico?(file)
474
+ ["\000\000\001\000", "\000\000\002\000"].include?(IO.read(file, 4, nil, :encoding => 'binary'))
475
+ end
482
476
  end
@@ -1,16 +1,15 @@
1
- require 'rubygems'
2
1
  require 'rbconfig'
3
2
 
4
3
  Gem::Specification.new do |spec|
5
4
  spec.name = 'ptools'
6
- spec.version = '1.3.3'
7
- spec.license = 'Artistic 2.0'
5
+ spec.version = '1.4.0'
6
+ spec.license = 'Artistic-2.0'
8
7
  spec.author = 'Daniel J. Berger'
9
8
  spec.email = 'djberg96@gmail.com'
10
9
  spec.homepage = 'https://github.com/djberg96/ptools'
11
10
  spec.summary = 'Extra methods for the File class'
12
- spec.test_files = Dir['test/test*']
13
- spec.files = Dir['**/*'] << '.gemtest'
11
+ spec.test_files = Dir['spec/_spec*']
12
+ spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
14
13
  spec.cert_chain = ['certs/djberg96_pub.pem']
15
14
 
16
15
  spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
@@ -22,10 +21,10 @@ Gem::Specification.new do |spec|
22
21
  EOF
23
22
 
24
23
  spec.add_development_dependency('rake')
25
- spec.add_development_dependency('test-unit', '>= 2.5.0')
24
+ spec.add_development_dependency('rspec', '~> 3.9')
26
25
 
27
26
  if File::ALT_SEPARATOR
28
27
  spec.platform = Gem::Platform.new(['universal', 'mingw32'])
29
- spec.add_dependency('win32-file', '>= 0.7.0')
28
+ spec.add_dependency('win32-file')
30
29
  end
31
30
  end