mini_exiftool 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/Changelog CHANGED
@@ -1,3 +1,11 @@
1
+ Version 0.7.0
2
+ - Changing composite behaviour: Composite tags are now included as standard!
3
+ - New method MiniExiftool.opts which returns a hash of the standard
4
+ options used for MiniExiftool.new
5
+ - New option :convert_encoding for MiniExiftool.new which uses the -L-option
6
+ of the exiftool command-line application (see online documentation for it)
7
+ Thanks to Henning Kulander for the causing of this change.
8
+
1
9
  Version 0.6.0
2
10
  - New methods for serialization:
3
11
  - MiniExiftool.from_hash
@@ -7,7 +7,7 @@
7
7
  # Read and write access is done in a clean OO manner.
8
8
  #
9
9
  # Author: Jan Friedrich
10
- # Copyright (c) 2007 by Jan Friedrich
10
+ # Copyright (c) 2007, 2008 by Jan Friedrich
11
11
  # Licensed under the GNU LESSER GENERAL PUBLIC LICENSE,
12
12
  # Version 2.1, February 1999
13
13
  #
@@ -24,15 +24,20 @@ class MiniExiftool
24
24
  # Name of the Exiftool command-line application
25
25
  @@cmd = 'exiftool'
26
26
 
27
+ # Hash of the standard options used when call MiniExiftool.new
28
+ @@opts = { :numerical => false, :composite => true, :convert_encoding => false, :timestamps => Time }
29
+
27
30
  attr_reader :filename
28
- attr_accessor :numerical, :composite, :errors, :timestamps
31
+ attr_accessor :numerical, :composite, :convert_encoding, :errors, :timestamps
29
32
 
30
- VERSION = '0.6.0'
33
+ VERSION = '0.7.0'
31
34
 
32
35
  # +opts+ support at the moment
33
36
  # * <code>:numerical</code> for numerical values, default is +false+
34
37
  # * <code>:composite</code> for including composite tags while loading,
35
- # default is +false+
38
+ # default is +true+
39
+ # * <code>:convert_encoding</code> convert encoding (See -L-option of
40
+ # the exiftool command-line application, default is +false+
36
41
  # * <code>:timestamps</code> generating DateTime objects instead of
37
42
  # Time objects if set to <code>DateTime</code>, default is +Time+
38
43
  #
@@ -40,10 +45,10 @@ class MiniExiftool
40
45
  # therefore they use <em>your local timezone</em>, DateTime objects instead
41
46
  # are created <em>without timezone</em>!
42
47
  def initialize filename=nil, opts={}
43
- std_opts = {:numerical => false, :composite => false, :timestamps => Time}
44
- opts = std_opts.update opts
48
+ opts = @@opts.merge opts
45
49
  @numerical = opts[:numerical]
46
50
  @composite = opts[:composite]
51
+ @convert_encoding = opts[:convert_encoding]
47
52
  @timestamps = opts[:timestamps]
48
53
  @values = TagHash.new
49
54
  @tag_names = TagHash.new
@@ -75,6 +80,7 @@ class MiniExiftool
75
80
  opt_params = ''
76
81
  opt_params << (@numerical ? '-n ' : '')
77
82
  opt_params << (@composite ? '' : '-e ')
