Module: Attached::ClassMethods
- Defined in:
- lib/attached.rb
Instance Method Summary collapse
-
#has_attached(name, options = {}) ⇒ Object
Add an attachment to a class.
-
#validates_attached_extension(name, options = {}) ⇒ Object
Validates an attached extension in a specified set.
-
#validates_attached_presence(name, options = {}) ⇒ Object
Validates that an attachment is included.
-
#validates_attached_size(name, options = {}) ⇒ Object
Validates an attached size in a specified range or minimum and maximum.
Instance Method Details
#has_attached(name, options = {}) ⇒ Object
Add an attachment to a class.
Options:
-
:styles - a hash containing style names followed by parameters passed to processor
-
:storage - a symbol for a predefined storage or a custom storage class
-
:processor - a symbol for a predefined processor or a custom processor class
Usage:
has_attached :video
has_attached :video, :storage => :aws
has_attached :video, styles => { :mov => { :size => "480p", :format => "mov" } }
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/attached.rb', line 49 def has_attached(name, = {}) include InstanceMethods self. ||= {} self.[name] = before_save :save_attached before_destroy :destroy_attached define_method name do (name) end define_method "#{name}=" do |file| (name).assign(file) end define_method "#{name}?" do (name).attached? end define_method "#{name}_url=" do |url| (name).url = url end validates_each(name) do |record, attr, value| = record.(name) .errors.each do |error| record.errors.add(name, error) end end after_validation do if self.errors.include?(:"#{name}_size") self.errors[:"#{name}_size"].each do || self.errors.add(name, ) end self.errors[:"#{name}_size"].clear end if self.errors.include?(:"#{name}_extension") self.errors[:"#{name}_extension"].each do || self.errors.add(name, ) end self.errors[:"#{name}_extension"].clear end if self.errors.include?(:"#{name}_identifier") self.errors[:"#{name}_identifier"].each do || self.errors.add(name, ) end self.errors[:"#{name}_identifier"].clear end end end |
#validates_attached_extension(name, options = {}) ⇒ Object
Validates an attached extension in a specified set.
Options:
-
:in - allowed values for attached
Usage:
validates_attached_extension :avatar, :is => 'png'
validates_attached_extension :avatar, :in => %w(png jpg)
validates_attached_extension :avatar, :in => [:png, :jpg]
validates_attached_extension :avatar, :in => %w(png jpg), :message => "extension must be :in"
validates_attached_extension :avatar, :in => %w(png jpg), :message => "extension must be :in"
164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/attached.rb', line 164 def validates_attached_extension(name, = {}) = [:message] ||= "extension is invalid" [:in] ||= [[:is]] if [:is] range = [:in].map { |element| ".#{element}" } validates_inclusion_of :"#{name}_extension", :in => range, :message => , :if => [:if], :unless => [:unless] end |
#validates_attached_presence(name, options = {}) ⇒ Object
Validates that an attachment is included.
Options:
-
:message - string to be displayed
Usage:
validates_attached_presence :avatar
validates_attached_presence :avatar, :message => "must be attached"
189 190 191 192 193 194 195 196 197 |
# File 'lib/attached.rb', line 189 def validates_attached_presence(name, = {}) = [:message] ||= "must be attached" validates_presence_of :"#{name}_identifier", :message => , :if => [:if], :unless => [:unless] end |
#validates_attached_size(name, options = {}) ⇒ Object
Validates an attached size in a specified range or minimum and maximum.
Options:
-
:message - string to be displayed with :minimum and :maximum variables
-
:minimum - integer for the minimum byte size of the attached
-
:maximum - integer for the maximum byte size of teh attached
-
:in - range of bytes for file
Usage:
validates_attached_size :avatar, :range => 10.megabytes .. 20.megabytes
validates_attached_size :avatar, :minimum => 10.megabytes, :maximum => 20.megabytes
validates_attached_size :avatar, :message => "size must be between :minimum and :maximum bytes"
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/attached.rb', line 125 def validates_attached_size(name, = {}) zero = (0.0 / 1.0) infi = (1.0 / 0.0) minimum = [:minimum] || [:in] && [:in].first || zero maximum = [:maximum] || [:in] && [:in].last || infi = [:message] ||= "size must be specified" if minimum == zero && maximum == infi ||= "size must be a minimum of :minimum" if maximum == infi ||= "size must be a maximum of :maximum" if minimum == zero ||= "size must be between :minimum and :maximum" range = minimum..maximum .gsub!(/:minimum/, number_to_size(minimum)) unless minimum == zero .gsub!(/:maximum/, number_to_size(maximum)) unless maximum == infi validates_inclusion_of :"#{name}_size", :in => range, :message => , :if => [:if], :unless => [:unless] end |