module CustomFields::Types::File::Target::ClassMethods

Public Instance Methods

apply_file_custom_field(klass, rule) click to toggle source

Adds a file field (using carrierwave)

@param [ Class ] klass The class to modify @param [ Hash ] rule It contains the name of the field and if it is required or not

# File lib/custom_fields/types/file.rb, line 17
def apply_file_custom_field(klass, rule)
  name = rule['name']

  klass.mount_uploader name, FileUploader
  klass.field :"#{name}_size", type: ::Hash, default: {}

  klass.replace_field name, ::String, true if rule['localized'] == true

  return unless rule['required']

  # FIXME: previously, we called "klass.validates_presence_of name"
  # but it didn't work well with localized fields.
  klass.validate do |object|
    UploaderPresenceValidator.new(object, name).validate
  end
end
file_attribute_get(instance, name) click to toggle source

Build a hash storing the url for a file custom field of an instance.

@param [ Object ] instance An instance of the class enhanced by the custom_fields @param [ String ] name The name of the file custom field

@return [ Hash ] field name => url or empty hash if no file

# File lib/custom_fields/types/file.rb, line 41
def file_attribute_get(instance, name)
  if instance.send(:"#{name}?") # "
    value = instance.send(name.to_sym).url
    { name => value, "#{name}_url" => value }
  else
    {}
  end
end
file_attribute_set(instance, name, attributes) click to toggle source

Set the value for the instance and the file field specified by the 2 params.

@param [ Object ] instance An instance of the class enhanced by the custom_fields @param [ String ] name The name of the file custom field @param [ Hash ] attributes The attributes used to fetch the values

# File lib/custom_fields/types/file.rb, line 57
def file_attribute_set(instance, name, attributes)
  [name, "remote_#{name}_url", "remove_#{name}"].each do |_name|
    default_attribute_set(instance, _name, attributes)
  end.compact
end