class Voltron::Uploader

Attributes

resource[RW]

Public Class Methods

new(resource) click to toggle source
# File lib/voltron/uploader.rb, line 6
def initialize(resource)
  @resource = resource.to_s.classify.safe_constantize
end

Public Instance Methods

columns() click to toggle source

Get a hash of uploader columns and whether or not it accepts multiple uploads i.e. - { column => multiple_uploads? } i.e. - { avatar: false }

# File lib/voltron/uploader.rb, line 46
def columns
  @instance ||= resource.new
  uploaders = resource.uploaders.keys.map(&:to_s)
  resource.uploaders.map { |k,v| { k.to_s => multiple?(k) } }.reduce(Hash.new, :merge)
end
files_from(model) click to toggle source
# File lib/voltron/uploader.rb, line 39
def files_from(model)
  model.slice(columns.keys).values.flatten.reject(&:blank?).map(&:to_upload_json)
end
multiple?(column) click to toggle source
# File lib/voltron/uploader.rb, line 52
def multiple?(column)
  @instance ||= resource.new
  @instance.respond_to?("#{column}_urls")
end
permitted_params() click to toggle source

List of permitted parameters needed for upload action

# File lib/voltron/uploader.rb, line 16
def permitted_params
  columns.keys.map(&:to_sym)
  #.map { |name, multiple| multiple ? { name => [] } : name }
end
process!(params) click to toggle source
# File lib/voltron/uploader.rb, line 21
def process!(params)
  params = params.map { |column, value| { column => multiple?(column) && value.is_a?(Array) ? value.map(&:values).flatten : value } }.reduce(Hash.new, :merge)
  model = resource.new(params)

  # Test the validity, get the errors if any
  model.valid?

  # Remove all errors that were not related to an uploader, they're expected in this case
  (model.errors.keys - resource.uploaders.keys).each { |k| model.errors.delete k }

  if model.errors.any?
    # If any errors, return the messages
    raise ::Voltron::Upload::Error.new(model.errors.full_messages)
  else
    { uploads: files_from(model) }
  end
end
resource_name() click to toggle source

Resource name as it would appear in the params hash

# File lib/voltron/uploader.rb, line 11
def resource_name
  resource.name.singularize.underscore.to_sym
end