lib/image_optim/railtie.rb in image_optim-0.22.0 vs lib/image_optim/railtie.rb in image_optim-0.22.1
- old
+ new
@@ -1,10 +1,17 @@
require 'image_optim'
class ImageOptim
# Adds image_optim as preprocessor for gif, jpeg, png and svg images
class Railtie < Rails::Railtie
+ MIME_TYPES = %w[
+ image/gif
+ image/jpeg
+ image/png
+ image/svg+xml
+ ].freeze
+
config.before_configuration do |app|
worker_names = ImageOptim::Worker.klasses.map(&:bin_sym)
app.config.assets.image_optim =
ActiveSupport::OrderedOptions.new do |hash, key|
if worker_names.include?(key.to_sym)
@@ -12,37 +19,48 @@
end
end
end
initializer 'image_optim.initializer' do |app|
- register_preprocessor(app) if register_preprocessor?(app)
- end
+ next if app.config.assets.compress == false
+ next if app.config.assets.image_optim == false
- def register_preprocessor?(app)
- return if app.config.assets.compress == false
- return if app.config.assets.image_optim == false
+ @image_optim = ImageOptim.new(options(app))
- app.assets
+ register_preprocessor(app) do |*args|
+ if args[1] # context and data arguments in sprockets 2
+ optimize_image_data(args[1])
+ else
+ input = args[0]
+ {
+ :data => optimize_image_data(input[:data]),
+ :charset => nil, # no gzipped version with rails/sprockets#228
+ }
+ end
+ end
end
def options(app)
if app.config.assets.image_optim == true
{}
else
app.config.assets.image_optim || {}
end
end
- def register_preprocessor(app)
- image_optim = ImageOptim.new(options(app))
+ def optimize_image_data(data)
+ @image_optim.optimize_image_data(data) || data
+ end
- processor = proc do |_context, data|
- image_optim.optimize_image_data(data) || data
+ def register_preprocessor(app, &processor)
+ MIME_TYPES.each do |mime_type|
+ if app.assets
+ app.assets.register_preprocessor mime_type, :image_optim, &processor
+ else
+ app.config.assets.configure do |env|
+ env.register_preprocessor mime_type, :image_optim, &processor
+ end
+ end
end
-
- app.assets.register_preprocessor 'image/gif', :image_optim, &processor
- app.assets.register_preprocessor 'image/jpeg', :image_optim, &processor
- app.assets.register_preprocessor 'image/png', :image_optim, &processor
- app.assets.register_preprocessor 'image/svg+xml', :image_optim, &processor
end
end
end