bridgetown-media-transformation 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b563489bed535209cf133e79d43c7320dde50f5e66ac757a048f80e66376e333
4
+ data.tar.gz: d7c05aa74fd1000ce1554af9814fe479018b912f45c6a5b32e69de9f4ef24308
5
+ SHA512:
6
+ metadata.gz: 7cadb1266b29b48dab3b5e2800d18b7c191bafe9116b5e19f1f7a471a32d130025c15322913d1e21afe8ba07186e9c192f66e4d3ce7cab1a3edf7ab34c093eab
7
+ data.tar.gz: 0c99eee0642a3b8408bd2bb3bba8b71d2fdbbe6f11960d311774d25d093ab5d60c39eb99aaec06d316bfe82811c8f1d106b7a68f480ff48917eda2b1bf6eac39
data/.gitignore ADDED
@@ -0,0 +1,41 @@
1
+ /vendor
2
+ /.bundle/
3
+ /.yardoc
4
+ /Gemfile.lock
5
+ /_yardoc/
6
+ /coverage/
7
+ /doc/
8
+ /pkg/
9
+ /spec/reports/
10
+ /tmp/
11
+ *.bundle
12
+ *.so
13
+ *.o
14
+ *.a
15
+ mkmf.log
16
+ *.gem
17
+ Gemfile.lock
18
+ .bundle
19
+ .ruby-version
20
+
21
+ # Node
22
+ node_modules
23
+ .npm
24
+ .node_repl_history
25
+
26
+ # Yarn
27
+ yarn-error.log
28
+ yarn-debug.log*
29
+ .pnp/
30
+ .pnp.js
31
+
32
+ # Yarn Integrity file
33
+ .yarn-integrity
34
+
35
+ spec/dest
36
+ .bridgetown-metadata
37
+ .bridgetown-cache
38
+ .bridgetown-webpack
39
+ *~
40
+
41
+ spec/fixtures/.bmt-cache
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.rubocop.yml ADDED
@@ -0,0 +1,22 @@
1
+ require: rubocop-bridgetown
2
+
3
+ inherit_gem:
4
+ rubocop-bridgetown: .rubocop.yml
5
+
6
+ AllCops:
7
+ TargetRubyVersion: 2.5
8
+ Include:
9
+ - lib/**/*.rb
10
+
11
+ Exclude:
12
+ - .gitignore
13
+ - .rspec
14
+ - .rubocop.yml
15
+
16
+ - Gemfile.lock
17
+ - CHANGELOG.md
18
+ - LICENSE.txt
19
+ - README.md
20
+
21
+ - script/**/*
22
+ - vendor/**/*
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # master
2
+
3
+ * Use this file to keep track of plugin updates
4
+
5
+ # 0.1.0 / 2020-05-01
6
+
7
+ * First version
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+ gemspec
5
+
6
+ gem "bridgetown", ENV["BRIDGETOWN_VERSION"] if ENV["BRIDGETOWN_VERSION"]
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020-present
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,81 @@
1
+ # Bridgetown Media Transformation
2
+
3
+ A Bridgetown plugin to [fill in the blank]…
4
+
5
+ ## Installation
6
+
7
+ Run this command to add this plugin to your site's Gemfile:
8
+
9
+ ```shell
10
+ $ bundle add bridgetown-media-transformation -g bridgetown_plugins
11
+ ```
12
+
13
+ ### with VIPS
14
+
15
+ ### with ImageMagick
16
+
17
+ ## Usage
18
+
19
+ The plugin will…
20
+
21
+ ### Optional configuration options
22
+
23
+ ```yaml
24
+ # bridgetown.config.yml
25
+
26
+ media_transformation:
27
+ # Whether to optimize transformed images with image_optim
28
+ #
29
+ # Type: Boolean
30
+ # Optional: true
31
+ # Default: false
32
+ optimize: true
33
+
34
+ # Whether to progressive scan JPGs
35
+ #
36
+ # Type: Boolean
37
+ # Optional: true
38
+ # Default: false
39
+ interlace: true
40
+
41
+ # The default transformations
42
+ #
43
+ # Type: Hash
44
+ # Optional: true
45
+ # Default:
46
+ # {
47
+ # "webp" => [[640, "640w"], [1024, "1024w"], [1280, "1280w"], [1920, "1920w"], [3840, "2x"]],
48
+ # "jpg" => [[640, "640w"], [1024, "1024w"], [1280, "1280w"], [1920, "1920w"], [3840, "2x"]]
49
+ # }
50
+ default_transformations:
51
+ webp:
52
+ -
53
+ - 320
54
+ - 320w
55
+ -
56
+ - 2000
57
+ - 2000w
58
+ jpg:
59
+ -
60
+ - 320
61
+ - 320w
62
+ -
63
+ - 2000
64
+ - 2000w
65
+ ```
66
+
67
+
68
+ ## Testing
69
+
70
+ * Run `BRIDGETOWN_ENV=test script/test` to run the test suite
71
+ * Or run `BRIDGETOWN_ENV=test script/cibuild` to validate with Rubocop and test with rspec together.
72
+
73
+ ## Contributing
74
+
75
+ 1. Fork it (https://github.com/username/my-awesome-plugin/fork)
76
+ 2. Clone the fork using `git clone` to your local development machine.
77
+ 3. Create your feature branch (`git checkout -b my-new-feature`)
78
+ 4. Commit your changes (`git commit -am 'Add some feature'`)
79
+ 5. Push to the branch (`git push origin my-new-feature`)
80
+ 6. Create a new Pull Request
81
+
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task :default => :spec
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/bridgetown-media-transformation/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "bridgetown-media-transformation"
7
+ spec.version = BridgetownMediaTransformation::VERSION
8
+ spec.author = "Julian Rubisch"
9
+ spec.email = "julian@julianrubisch.at"
10
+ spec.summary = "Image and video transformation via image_processing and ffmpeg"
11
+ spec.homepage = "https://github.com/julianrubisch/bridgetown-media-transformation"
12
+ spec.license = "MIT"
13
+
14
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r!^(test|script|spec|features|frontend)/!) }
15
+ spec.test_files = spec.files.grep(%r!^spec/!)
16
+ spec.require_paths = ["lib"]
17
+ spec.metadata = { "yarn-add" => "bridgetown-media-transformation@#{BridgetownMediaTransformation::VERSION}" }
18
+
19
+ spec.required_ruby_version = ">= 2.5.0"
20
+
21
+ spec.add_dependency "bridgetown", ">= 0.15", "< 2.0"
22
+ spec.add_dependency "image_processing", "~> 1.0"
23
+ spec.add_dependency "image_optim", "~> 0.27"
24
+
25
+ spec.add_development_dependency "bundler"
26
+ spec.add_development_dependency "nokogiri", "~> 1.6"
27
+ spec.add_development_dependency "pry"
28
+ spec.add_development_dependency "rake", "~> 12.0"
29
+ spec.add_development_dependency "rspec", "~> 3.0"
30
+ spec.add_development_dependency "rubocop-bridgetown", "~> 0.2"
31
+ end
@@ -0,0 +1 @@
1
+ <p>Just use <code>layout: bridgetown_media_transformation/layout</code> in your page's front matter.</p>
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: default
3
+ title: Example Page
4
+ ---
5
+
6
+ If all goes well, this page will be accessible as [`{{ page.url }}`]({{ page.url }}), and you will see a photo of a train:
7
+
8
+ ![Train on Rails]({{ "/bridgetown_media_transformation/train-on-rails.jpeg" | relative_url }})
@@ -0,0 +1,9 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <p>You can include this layout in your site! 🥳</p>
6
+
7
+ {% render "bridgetown_media_transformation/layout_help" %}
8
+
9
+ {{ content }}
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "image_processing/mini_magick"
4
+ require "image_processing/vips"
5
+ require "image_optim"
6
+ require "fileutils"
7
+
8
+ module BridgetownMediaTransformation
9
+ class Builder < Bridgetown::Builder
10
+ DEFAULT_TRANSFORMATION_SPECS = {
11
+ "webp" => [[640, "640w"], [1024, "1024w"], [1280, "1280w"], [1920, "1920w"], [3840, "2x"]],
12
+ "jpg" => [[640, "640w"], [1024, "1024w"], [1280, "1280w"], [1920, "1920w"], [3840, "2x"]]
13
+ }
14
+
15
+ attr_reader :attributes, :media_transformations
16
+
17
+ def build
18
+ @media_transformations ||= []
19
+
20
+ Bridgetown.logger.info "[media-transformation] Interlacing JPEG: #{interlace?}"
21
+ Bridgetown.logger.info "[media-transformation] Optimizing: #{optimize?}"
22
+
23
+ liquid_tag "resp_picture", as_block: true do |attributes, tag|
24
+ @attributes = attributes.split(",").map(&:strip)
25
+ src = tag.context["src"]
26
+ dest = tag.context["dest"]
27
+ src ||= @attributes.first
28
+ dest ||= src
29
+ lazy = kargs.fetch("lazy") { false }
30
+ transformation_specs = kargs.fetch("transformation_specs") { default_transformation_specs }
31
+
32
+ transformation = MediaTransformation.new(dest: dest, src: src, specs: transformation_specs, optimize: optimize?, interlace: interlace?, site: site, builder: self)
33
+ @media_transformations << transformation
34
+
35
+ picture_tag(src: src, dest: dest, file_hash: transformation.file_hash, lazy: lazy, attributes: tag.content, transformation_specs: transformation_specs)
36
+ end
37
+
38
+ unless Bridgetown.environment == "test"
39
+ hook :site, :post_write do |site|
40
+ # kick off transformations
41
+ media_transformations.each { |transformation| transformation.process }
42
+ end
43
+ end
44
+ end
45
+
46
+ def picture_tag(src: "", dest: "", file_hash:, lazy: false, attributes:, transformation_specs:)
47
+ src_filename = "#{file_hash}-#{file_basename(src)}"
48
+ prefixed_src = "#{File.join(File.dirname(dest), src_filename)}"
49
+
50
+ source_elements = transformation_specs.map do |format, spec|
51
+ srcset = spec.map do |s|
52
+ scaled_width, srcset_descriptor = s
53
+ "#{File.join(File.dirname(dest), file_basename(prefixed_src))}-#{scaled_width}.#{format} #{srcset_descriptor}"
54
+ end.join(", ")
55
+ "<source #{lazy ? 'data-' : ''}srcset=\"#{srcset}\" type=\"image/#{format}\" />"
56
+ end
57
+
58
+ tag = <<~PICTURE
59
+ <picture>
60
+ #{source_elements.join("\n")}
61
+ <img #{lazy ? 'data-' : ''}src="#{src}" #{attributes}>
62
+ </picture>
63
+ PICTURE
64
+ tag
65
+ end
66
+
67
+ def verbose?
68
+ options.dig(:verbose) || Bridgetown.environment == "production"
69
+ end
70
+
71
+ private
72
+
73
+ def kargs
74
+ return {} unless attributes.size > 1
75
+
76
+ json_payload = attributes[1..].join(", ")
77
+ @kargs = JSON.parse(JSON.parse(json_payload).gsub("'", "\""))
78
+ end
79
+
80
+ def file_basename(path)
81
+ File.basename(File.join(site.source, path), ".*")
82
+ end
83
+
84
+ def interlace?
85
+ options.dig(:interlace) || false
86
+ end
87
+
88
+ def optimize?
89
+ options.dig(:optimize) || false
90
+ end
91
+
92
+ def options
93
+ config["media_transformation"] || {}
94
+ end
95
+
96
+ def default_transformation_specs
97
+ options.fetch(:default_transformations) { DEFAULT_TRANSFORMATION_SPECS }
98
+ end
99
+ end
100
+ end
101
+
102
+ BridgetownMediaTransformation::Builder.register
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+
5
+ class MediaTransformation
6
+ attr_reader :dest, :src, :specs, :optimize, :interlace, :site
7
+
8
+ def initialize(dest:, src:, specs:, optimize:, interlace:, site:, builder:)
9
+ @dest = dest
10
+ @src = src
11
+ @specs = specs
12
+ @optimize = optimize
13
+ @interlace = interlace
14
+ @site = site
15
+ @builder = builder
16
+ end
17
+
18
+ def file_basename(path)
19
+ File.basename(File.join(site.source, path), ".*")
20
+ end
21
+
22
+ def file_hash
23
+ Digest::MD5.file(File.join(site.source, src)).hexdigest
24
+ end
25
+
26
+ def process
27
+ return if src.empty?
28
+
29
+ pipeline = ImageProcessing::Vips.source(File.join(site.source, src))
30
+
31
+ specs.each do |format, specs|
32
+ pipeline.convert(format)
33
+
34
+ pipeline.saver(interlace: true) if format == "jpg" && interlace
35
+
36
+ specs.each do |spec|
37
+ destination_filename = "#{file_hash}-#{file_basename(src)}"
38
+ cache_destination = File.join(site.source, "..", ".bmt-cache", "#{File.join(File.dirname(dest), destination_filename)}-#{spec.first}.#{format}")
39
+ destination = File.join(site.config["destination"], "#{File.join(File.dirname(dest), destination_filename)}-#{spec.first}.#{format}")
40
+
41
+ FileUtils.mkdir_p(File.dirname(cache_destination))
42
+
43
+ unless File.exist? cache_destination
44
+ if @builder.verbose?
45
+ Bridgetown.logger.info "[media-transformation] Generating #{cache_destination}"
46
+ end
47
+
48
+ pipeline
49
+ .resize_to_fit(spec.first, nil)
50
+ .call(destination: cache_destination)
51
+
52
+ if optimize && Bridgetown.environment == "production"
53
+ if @builder.verbose?
54
+ Bridgetown.logger.info "[media-transformation] Optimizing #{cache_destination}"
55
+ end
56
+ image_optim = ImageOptim.new
57
+ image_optim.optimize_image!(cache_destination)
58
+ end
59
+ end
60
+
61
+ if @builder.verbose?
62
+ Bridgetown.logger.info "[media-transformation] Copying #{cache_destination} to #{destination}"
63
+ end
64
+ FileUtils.mkdir_p(File.dirname(destination))
65
+ FileUtils.cp(cache_destination, destination)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownMediaTransformation
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bridgetown"
4
+ require "bridgetown-media-transformation/media_transformation"
5
+ require "bridgetown-media-transformation/builder"
6
+
7
+ Bridgetown::PluginManager.new_source_manifest(
8
+ origin: BridgetownMediaTransformation,
9
+ components: File.expand_path("../components", __dir__),
10
+ content: File.expand_path("../content", __dir__),
11
+ layouts: File.expand_path("../layouts", __dir__)
12
+ )
data/package.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "bridgetown-media-transformation",
3
+ "version": "0.1.0",
4
+ "main": "frontend/javascript/index.js",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/julianrubisch/bridgetown-media-transformation.git"
8
+ },
9
+ "author": "Julian Rubisch <julian@julianrubisch.at>",
10
+ "homepage": "https://github.com/julianrubisch/bridgetown-media-transformation",
11
+ "license": "MIT",
12
+ "private": false,
13
+ "files": [
14
+ "frontend"
15
+ ]
16
+ }
metadata ADDED
@@ -0,0 +1,193 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bridgetown-media-transformation
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Julian Rubisch
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-09-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bridgetown
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0.15'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '0.15'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: image_processing
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: image_optim
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.27'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.27'
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: nokogiri
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.6'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.6'
89
+ - !ruby/object:Gem::Dependency
90
+ name: pry
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rake
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '12.0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '12.0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rspec
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '3.0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '3.0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rubocop-bridgetown
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '0.2'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.2'
145
+ description:
146
+ email: julian@julianrubisch.at
147
+ executables: []
148
+ extensions: []
149
+ extra_rdoc_files: []
150
+ files:
151
+ - ".gitignore"
152
+ - ".rspec"
153
+ - ".rubocop.yml"
154
+ - CHANGELOG.md
155
+ - Gemfile
156
+ - LICENSE.txt
157
+ - README.md
158
+ - Rakefile
159
+ - bridgetown-media-transformation.gemspec
160
+ - components/bridgetown_media_transformation/layout_help.liquid
161
+ - content/bridgetown_media_transformation/example_page.md
162
+ - content/bridgetown_media_transformation/train-on-rails.jpeg
163
+ - layouts/bridgetown_media_transformation/layout.html
164
+ - lib/bridgetown-media-transformation.rb
165
+ - lib/bridgetown-media-transformation/builder.rb
166
+ - lib/bridgetown-media-transformation/media_transformation.rb
167
+ - lib/bridgetown-media-transformation/version.rb
168
+ - package.json
169
+ homepage: https://github.com/julianrubisch/bridgetown-media-transformation
170
+ licenses:
171
+ - MIT
172
+ metadata:
173
+ yarn-add: bridgetown-media-transformation@0.1.0
174
+ post_install_message:
175
+ rdoc_options: []
176
+ require_paths:
177
+ - lib
178
+ required_ruby_version: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: 2.5.0
183
+ required_rubygems_version: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ requirements: []
189
+ rubygems_version: 3.2.3
190
+ signing_key:
191
+ specification_version: 4
192
+ summary: Image and video transformation via image_processing and ffmpeg
193
+ test_files: []