83
+ opt_params << (@convert_encoding ? '-L ' : '')
78
84
  cmd = %Q(#@@cmd -q -q -s -t #{opt_params} "#{filename}")
79
85
  if run(cmd)
80
86
  parse_output
@@ -143,7 +149,9 @@ class MiniExiftool
143
149
  @changed_values.each do |tag, val|
144
150
  original_tag = MiniExiftool.original_tag(tag)
145
151
  converted_val = convert val
146
- opt_params = converted_val.kind_of?(Numeric) ? '-n' : ''
152
+ opt_params = ''
153
+ opt_params << (converted_val.kind_of?(Numeric) ? '-n ' : '')
154
+ opt_params << (@convert_encoding ? '-L ' : '')
147
155
  cmd = %Q(#@@cmd -q -P -overwrite_original #{opt_params} -#{original_tag}="#{converted_val}" "#{temp_filename}")
148
156
  result = run(cmd)
149
157
  unless result
@@ -198,6 +206,11 @@ class MiniExiftool
198
206
  @@cmd = cmd
199
207
  end
200
208
 
209
+ # Returns the options hash.
210
+ def self.opts
211
+ @@opts
212
+ end
213
+
201
214
  # Returns a set of all known tags of Exiftool.
202
215
  def self.all_tags
203
216
  unless defined? @@all_tags
@@ -320,15 +333,10 @@ class MiniExiftool
320
333
  end
321
334
 
322
335
  def set_attributes_by_heuristic
323
- if tags.include? 'ImageSize'
324
- self.composite = true
325
- end
326
- if self.file_size.kind_of? Integer
327
- self.numerical = true
328
- end
329
- if self.FileModifyDate.kind_of? DateTime
330
- self.timestamps = DateTime
331
- end
336
+ self.composite = tags.include?('ImageSize') ? true : false
337
+ self.numerical = self.file_size.kind_of?(Integer) ? true : false
338
+ # TODO: Is there a heuristic to determine @convert_encoding?
339
+ self.timestamps = self.FileModifyDate.kind_of?(DateTime) ? DateTime : Time
332
340
  end
333
341
 
334
342
  def temp_filename
Binary file
@@ -49,6 +49,24 @@ class TestClassMethods < TestCase
49
49
  MiniExiftool.command = cmd
50
50
  end
51
51
 
52
+ def test_opts
53
+ opts = MiniExiftool.opts
54
+ assert_kind_of Hash, opts
55
+ begin
56
+ org = MiniExiftool.opts[:composite]
57
+ met1 = MiniExiftool.new
58
+ MiniExiftool.opts[:composite] = !org
59
+ met2 = MiniExiftool.new
60
+ MiniExiftool.opts[:composite] = org
61
+ met3 = MiniExiftool.new
62
+ assert_equal org, met1.composite
63
+ assert_equal !org, met2.composite
64
+ assert_equal org, met1.composite
65
+ ensure
66
+ MiniExiftool.opts[:composite] = org
67
+ end
68
+ end
69
+
52
70
  def test_all_tags
53
71
  all_tags = MiniExiftool.all_tags
54
72
  assert all_tags.include?('ISO')
@@ -5,8 +5,8 @@ class TestComposite < TestCase
5
5
  def setup
6
6
  @data_dir = File.dirname(__FILE__) + '/data'
7
7
  @filename_test = @data_dir + '/test.jpg'
8
- @mini_exiftool = MiniExiftool.new @filename_test
9
- @mini_exiftool_c = MiniExiftool.new @filename_test, :composite => true
8
+ @mini_exiftool = MiniExiftool.new @filename_test, :composite => false
9
+ @mini_exiftool_c = MiniExiftool.new @filename_test
10
10
  end
11
11
 
12
12
  def test_composite_tags
@@ -60,11 +60,11 @@ class TestDumping < TestCase
60
60
 
61
61
  def test_heuristics_for_restoring_composite
62
62
  standard = @mini_exiftool.to_hash
63
- composite = MiniExiftool.new(@filename_test, :composite => true).to_hash
64
- assert_equal false, MiniExiftool.from_hash(standard).composite
65
- assert_equal true, MiniExiftool.from_hash(composite).composite
66
- assert_equal false, MiniExiftool.from_yaml(standard.to_yaml).composite
67
- assert_equal true, MiniExiftool.from_yaml(composite.to_yaml).composite
63
+ no_composite = MiniExiftool.new(@filename_test, :composite => false).to_hash
64
+ assert_equal true, MiniExiftool.from_hash(standard).composite
65
+ assert_equal false, MiniExiftool.from_hash(no_composite).composite
66
+ assert_equal true, MiniExiftool.from_yaml(standard.to_yaml).composite
67
+ assert_equal false, MiniExiftool.from_yaml(no_composite.to_yaml).composite
68
68
  end
69
69
 
70
70
  def test_heuristics_for_restoring_numerical
@@ -28,4 +28,10 @@ class TestRead < TestCase
28
28
  assert_kind_of Array, @mini_exiftool['SubjectLocation']
29
29
  end
30
30
 
31
+ def test_encoding_conversion
32
+ @mini_exiftool_converted = MiniExiftool.new @filename_test, :convert_encoding => true
33
+ assert_equal 'Abenddämmerung', @mini_exiftool.title
34
+ assert_equal "Abendd\344mmerung", @mini_exiftool_converted.title
35
+ end
36
+
31
37
  end
@@ -48,4 +48,17 @@ class TestSave < TestCase
48
48
  assert_equal @org_md5, Digest::MD5.hexdigest(File.read(@temp_filename))
49
49
  end
50
50
 
51
+ def test_encoding_conversion
52
+ special_string = 'ÄÖÜ'
53
+ @mini_exiftool.title = special_string
54
+ assert @mini_exiftool.save
55
+ assert_equal false, @mini_exiftool.convert_encoding
56
+ assert_equal special_string, @mini_exiftool.title
57
+ @mini_exiftool.convert_encoding = true
58
+ @mini_exiftool.title = special_string
59
+ assert @mini_exiftool.save
60
+ assert_equal true, @mini_exiftool.convert_encoding
61
+ assert_equal special_string, @mini_exiftool.title
62
+ end
63
+
51
64
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_exiftool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Friedrich
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-16 00:00:00 +02:00
12
+ date: 2008-07-07 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -72,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  requirements: []
73
73
 
74
74
  rubyforge_project: miniexiftool
75
- rubygems_version: 1.1.0
75
+ rubygems_version: 1.2.0
76
76
  signing_key:
77
77
  specification_version: 2
78
78
  summary: A library for nice OO access to the Exiftool command-line application written by Phil Harvey.