module PaperclipUpload::ActiveRecordExtension

Public Instance Methods

allow_encoded_file_for(_paperclip_attr_name) click to toggle source
# File lib/paperclip_upload/active_record_extension.rb, line 36
def allow_encoded_file_for(_paperclip_attr_name)
  encoded_attr_name = "encoded_#{_paperclip_attr_name}"
  attr_accessor encoded_attr_name

  before_validation do
    encoded_attr = send(encoded_attr_name)
    if encoded_attr
      headerless_encoded_file = encoded_attr.split(",").last
      StringIO.open(Base64.decode64(headerless_encoded_file)) do |data|
        send("#{_paperclip_attr_name}=", data)
      end
    end
  end
end
build_upload_attr_name(_paperclip_attr_name, _sufix = nil) click to toggle source
# File lib/paperclip_upload/active_record_extension.rb, line 53
def build_upload_attr_name(_paperclip_attr_name, _sufix = nil)
  if !!upload_options.fetch(:use_prefix, PaperclipUpload.use_prefix)
    prefix = _paperclip_attr_name
  end

  upload_attr_name = [prefix, ["upload", _sufix].compact.join("_")].compact.join("_")

  if self.method_defined?(upload_attr_name)
    raise "you are trying to redefine #{upload_attr_name} attribute"
  end

  upload_attr_name
end
has_attached_upload(_paperclip_attr_name, _options = {}) click to toggle source
# File lib/paperclip_upload/active_record_extension.rb, line 6
def has_attached_upload(_paperclip_attr_name, _options = {})
  load_upload_options(_options)
  upload_identifier_attr_name = build_upload_attr_name(_paperclip_attr_name, "identifier")
  upload_attr_name = build_upload_attr_name(_paperclip_attr_name)

  attr_accessor upload_identifier_attr_name, upload_attr_name

  before_validation do
    identifier = send(upload_identifier_attr_name)

    if identifier
      found_upload = PaperclipUpload::Upload.find_by_identifier(identifier)
      send("#{upload_attr_name}=", found_upload)
    end

    upload_object = send(upload_attr_name)

    if upload_object
      if !upload_object.is_a?(PaperclipUpload::Upload)
        raise "invalid PaperclipUpload::Upload instance"
      end

      send("#{_paperclip_attr_name}=", upload_object.file)
      upload_object.destroy
    end
  end

  has_attached_file(_paperclip_attr_name, _options)
end
load_upload_options(_options = {}) click to toggle source
# File lib/paperclip_upload/active_record_extension.rb, line 67
def load_upload_options(_options = {})
  @upload_options = _options.fetch(:upload, {})
end
upload_options() click to toggle source
# File lib/paperclip_upload/active_record_extension.rb, line 71
def upload_options
  @upload_options ||= {}
end