Sha256: ba24e95c9d02a3c57700260cf57593d2571ea9e1700f13973f63a9265877f91b

Contents?: true

Size: 1.9 KB

Versions: 4

Compression:

Stored size: 1.9 KB

Contents

module SimpleFormAttachments
  class UploadController < ActionController::Base
    def create
      res = attachment.save
      render json: attachment_json, status: (res ? :ok : :unprocessable_entity)
    end

    private # =============================================================

    def attachment
      @attachment ||= attachment_class.new({ temporary: true }.merge(attachment_params))
    end

    def attachment_json
      { html: attachment_html }
    end

    def attachment_html
      render_to_string partial: 'simple_form_attachments/attachment_upload_template', locals: partial_locals
    end

    def partial_locals
      {
        parent: parent,
        parent_name: parent_name,
        parent_class: parent_class,
        child_index: child_index,
        attachment: attachment,
        multiple: multiple?,
        attachment_relation: params[:attachment_relation]
      }
    end

    def attachment_params
      params.require(:attachment).permit!
    end

    def parent_name
      params[:attachment_parent][:name]
    end

    def attachment_class
      params[:attachment_type].constantize
    end

    def parent_class
      return unless params[:attachment_parent]
      params[:attachment_parent][:class].constantize
    end

    def parent
      return unless params[:attachment_relation]
      if multiple? && attachment.errors.empty?
        parent_class.new { |o| o.send(params.fetch(:attachment_relation).fetch(:name).to_sym) << attachment }
      else
        parent_class.new
      end
    end

    def child_index
      DateTime.now.strftime('%Q').to_i
    end

    # ---------------------------------------------------------------------

    def multiple?
      ['true', true, '1', 1].include? params.fetch(:attachment_relation, {}).fetch(:multiple, false)
    end

    def referenced?
      ['true', true, '1', 1].include? params.fetch(:attachment_relation, {}).fetch(:referenced, false)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
simple_form_attachments-0.2.3 app/controllers/simple_form_attachments/upload_controller.rb
simple_form_attachments-0.2.2 app/controllers/simple_form_attachments/upload_controller.rb
simple_form_attachments-0.2.1 app/controllers/simple_form_attachments/upload_controller.rb
simple_form_attachments-0.2.0 app/controllers/simple_form_attachments/upload_controller.rb