ptools 1.2.6 → 1.2.7

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: ff44afa8e0b25cca28c3cfac9ce34788eb8b69ba
4
- data.tar.gz: 2722e012c24b7283b6780a0e9e3b8edd9e038f67
3
+ metadata.gz: 19b48052d410d086d24c61ef25da0b3e87b32c00
4
+ data.tar.gz: 49b572916684c747255775890a6e7188f286eced
5
5
  SHA512:
6
- metadata.gz: 62fcdbcbba8ce694f3207bf1bedb6f6d8e865ca20b7fa5b33209ac154373f69950b3e05f6dafee805a6535d320afe946860c8985079b6b2bc802b70a24eec4c6
7
- data.tar.gz: 1e538e79107494c441f8099612330ecd3fef6d403e09ea6a780554c38c64555756fc1923cfddf8044ee7a3ffcd7ba9f1ed9b0b91e28f937d5fad1318f03c462c
6
+ metadata.gz: 70977a568a82dd6885804f7b47391f096da6b66b965944838c85cb47b6eba501bec70e0bbe69ea65a02621707532a3bf24846dbd4011a9ef66b8dc5a03b63f58
7
+ data.tar.gz: f81220180763b1fd1157712b16942c0fc5e588d3795b6be1fbaf7945201677333593f45dce298156e947434f18e1cfe7c990bbccd5edc3eac83a30fce56fe491
data/CHANGES CHANGED
@@ -1,3 +1,11 @@
1
+ == 1.2.7 - 6-Dec-2014
2
+ * File.which now expands ~ for paths. Thanks go to dg-vrnetze for the patch.
3
+ * Use /dev/null for cygwin instead of NUL.
4
+ * Use mv instead of cp in the nl_convert method.
5
+ * Solaris now handled explicitly in nl_convert, and OSX now considered Unix.
6
+ * Modified the binary? method to check 4096 bytes at most.
7
+ * Thanks to Matt Hoyle for many of the changes implemented in this release.
8
+
1
9
  == 1.2.6 - 14-Jul-2014
2
10
  * Updated the png? and jpg? methods so they explicitly specify the
3
11
  offset argument so that it works with 1.9.2 and earlier. Thanks go to
data/MANIFEST CHANGED
@@ -15,3 +15,6 @@
15
15
  * test/test_wc.rb
16
16
  * test/test_which.rb
17
17
  * test/test_whereis.rb
18
+ * test/img/test.gif
19
+ * test/img/test.jpg
20
+ * test/img/test.png
@@ -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.2.6'
6
+ PTOOLS_VERSION = '1.2.7'
7
7
 
8
8
  # :stopdoc:
9
9
 
@@ -40,7 +40,7 @@ class File
40
40
  #
41
41
  def self.image?(file)
42
42
  bool = IMAGE_EXT.include?(File.extname(file).downcase) # Match ext
43
- bool = bmp?(file) || jpg?(file) || png?(file) || gif?(file) # Check data
43
+ bool = bmp?(file) || jpg?(file) || png?(file) || gif?(file) || tiff?(file) # Check data
44
44
  bool
45
45
  end
46
46
 
@@ -59,7 +59,7 @@ class File
59
59
  #
60
60
  def self.null
61
61
  case RbConfig::CONFIG['host_os']
62
- when /mswin|win32|msdos|cygwin|mingw|windows/i
62
+ when /mswin|win32|msdos|mingw|windows/i
63
63
  'NUL'
64
64
  when /amiga/i
65
65
  'NIL:'
@@ -77,7 +77,7 @@ class File
77
77
  # Returns whether or not +file+ is a binary non-image file, i.e. executable,
78
78
  # shared object, ect. Note that this is NOT guaranteed to be 100% accurate.
79
79
  # It performs a "best guess" based on a simple test of the first
80
- # +File.blksize+ characters.
80
+ # +File.blksize+ characters, or 4096, whichever is smaller.
81
81
  #
82
82
  # Example:
83
83
  #
@@ -89,7 +89,9 @@ class File
89
89
  #
90
90
  def self.binary?(file)
91
91
  return false if image?(file)
