Class: Paperclip::Style

Inherits:
Object
  • Object
show all
Defined in:
lib/paperclip/style.rb

Overview

The Style class holds the definition of a thumbnail style, applying whatever processing is required to normalize the definition and delaying the evaluation of block parameters until useful context is available.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, definition, attachment) ⇒ Style

Creates a Style object. name is the name of the attachment, definition is the style definition from has_attached_file, which can be string, array or hash



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/paperclip/style.rb', line 12

def initialize(name, definition, attachment)
  @name = name
  @attachment = attachment
  if definition.is_a? Hash
    @geometry = definition.delete(:geometry)
    @format = definition.delete(:format)
    @processors = definition.delete(:processors)
    @convert_options = definition.delete(:convert_options)
    @source_file_options = definition.delete(:source_file_options)
    @other_args = definition
  elsif definition.is_a? String
    @geometry = definition
    @format = nil
    @other_args = {}
  else
    @geometry, @format = [definition, nil].flatten[0..1]
    @other_args = {}
  end
  @format = default_format if @format.blank?
end

Instance Attribute Details

#attachmentObject (readonly)

Returns the value of attribute attachment.



7
8
9
# File 'lib/paperclip/style.rb', line 7

def attachment
  @attachment
end

#formatObject (readonly)

Returns the value of attribute format.



7
8
9
# File 'lib/paperclip/style.rb', line 7

def format
  @format
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/paperclip/style.rb', line 7

def name
  @name
end

Instance Method Details

#[](key) ⇒ Object

Supports getting and setting style properties with hash notation to ensure backwards-compatibility eg. @attachment.styles[:geometry]@ will still work



84
85
86
87
88
89
90
# File 'lib/paperclip/style.rb', line 84

def [](key)
  if [:name, :convert_options, :whiny, :processors, :geometry, :format, :animated, :source_file_options].include?(key)
    send(key)
  elsif defined? @other_args[key]
    @other_args[key]
  end
end

#[]=(key, value) ⇒ Object



92
93
94
95
96
97
98
# File 'lib/paperclip/style.rb', line 92

def []=(key, value)
  if [:name, :convert_options, :whiny, :processors, :geometry, :format, :animated, :source_file_options].include?(key)
    send("#{key}=".intern, value)
  else
    @other_args[key] = value
  end
end

#convert_optionsObject



52
53
54
55
# File 'lib/paperclip/style.rb', line 52

def convert_options
  @convert_options.respond_to?(:call) ? @convert_options.call(attachment.instance) :
    (@convert_options || attachment.send(:extra_options_for, name))
end

#default_formatObject

defaults to default format (nil by default)



101
102
103
104
# File 'lib/paperclip/style.rb', line 101

def default_format
  base = attachment.options[:default_format]
  base.respond_to?(:call) ? base.call(attachment, name) : base
end

#geometryObject

returns the geometry string for this style if a proc has been supplied, we call it here



64
65
66
# File 'lib/paperclip/style.rb', line 64

def geometry
  @geometry.respond_to?(:call) ? @geometry.call(attachment.instance) : @geometry
end

#processor_optionsObject

Supplies the hash of options that processors expect to receive as their second argument Arguments other than the standard geometry, format etc are just passed through from initialization and any procs are called here, just before post-processing.



71
72
73
74
75
76
77
78
79
80
# File 'lib/paperclip/style.rb', line 71

def processor_options
  args = { style: name }
  @other_args.each do |k, v|
    args[k] = v.respond_to?(:call) ? v.call(attachment) : v
  end
  [:processors, :geometry, :format, :whiny, :convert_options, :source_file_options].each do |k|
    (arg = send(k)) && args[k] = arg
  end
  args
end

#processorsObject

retrieves from the attachment the processors defined in the has_attached_file call (which method (in the attachment) will call any supplied procs) There is an important change of interface here: a style rule can set its own processors by default we behave as before, though. if a proc has been supplied, we call it here



38
39
40
# File 'lib/paperclip/style.rb', line 38

def processors
  @processors.respond_to?(:call) ? @processors.call(attachment.instance) : (@processors || attachment.processors)
end

#source_file_optionsObject



57
58
59
60
# File 'lib/paperclip/style.rb', line 57

def source_file_options
  @source_file_options.respond_to?(:call) ? @source_file_options.call(attachment.instance) :
    (@source_file_options || attachment.send(:extra_source_file_options_for, name))
end

#whinyObject

retrieves from the attachment the whiny setting



43
44
45
# File 'lib/paperclip/style.rb', line 43

def whiny
  attachment.whiny
end

#whiny?Boolean

returns true if we’re inclined to grumble

Returns:

  • (Boolean)


48
49
50
# File 'lib/paperclip/style.rb', line 48

def whiny?
  !!whiny
end