ptools 1.2.6 → 1.2.7

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
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