Class: CarrierWave::Processor::Injector

Inherits:
Module
  • Object
show all
Defined in:
lib/carrierwave/processor/injector.rb

Instance Method Summary collapse

Constructor Details

#initialize(uploader, opts = {}, &block) ⇒ Injector

PLUGIN_OPTIONS = [:outer_version, :root_uploader]



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/carrierwave/processor/injector.rb', line 8

def initialize uploader, opts = {}, &block
  @uploader = uploader
  @outer_version = opts.delete(:outer_version)
  @root_uploader = opts.delete(:root_uploader) 
  unless @root_uploader
    @root_uploader = @uploader
    if CarrierWave::Processor.configuration.backend_configured?
      unless CarrierWave::Processor.configuration.backend.uploaders.include? @root_uploader
        CarrierWave::Processor.configuration.backend.uploaders << @root_uploader
        @root_uploader.after :store, :perform_delayed
      end
    end
  end
  @options = opts
  self.class_eval &block
  @uploader.send :prepend, self
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(*args, &block) ⇒ Object



52
53
54
# File 'lib/carrierwave/processor/injector.rb', line 52

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

Instance Method Details

#delay(*args, &block) ⇒ Object



56
57
58
59
60
61
62
63
64
# File 'lib/carrierwave/processor/injector.rb', line 56

def delay *args, &block
  options = args.extract_options!
  uniq_version_name = "version_#{SecureRandom.hex}".to_sym
  backend = ::CarrierWave::Processor.configuration.backend
  root_uploader_closure = @root_uploader
  delay_check = ->(uploader, options){ ::CarrierWave::Processor.configuration.backend.can_build_uploader?(root_uploader_closure) }
  backend.delay @uploader, uniq_version_name
  version(uniq_version_name, :if => delay_check, &block)
end

#process(*args, &block) ⇒ Object



26
27
28
29
30
31
32
33
# File 'lib/carrierwave/processor/injector.rb', line 26

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

#version(*args, &block) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/carrierwave/processor/injector.rb', line 35

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