file_pipeline 0.0.3 → 0.0.4

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
  SHA256:
3
- metadata.gz: 68c45fd6fc30e7bc3fab376fb64d9ca67af5951b17d01b190cecc577d5fe1695
4
- data.tar.gz: c26978ed8f1c04aae72c5281349117c52d93ec013d38dbebfab3835b6c972978
3
+ metadata.gz: 228340816e7d09bd3f7eb9f5bac1b2c3ed0f1bf8912f4f8e963d04fcafcd167a
4
+ data.tar.gz: 2b9623501c37d0a70d2dbc22435b4af87d19f343f7750de38f4ea50b9677a2c9
5
5
  SHA512:
6
- metadata.gz: 5005046aa0ce3ffd9989284e27c90f072edff43283496f22794faa8070d908a63587fbc4309246721f48d0890a51e04d83ccec4872a2802844d98185145363fe
7
- data.tar.gz: 9b27df15157b517d4c59d4c0bc73e3b2813fac42bf6645001037e8b2d3b10ee49c82de094c1efbdbc6315dfcdc4dd1b9bf2360fbbaf48adf1cb735342978f340
6
+ metadata.gz: 7f738902aeb500a5cf05cff992da3eb30ef48e477a4001ef2380de412315638fb90822c1ba66f809e6fdfd1ce35e04d6ccc4a1061c574bfa5ff7abebdbfeef80
7
+ data.tar.gz: 6e231ba3deaabfa09166795aed6fa491ce54cb363a8a5893d4e32d70f18c5342835b85490df073e34b1df5e45dc1a9ca9b59eba28f0c094da9499477f3df1486
data/README.rdoc CHANGED
@@ -384,11 +384,11 @@ The initializer can call +super+ and pass the +options+ hash and any
384
384
  defaults (a hash with default options). This will update the defaults with
385
385
  the actual options passed to +initialize+ and assign them to the
386
386
  {#options}[rdoc-ref:FilePipeline::FileOperations::FileOperation#options]
387
- attribute.
387
+ attribute. It will also transform any keys passed as strings into symbols.
388
388
 
389
389
  If the initializer does not call +super+, it _must_ assign the options to
390
390
  the <tt>@options</tt> instance variable or expose them through an
391
- <tt>#options</tt> getter method.
391
+ <tt>#options</tt> getter method. It _should_ transform keys into symbols.
392
392
 
393
393
  If it calls +super+ but must ensure some options are always set to a
394
394
  specific value, those should be set after the call to +super+.
@@ -8,16 +8,32 @@ module FilePipeline
8
8
  # The file opration that caused the error.
9
9
  attr_reader :info
10
10
 
11
- def initialize(msg = nil, info: nil)
11
+ # FIXME: should contain original file name file name!
12
+ def initialize(msg = nil, info: nil, file: nil)
13
+ @file = file
12
14
  @info = info
15
+
13
16
  if info.respond_to?(:operation) && info.respond_to?(:log)
14
17
  msg ||= "#{@info.operation&.name} with options"\
15
- " #{@info.operation&.options} failed, log: #{@info.log}"
18
+ " #{@info.operation&.options} failed on #{file}."
19
+ if original_error
20
+ msg += "\nException raised by the operation:"\
21
+ " #{original_error.inspect}. Backtrace:\n"
22
+ msg += original_backtrace if original_backtrace
23
+ end
16
24
  else
17
25
  msg ||= 'Operation failed' unless info
18
26
  end
19
27
  super msg
20
28
  end
29
+
30
+ def original_backtrace
31
+ original_error&.backtrace&.join("\n")
32
+ end
33
+
34
+ def original_error
35
+ @info.log.find { |item| item.is_a? Exception }
36
+ end
21
37
  end
22
38
  end
23
39
  end
@@ -28,6 +28,8 @@ module FilePipeline
28
28
  exif, = read_exif out_file
29
29
  values = exif.select { |tag| tags_to_delete.include? tag }
30
30
  values_to_delete = values.transform_values { nil }
31
+ return 'Info: nothing to delete.' if values.empty?
32
+
31
33
  log, = write_exif out_file, values_to_delete
32
34
  [log, values]
33
35
  end
@@ -31,6 +31,7 @@ module FilePipeline
31
31
  # * +defaults+ - Default options for the subclass (hash).
32
32
  # * +opts+ - Options passed to the sublass initializer (hash).
33
33
  def initialize(opts, defaults = {})
34
+ opts.transform_keys!(&:to_sym)
34
35
  @options = defaults.update(opts)
35
36
  end
36
37
 
@@ -59,6 +59,12 @@ module FilePipeline
59
59
  def batch_apply(versioned_files)
60
60
  versioned_files.map { |file| Thread.new(file) { apply_to(file) } }
61
61
  .map(&:value)
62
+ #--
63
+ # FIXME: This should obviously not just raise the same error again, but
64
+ # rather do someting meaningful.
65
+ #++
66
+ rescue Errors::FailedModificationError => e
67
+ raise e
62
68
  end
63
69
 
64
70
  # Initializes the class for <tt>file_operation</tt> (a string in
@@ -30,17 +30,13 @@ module FilePipeline
30
30
  # *Caveat* it can not be ruled out that buggy or malignant file operations
31
31
  # modify the original.
32
32
  #
33
- #--
34
- # FIXME: protect the original
35
- #++
36
- #
37
33
  # ===== Options
38
34
  #
39
35
  # <tt>target_suffix</ttm> is a string to be appended to the file that
40
36
  # will be written by #finalize (the last version) if #finalize is to
41
- # preserve the original. It is recommended to use a UUID (_default_) to
42
- # avoid clashes with other files in the directory.
43
- def initialize(file, target_suffix: SecureRandom.uuid)
37
+ # preserve the original. It is recommended to use a randomized string
38
+ # (_default_) to avoid clashes with other files in the directory.
39
+ def initialize(file, target_suffix: SecureRandom.hex(4))
44
40
  raise Errors::MissingVersionFileError, file: file unless File.exist? file
45
41
 
46
42
  @original = file
@@ -72,8 +68,9 @@ module FilePipeline
72
68
  # Will move the file to #directory if it is in another directory.
73
69
  def <<(version_info)
74
70
  file, info = version_info
75
- raise Errors::FailedModificationError, info: info if info&.failure
76
-
71
+ if info&.failure
72
+ raise Errors::FailedModificationError, info: info, file: original
73
+ end
77
74
  version = validate(file)
78
75
  @history[version] = info
79
76
  self
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file_pipeline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Stein
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-31 00:00:00.000000000 Z
11
+ date: 2019-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_exiftool