Sha256: 589e6b70d17bf31332fbd12408662d625102a8bf5b5fda56ddaf7fc540ef986d

Contents?: true

Size: 1.56 KB

Versions: 1

Compression:

Stored size: 1.56 KB

Contents

require 'delegate'
require 'active_support/core_ext/class'

class Injector < Module

 # PLUGIN_OPTIONS = [:outer_version, :root_uploader]

  def initialize uploader, opts = {}, &block
    @uploader = uploader
    @outer_version = opts.delete(:outer_version)
    @root_uploader = opts.delete(:root_uploader)
    @options = opts
    self.class_eval &block
    @uploader.prepend self
  end

  def process *args, &block
    processed_options = ::CarrierWave::Processor.arguments_merge *args
    unless @outer_version
      new_if = ::CarrierWave::Processor.conditions_merge(@options[:if], processed_options[:if])
      processed_options[:if] = new_if if new_if
    end
    @uploader.process processed_options, &block
  end

  def version *args, &block
    options = args.extract_options! || {}
    version_options = @options.merge options
    ifs_array = [@options[:if], options[:if]]
    new_if = ::CarrierWave::Processor.conditions_merge *ifs_array
    version_options[:if] = new_if
    version_options.delete :if if version_options[:if].nil?
    version_options[:from_version] = @outer_version if @outer_version
    passing_options = {:if => ifs_array}
    passing_options[:outer_version] = args.first if args.first
    passing_options[:root_uploader] = @root_uploader || @uploader
    version_args = version_options.empty? ? args : (args + [version_options])
    passing_options[:root_uploader].version *version_args do
      Injector.new(self, passing_options, &block)
    end
  end

  def method_missing *args, &block
    @uploader.send *args, &block
  end

  def delay *args, &block
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
carrierwave-processor-1.0.3 lib/carrierwave/processor/injector.rb