app/controllers/uploader/attachments_controller.rb in rails-uploader-0.2.8 vs app/controllers/uploader/attachments_controller.rb in rails-uploader-0.3.0
- old
+ new
@@ -1,56 +1,80 @@
module Uploader
class AttachmentsController < ActionController::Metal
include AbstractController::Callbacks
-
- before_filter :find_klass
- before_filter :find_asset, :only => [:destroy]
-
+ include Uploader::Authorization
+ include Uploader::ChunkedUploads
+
+ before_action :find_klass
+ before_action :build_asset, only: [:create]
+ before_action :find_asset, only: [:destroy]
+
+ def index
+ authorize!(:index, @klass)
+
+ @assets = @klass.fileupload_find_assets(params)
+ @assets = uploader_authorization.scope_collection(@assets)
+
+ render_json(files: @assets.map(&:to_fileupload))
+ end
+
def create
- @asset = @klass.new(params[:asset])
- @asset.uploader_create(params, request)
+ authorize!(:create, @asset)
+
+ with_chunked_upload(asset_params[:data]) do |file|
+ @asset.data = file
+ @asset.fileupload_create(params, request)
+ end
+
render_resourse(@asset, 201)
end
-
+
def update
- @assets = Array.wrap(params[:assets] || [])
+ authorize!(:update, @klass)
- @assets.each_with_index do |id, index|
- @klass.where(:id => id).update_all(:sort_order => index)
- end
-
- render_json(:files => [])
+ @klass.fileupload_update_ordering(params)
+ render_json(files: [])
end
def destroy
- @asset.uploader_destroy(params, request)
- render_resourse(@asset, 200)
+ authorize!(:destroy, @asset)
+
+ @asset.fileupload_destroy(params, request)
+ render_resourse(@asset)
end
-
+
protected
-
- def find_klass
- @klass = Uploader.constantize(params[:klass])
- raise ActionController::RoutingError.new("Class not found #{params[:klass]}") if @klass.nil?
- end
- def find_asset
- @asset = @klass.where(:public_token => params[:id]).first
- raise ActionController::RoutingError.new("Asset not found by guid #{params[:id]}") if @asset.nil?
+ def find_klass
+ @klass = Uploader.constantize(params[:klass])
+ raise ActionController::RoutingError, "Class not found #{params[:klass]}" if @klass.nil?
+ end
+
+ def build_asset
+ @asset = @klass.new(asset_params)
+ end
+
+ def find_asset
+ @asset = @klass.fileupload_find_asset(params)
+ raise ActionController::RoutingError, "Asset not found by #{params[:id]}" if @asset.nil?
+ end
+
+ def render_resourse(record, status = 200)
+ if record.errors.empty?
+ render_json({ files: [record.to_fileupload] }, status)
+ else
+ hash = { name: record.filename, error: record.errors.full_messages.first }
+ render_json({ files: [hash] }, 422)
end
-
- def render_resourse(record, status = 200)
- if record.errors.empty?
- render_json({:files => [record]}, status)
- else
- render_json(record.errors, 422)
- end
- end
-
- def render_json(hash_or_object, status = 200)
- self.status = status
- self.content_type = Uploader.content_type(env["HTTP_USER_AGENT"])
- self.response_body = hash_or_object.to_json(:root => false)
- end
-
+ end
+
+ def render_json(hash_or_object, status = 200)
+ self.status = status
+ self.content_type = request.format
+ self.response_body = hash_or_object.to_json(root: false)
+ end
+
+ def asset_params
+ ActionController::Parameters.new(params).require(:asset).permit(:data)
+ end
end
end