92
- s = (File.read(file, File.stat(file).blksize) || "")
92
+ bytes = File.stat(file).blksize
93
+ bytes = 4096 if bytes > 4096
94
+ s = (File.read(file, bytes) || "")
93
95
  s = s.encode('US-ASCII', :undef => :replace).split(//)
94
96
  ((s.size - s.grep(" ".."~").size) / s.size.to_f) > 0.30
95
97
  end
@@ -125,6 +127,8 @@ class File
125
127
 
126
128
  # Iterate over each path glob the dir + program.
127
129
  path.split(File::PATH_SEPARATOR).each{ |dir|
130
+ dir = File.expand_path(dir)
131
+
128
132
  next unless File.exist?(dir) # In case of bogus second argument
129
133
  file = File.join(dir, program)
130
134
 
@@ -269,28 +273,22 @@ class File
269
273
  # 'dos2unix'. The possible values for +platform+ include:
270
274
  #
271
275
  # * MS Windows -> dos, windows, win32, mswin
272
- # * Unix/BSD -> unix, linux, bsd
273
- # * Mac -> mac, macintosh, apple, osx
276
+ # * Unix/BSD -> unix, linux, bsd, osx, darwin, sunos, solaris
277
+ # * Mac -> mac, macintosh, apple
278
+ #
279
+ # You may also specify 'local', in which case your CONFIG['host_os'] value
280
+ # will be used. This is the default.
274
281
  #
275
- # Note that this method is only valid for an ftype of "file". Otherwise a
276
- # TypeError will be raised. If an invalid format value is received, an
282
+ # Note that this method is only valid for an ftype of "file". Otherwise a
283
+ # TypeError will be raised. If an invalid format value is received, an
277
284
  # ArgumentError is raised.
278
285
  #
279
- def self.nl_convert(old_file, new_file = old_file, platform = 'dos')
286
+ def self.nl_convert(old_file, new_file = old_file, platform = 'local')
280
287
  unless File::Stat.new(old_file).file?
281
288
  raise ArgumentError, 'Only valid for plain text files'
282
289
  end
283
290
 
284
- case platform
285
- when /dos|windows|win32|mswin|cygwin|mingw/i
286
- format = "\cM\cJ"
287
- when /unix|linux|bsd/i
288
- format = "\cJ"
289
- when /mac|apple|macintosh|osx/i
290
- format = "\cM"
291
- else
292
- raise ArgumentError, "Invalid platform string"
293
- end
291
+ format = nl_for_platform(platform)
294
292
 
295
293
  orig = $\ # $OUTPUT_RECORD_SEPARATOR
296
294
  $\ = format
@@ -313,7 +311,7 @@ class File
313
311
  end
314
312
 
315
313
  File.delete(old_file)
316
- FileUtils.cp(tf.path, old_file)
314
+ FileUtils.mv(tf.path, old_file)
317
315
  else
318
316
  begin
319
317
  nf = File.new(new_file, 'w')
@@ -413,6 +411,21 @@ class File
413
411
 
414
412
  private
415
413
 
414
+ def self.nl_for_platform(platform)
415
+ platform = RbConfig::CONFIG["host_os"] if platform == 'local'
416
+
417
+ case platform
418
+ when /dos|windows|win32|mswin|mingw/i
419
+ return "\cM\cJ"
420
+ when /unix|linux|bsd|cygwin|osx|darwin|solaris|sunos/i
421
+ return "\cJ"
422
+ when /mac|apple|macintosh/i
423
+ return "\cM"
424
+ else
425
+ raise ArgumentError, "Invalid platform string"
426
+ end
427
+ end
428
+
416
429
  def self.bmp?(file)
417
430
  IO.read(file, 3) == "BM6"
418
431
  end
@@ -428,4 +441,25 @@ class File
428
441
  def self.gif?(file)
429
442
  ['GIF89a', 'GIF97a'].include?(IO.read(file, 6))
430
443
  end
444
+
445
+ def self.tiff?(file)
446
+ return false if File.size(file) < 12
447
+
448
+ bytes = IO.read(file, 4)
449
+
450
+ # II is Intel, MM is Motorola
451
+ if bytes[0..1] != 'II'&& bytes[0..1] != 'MM'
452
+ return false
453
+ end
454
+
455
+ if bytes[0..1] == 'II' && bytes[2..3].ord != 42
456
+ return false
457
+ end
458
+
459
+ if bytes[0..1] == 'MM' && bytes[2..3].reverse.ord != 42
460
+ return false
461
+ end
462
+
463
+ true
464
+ end
431
465
  end
@@ -3,7 +3,7 @@ require 'rbconfig'
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = 'ptools'
6
- gem.version = '1.2.6'
6
+ gem.version = '1.2.7'
7
7
  gem.license = 'Artistic 2.0'
8
8
  gem.author = 'Daniel J. Berger'
9
9
  gem.email = 'djberg96@gmail.com'
@@ -15,7 +15,7 @@ class TC_Ptools_Constants < Test::Unit::TestCase
15
15
  end
16
16
 
17
17
  test "PTOOLS_VERSION constant is set to expected value" do
18
- assert_equal('1.2.6', File::PTOOLS_VERSION)
18
+ assert_equal('1.2.7', File::PTOOLS_VERSION)
19
19
  end
20
20
 
21
21
  test "IMAGE_EXT constant is set to array of values" do
@@ -25,6 +25,17 @@ class TC_Ptools_NLConvert < Test::Unit::TestCase
25
25
  @unix_file = 'nix_test_file.txt'
26
26
  end
27
27
 
28
+ test "nl_for_platform basic functionality" do
29
+ assert_respond_to(File, :nl_for_platform)
30
+ end
31
+
32
+ test "nl_for_platform" do
33
+ assert_equal( "\cM\cJ", File.nl_for_platform('dos') )
34
+ assert_equal( "\cJ", File.nl_for_platform('unix') )
35
+ assert_equal( "\cM", File.nl_for_platform('mac') )
36
+ assert_nothing_raised{ File.nl_for_platform('local') }
37
+ end
38
+
28
39
  test "nl_convert basic functionality" do
29
40
  assert_respond_to(File, :nl_convert)
30
41
  end
@@ -11,6 +11,7 @@ require 'test-unit'
11
11
  require 'rbconfig'
12
12
  require 'fileutils'
13
13
  require 'ptools'
14
+ require 'tempfile'
14
15
 
15
16
  class TC_FileWhich < Test::Unit::TestCase
16
17
  def self.startup
@@ -95,6 +96,21 @@ class TC_FileWhich < Test::Unit::TestCase
95
96
  assert_raises(ArgumentError){ File.which(@ruby, '') }
96
97
  end
97
98
 
99
+ test "resolves with with ~" do
100
+ omit_if(@@windows, "~ tests skipped on MS Windows")
101
+ begin
102
+ old_home = ENV['HOME']
103
+
104
+ ENV['HOME'] = Dir::Tmpname.tmpdir
105
+ program = Tempfile.new(['program', '.sh'])
106
+ File.chmod(755, program.path)
107
+
108
+ assert_not_nil(File.which(File.basename(program.path), '~/'))
109
+ ensure
110
+ ENV['HOME'] = old_home
111
+ end
112
+ end
113
+
98
114
  def teardown
99
115
  @exe = nil
100
116
  @ruby = nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ptools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
4
+ version: 1.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-14 00:00:00.000000000 Z
11
+ date: 2014-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -96,21 +96,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  version: '0'
97
97
  requirements: []
98
98
  rubyforge_project:
99
- rubygems_version: 2.3.0
99
+ rubygems_version: 2.2.2
100
100
  signing_key:
101
101
  specification_version: 4
102
102
  summary: Extra methods for the File class
103
103
  test_files:
104
+ - test/test_binary.rb
105
+ - test/test_constants.rb
104
106
  - test/test_head.rb
105
- - test/test_middle.rb
106
- - test/test_tail.rb
107
- - test/test_wc.rb
107
+ - test/test_image.rb
108
108
  - test/test_is_sparse.rb
109
+ - test/test_middle.rb
110
+ - test/test_nlconvert.rb
109
111
  - test/test_null.rb
112
+ - test/test_tail.rb
110
113
  - test/test_touch.rb
111
- - test/test_which.rb
114
+ - test/test_wc.rb
112
115
  - test/test_whereis.rb
113
- - test/test_binary.rb
114
- - test/test_image.rb
115
- - test/test_constants.rb
116
- - test/test_nlconvert.rb
116
+ - test/test_which.rb