Sha256: 3f34859a8d9801871faad4e50932c7d3b1b10ef55ecd5b0f51f8248c88718e88

Contents?: true

Size: 1.74 KB

Versions: 3

Compression:

Stored size: 1.74 KB

Contents

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)
            hash[key] = ActiveSupport::OrderedOptions.new
          end
        end
    end

    initializer 'image_optim.initializer' do |app|
      next if app.config.assets.compress == false
      next if app.config.assets.image_optim == false

      @image_optim = ImageOptim.new(options(app))

      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 optimize_image_data(data)
      @image_optim.optimize_image_data(data) || data
    end

    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
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
image_optim_rails-0.1.0 lib/image_optim/railtie.rb
image_optim-0.23.0 lib/image_optim/railtie.rb
image_optim-0.22.1 lib/image_optim/railtie.rb