mini_exiftool 1.7.0 → 2.0.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 +4 -4
- data/Changelog +5 -0
- data/README.rdoc +11 -3
- data/Rakefile +6 -2
- data/lib/mini_exiftool.rb +35 -53
- data/test/test_read.rb +3 -5
- data/test/test_read_coordinates.rb +3 -2
- data/test/test_save.rb +2 -8
- metadata +8 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 555a757bd0d6fa9f173ad23a76f48bd2117e3ae9
|
4
|
+
data.tar.gz: 7c68e025c963a564740852f4b28d4d647aa657f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fa67b34cdfd38f95eea037087e1c9add9c203a62c8ddd907cb8a5c965daa3fbb3b24fe6114c51bf42085ffd829e6c18bd75f256274267538d90e881b4277b64
|
7
|
+
data.tar.gz: f074cd5e8087a431e282c923b6723330b12b547b1fc9b8f3b0cf718c6a5bc176555d6be9c931ee023cb832bc7f1daad85a05bb741f1f9b4c069eb5a831c41988
|
data/Changelog
CHANGED
data/README.rdoc
CHANGED
@@ -6,7 +6,10 @@ Read and write access is done in a clean OO manner.
|
|
6
6
|
|
7
7
|
== Requirements
|
8
8
|
|
9
|
-
|
9
|
+
Ruby 1.9 or higher and an installation of the Exiftool
|
10
|
+
command-line application at least version 7.65.
|
11
|
+
If you run on Ruby 1.8 or with a prior exiftool version
|
12
|
+
install mini_exiftool version 1.x.x.
|
10
13
|
Instructions for installation you can find under
|
11
14
|
http://www.sno.phy.queensu.ca/~phil/exiftool/install.html .
|
12
15
|
|
@@ -23,6 +26,9 @@ install the gem with
|
|
23
26
|
respectively (on *nix sytems)
|
24
27
|
sudo gem install mini_exiftool
|
25
28
|
|
29
|
+
If you need support of older versione (see Requirements above)
|
30
|
+
gem install --version "< 2.0.0" mini_exiftool
|
31
|
+
|
26
32
|
Alternative you can download the tarball or zip file and run
|
27
33
|
ruby setup.rb config
|
28
34
|
ruby setup.rb setup
|
@@ -32,13 +38,15 @@ Alternative you can download the tarball or zip file and run
|
|
32
38
|
|
33
39
|
The code is also hostet in a git repository on Gitorious at
|
34
40
|
http://gitorious.org/projects/mini_exiftool
|
41
|
+
and github at
|
42
|
+
https://github.com/janfri/mini_exiftool
|
35
43
|
feel free to contribute!
|
36
44
|
|
37
45
|
== Author
|
38
|
-
Jan Friedrich <janfri26
|
46
|
+
Jan Friedrich <janfri26@gmail.com>
|
39
47
|
|
40
48
|
== Copyright / License
|
41
|
-
Copyright (c) 2007-
|
49
|
+
Copyright (c) 2007-2013 by Jan Friedrich
|
42
50
|
|
43
51
|
Licensed under terms of the GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1,
|
44
52
|
February 1999 (see file COPYING for more details)
|
data/Rakefile
CHANGED
@@ -15,9 +15,13 @@ Rim.setup do |p|
|
|
15
15
|
p.homepage = 'http://gitorious.org/mini_exiftool'
|
16
16
|
p.install_message = %q{
|
17
17
|
+-----------------------------------------------------------------------+
|
18
|
-
| Please ensure you have installed exiftool
|
19
|
-
| (Try "exiftool -ver" on your commandline)
|
18
|
+
| Please ensure you have installed exiftool at least version 7.65 |
|
19
|
+
| and it's found in your PATH (Try "exiftool -ver" on your commandline).|
|
20
|
+
| For more details see |
|
20
21
|
| http://www.sno.phy.queensu.ca/~phil/exiftool/install.html |
|
22
|
+
| You need also Ruby 1.9 or higher. |
|
23
|
+
| If you need support for Ruby 1.8 or exiftool prior 7.65 install |
|
24
|
+
| mini_exiftool version < 2.0.0. |
|
21
25
|
+-----------------------------------------------------------------------+
|
22
26
|
}
|
23
27
|
end
|
data/lib/mini_exiftool.rb
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
# Read and write access is done in a clean OO manner.
|
9
9
|
#
|
10
10
|
# Author: Jan Friedrich
|
11
|
-
# Copyright (c) 2007-
|
11
|
+
# Copyright (c) 2007-2013 by Jan Friedrich
|
12
12
|
# Licensed under the GNU LESSER GENERAL PUBLIC LICENSE,
|
13
13
|
# Version 2.1, February 1999
|
14
14
|
#
|
@@ -32,7 +32,7 @@ class MiniExiftool
|
|
32
32
|
attr_reader :filename
|
33
33
|
attr_accessor :numerical, :composite, :convert_encoding, :ignore_minor_errors, :errors, :timestamps
|
34
34
|
|
35
|
-
VERSION = '
|
35
|
+
VERSION = '2.0.0'
|
36
36
|
|
37
37
|
# +opts+ support at the moment
|
38
38
|
# * <code>:numerical</code> for numerical values, default is +false+
|
@@ -89,7 +89,7 @@ class MiniExiftool
|
|
89
89
|
opt_params << (@composite ? '' : '-e ')
|
90
90
|
opt_params << (@convert_encoding ? '-L ' : '')
|
91
91
|
opt_params << (@coord_format ? "-c \"#{@coord_format}\"" : '')
|
92
|
-
cmd = %Q(#@@cmd -q -q -s -t #{opt_params} #{
|
92
|
+
cmd = %Q(#@@cmd -j -q -q -s -t #{opt_params} #{MiniExiftool.escape(filename)})
|
93
93
|
if run(cmd)
|
94
94
|
parse_output
|
95
95
|
else
|
@@ -168,8 +168,8 @@ class MiniExiftool
|
|
168
168
|
opt_params << (@convert_encoding ? '-L ' : '')
|
169
169
|
opt_params << (@ignore_minor_errors ? '-m' : '')
|
170
170
|
cmd = %Q(#@@cmd -q -P -overwrite_original #{opt_params} #{tag_params} #{temp_filename})
|
171
|
-
if convert_encoding
|
172
|
-
cmd.encode('ISO-8859-1')
|
171
|
+
if convert_encoding
|
172
|
+
cmd.encode!('ISO-8859-1')
|
173
173
|
end
|
174
174
|
result = run(cmd)
|
175
175
|
unless result
|
@@ -288,14 +288,6 @@ class MiniExiftool
|
|
288
288
|
return if @@setup_done
|
289
289
|
@@error_file = Tempfile.new 'errors'
|
290
290
|
@@error_file.close
|
291
|
-
|
292
|
-
if Float(exiftool_version) < 7.41
|
293
|
-
@@separator = ', '
|
294
|
-
@@sep_op = ''
|
295
|
-
else
|
296
|
-
@@separator = '@@'
|
297
|
-
@@sep_op = '-sep @@'
|
298
|
-
end
|
299
291
|
@@setup_done = true
|
300
292
|
end
|
301
293
|
|
@@ -304,9 +296,6 @@ class MiniExiftool
|
|
304
296
|
$stderr.puts cmd
|
305
297
|
end
|
306
298
|
@output = `#{cmd} 2>#{@@error_file.path}`
|
307
|
-
if convert_encoding && @output.respond_to?(:force_encoding)
|
308
|
-
@output.force_encoding('ISO-8859-1')
|
309
|
-
end
|
310
299
|
@status = $?
|
311
300
|
unless @status.exitstatus == 0
|
312
301
|
@error_text = File.readlines(@@error_file.path).join
|
@@ -335,50 +324,43 @@ class MiniExiftool
|
|
335
324
|
end
|
336
325
|
|
337
326
|
def parse_output
|
338
|
-
@output.
|
339
|
-
|
327
|
+
JSON.parse(@output)[0].each do |tag,value|
|
328
|
+
value = perform_conversions(value)
|
340
329
|
set_value tag, value
|
341
330
|
end
|
342
331
|
end
|
343
332
|
|
344
|
-
def parse_line line
|
345
|
-
if line =~ /^([^\t]+)\t(.*)$/
|
346
|
-
tag, value = $1, perform_conversions($2)
|
347
|
-
else
|
348
|
-
raise MiniExiftool::Error.new("Malformed line #{line.inspect} of exiftool output.")
|
349
|
-
end
|
350
|
-
return [tag, value]
|
351
|
-
end
|
352
|
-
|
353
333
|
def perform_conversions(value)
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
334
|
+
return value unless value.kind_of?(String)
|
335
|
+
if convert_encoding
|
336
|
+
value.encode!('ISO-8859-1')
|
337
|
+
end
|
338
|
+
case value
|
339
|
+
when /^\d{4}:\d\d:\d\d \d\d:\d\d:\d\d/
|
340
|
+
s = value.sub(/^(\d+):(\d+):/, '\1-\2-')
|
341
|
+
begin
|
342
|
+
if @timestamps == Time
|
343
|
+
value = Time.parse(s)
|
344
|
+
elsif @timestamps == DateTime
|
345
|
+
value = DateTime.parse(s)
|
346
|
+
else
|
347
|
+
raise MiniExiftool::Error.new("Value #@timestamps not allowed for option timestamps.")
|
367
348
|
end
|
368
|
-
|
369
|
-
value =
|
370
|
-
when /^0+[1-9]+$/
|
371
|
-
# nothing => String
|
372
|
-
when /^-?\d+$/
|
373
|
-
value = value.to_i
|
374
|
-
when %r(^(\d+)/(\d+)$)
|
375
|
-
value = Rational($1.to_i, $2.to_i)
|
376
|
-
when /^[\d ]+$/
|
377
|
-
# nothing => String
|
378
|
-
when /#{@@separator}/
|
379
|
-
value = value.split @@separator
|
349
|
+
rescue ArgumentError
|
350
|
+
value = false
|
380
351
|
end
|
381
|
-
|
352
|
+
when /^\+\d+\.\d+$/
|
353
|
+
value = value.to_f
|
354
|
+
when /^0+[1-9]+$/
|
355
|
+
# nothing => String
|
356
|
+
when /^-?\d+$/
|
357
|
+
value = value.to_i
|
358
|
+
when %r(^(\d+)/(\d+)$)
|
359
|
+
value = Rational($1.to_i, $2.to_i)
|
360
|
+
when /^[\d ]+$/
|
361
|
+
# nothing => String
|
362
|
+
end
|
363
|
+
value
|
382
364
|
end
|
383
365
|
|
384
366
|
def set_value tag, value
|
data/test/test_read.rb
CHANGED
@@ -42,11 +42,9 @@ class TestRead < TestCase
|
|
42
42
|
|
43
43
|
def test_encoding_conversion
|
44
44
|
@mini_exiftool_converted = MiniExiftool.new @filename_test, :convert_encoding => true
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
converted.force_encoding('ISO-8859-1')
|
49
|
-
end
|
45
|
+
title_utf8 = 'Abenddämmerung'
|
46
|
+
assert_equal title_utf8, @mini_exiftool.title
|
47
|
+
converted = title_utf8.encode('ISO-8859-1')
|
50
48
|
assert_equal converted, @mini_exiftool_converted.title
|
51
49
|
end
|
52
50
|
|
@@ -10,8 +10,9 @@ class TestReadCoordinates < TestCase
|
|
10
10
|
|
11
11
|
def test_access_coordinates
|
12
12
|
mini_exiftool_coord = MiniExiftool.new @filename_test, :coord_format => "%+.6f"
|
13
|
-
|
14
|
-
assert_equal
|
13
|
+
# checking float equality is here ok ;-)
|
14
|
+
assert_equal +43.653167, mini_exiftool_coord['GPSLatitude']
|
15
|
+
assert_equal -79.373167, mini_exiftool_coord['GPSLongitude']
|
15
16
|
assert_equal '+43.653167, -79.373167', mini_exiftool_coord['GPSPosition']
|
16
17
|
end
|
17
18
|
|
data/test/test_save.rb
CHANGED
@@ -51,11 +51,7 @@ class TestSave < TestCase
|
|
51
51
|
|
52
52
|
def test_encoding_conversion
|
53
53
|
special_string = 'äöü'
|
54
|
-
|
55
|
-
special_string_latin1 = special_string.encode('ISO-8859-1')
|
56
|
-
else
|
57
|
-
special_string_latin1 = "\xE4\xF6\xFC"
|
58
|
-
end
|
54
|
+
special_string_latin1 = special_string.encode('ISO-8859-1')
|
59
55
|
@mini_exiftool.title = special_string
|
60
56
|
assert @mini_exiftool.save
|
61
57
|
assert_equal false, @mini_exiftool.convert_encoding
|
@@ -64,9 +60,7 @@ class TestSave < TestCase
|
|
64
60
|
@mini_exiftool.title = special_string_latin1
|
65
61
|
assert @mini_exiftool.save
|
66
62
|
assert_equal true, @mini_exiftool.convert_encoding
|
67
|
-
|
68
|
-
special_string_latin1.encode!('ISO-8859-1')
|
69
|
-
end
|
63
|
+
special_string_latin1.encode!('ISO-8859-1')
|
70
64
|
assert_equal special_string_latin1, @mini_exiftool.title
|
71
65
|
end
|
72
66
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_exiftool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Friedrich
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rim
|
@@ -59,9 +59,12 @@ homepage: http://gitorious.org/mini_exiftool
|
|
59
59
|
licenses: []
|
60
60
|
metadata: {}
|
61
61
|
post_install_message: "\n+-----------------------------------------------------------------------+\n|
|
62
|
-
Please ensure you have installed exiftool
|
63
|
-
\"exiftool -ver\" on your commandline)
|
64
|
-
|
62
|
+
Please ensure you have installed exiftool at least version 7.65 |\n| and it's
|
63
|
+
found in your PATH (Try \"exiftool -ver\" on your commandline).|\n| For more details
|
64
|
+
see |\n| http://www.sno.phy.queensu.ca/~phil/exiftool/install.html
|
65
|
+
\ |\n| You need also Ruby 1.9 or higher. |\n|
|
66
|
+
If you need support for Ruby 1.8 or exiftool prior 7.65 install |\n| mini_exiftool
|
67
|
+
version < 2.0.0. |\n+-----------------------------------------------------------------------+\n
|
65
68
|
\ "
|
66
69
|
rdoc_options: []
|
67
70
|
require_paths:
|