derived_images 0.4.0 → 0.4.1

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: baf29fb4eb242552ac2986bdc0edafcbcea4e002d392c9c496d3de8722cbf31b
4
- data.tar.gz: 2bc1784b75cad336ef7e878b2ab885f5f0df3edb278296757d644cf6d80ffa8a
3
+ metadata.gz: d7495dac1828694cef4a8efc10c27f79841caa93383b2fd87293920a0529b008
4
+ data.tar.gz: '05378013aa550c4007d4c749df0c6208292594dc5b48c86058f06de162b526dc'
5
5
  SHA512:
6
- metadata.gz: a876902f03b4331d000aab0bb8e3d608e57b17edc40f68a920ec88aa452aa7dbce5e221496e03bc4e5723e6e57cdffa465adf457c832a5287c2b7d4dccfc8075
7
- data.tar.gz: 9a24bb5f27aac0519af396408b3d6256e1c66afa708a125881cad8018b3f86f034b1974eb24c0ed132c617c66b0d09b11f3901b620341ace4be44aa8404f0359
6
+ metadata.gz: 41ba0a79e9c02d7961dded202fcb2063b415e4f99ffb1ba8cd7f999600b479d00deeb03b2c7c47b5a2fccf955daa4dc88f98c240d4cb8cff5f29019eab137507
7
+ data.tar.gz: f10af7e4af7e7ee9a912b6e766680ce0ba7414bc3619a0772e49cf8d7db4b6e425e2304f07df9c7c477789cfee89f8c707dd23ccc75742495054604b618ae37e
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DerivedImages
4
+ # A helper class to test for library support for different image formats.
5
+ class FormatSupport
6
+ KNOWN_FORMATS = %w[bmp gif jpg png webp avif heic jp2 jxl].freeze
7
+
8
+ def initialize(processor = DerivedImages.config.processor)
9
+ @processor = processor
10
+ end
11
+
12
+ KNOWN_FORMATS.each do |format|
13
+ define_method("#{format}?") { supports?(format) }
14
+ end
15
+
16
+ alias jpeg_2000? jp2?
17
+ alias jpeg_xl? jxl?
18
+
19
+ def supports?(format)
20
+ if processor == :vips
21
+ vips.include?(format)
22
+ elsif processor == :mini_magick
23
+ magick.include?(format)
24
+ else
25
+ raise "Unknown processor #{processor}"
26
+ end
27
+ end
28
+
29
+ def self.table(processor)
30
+ instance = new(processor)
31
+ %w[BMP GIF JPEG PNG TIFF WebP].map { [_1, true] }.tap do |table|
32
+ table << ['AVIF', instance.avif?]
33
+ table << ['HEIC', instance.heic?]
34
+ table << ['JPEG 2000', instance.jpeg_2000?]
35
+ table << ['JPEG XL', instance.jpeg_xl?]
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ attr_reader :processor
42
+
43
+ def vips
44
+ @vips ||= Vips.get_suffixes.map { _1.delete('.') }
45
+ end
46
+
47
+ def magick
48
+ @magick ||= begin
49
+ output, = MiniMagick::Shell.new.execute(%w[identify -list format])
50
+ lines = output.partition("\n\n").first.lines[2..]
51
+ lines.reject { _1.start_with?(' ' * 10) } # Remove continuation lines
52
+ .map { _1.strip.split(/\s+/, 4) } # split out fields ("Format Module Mode Description")
53
+ .select { |_format, _, mode, _| mode.start_with?('rw') } # Read and write supported
54
+ .map { _1.first.delete('*').downcase }
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DerivedImages
4
- VERSION = '0.4.0'
4
+ VERSION = '0.4.1'
5
5
  end
@@ -47,7 +47,7 @@ module DerivedImages
47
47
  def generate(entry, cache_key)
48
48
  target_path = entry.target_path
49
49
  time = Benchmark.realtime do
50
- tempfile = entry.pipeline.loader(fail: true).call(entry.source_path.to_s)
50
+ tempfile = entry.pipeline.call(entry.source_path.to_s)
51
51
  File.chmod(0o644, tempfile.path)
52
52
  FileUtils.mv(tempfile.path, target_path)
53
53
  end
@@ -2,9 +2,11 @@
2
2
 
3
3
  require 'image_processing'
4
4
  require 'listen'
5
+ require 'rails'
5
6
 
6
7
  require 'derived_images/cache'
7
8
  require 'derived_images/dsl'
9
+ require 'derived_images/format_support'
8
10
  require 'derived_images/manifest'
9
11
  require 'derived_images/manifest_entry'
10
12
  require 'derived_images/processor'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: derived_images
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Kitson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-28 00:00:00.000000000 Z
11
+ date: 2023-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: image_processing
@@ -65,6 +65,7 @@ files:
65
65
  - lib/derived_images.rb
66
66
  - lib/derived_images/cache.rb
67
67
  - lib/derived_images/dsl.rb
68
+ - lib/derived_images/format_support.rb
68
69
  - lib/derived_images/manifest.rb
69
70
  - lib/derived_images/manifest_entry.rb
70
71
  - lib/derived_images/processor.rb