Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Api
- class DropsController < Api::ApplicationController
- def index
- if current_user.present?
- options = { context: self }
- options[:links] = links if links.present?
- DropCollectionExhibit.new(paginated_drops, options).render
- else
- render_unauthorized
- end
- end
- def show
- DropExhibit.new(drop).render(context: self)
- end
- def recover
- if current_user.present?
- drops.find(drop_ids).each(&:recover!)
- head :no_content
- else
- render_unauthorized
- end
- end
- def destroy_multiple
- if current_user.present?
- drops.destroy drop_ids
- head :no_content
- else
- render_unauthorized
- end
- end
- private
- def drop
- @drop ||= current_user.active_items.find(params[:id])
- end
- def drops
- current_user.public_send(drops_method)
- end
- def drop_ids
- params.fetch :drop_ids
- end
- def paginated_drops
- @paginated_drops ||= drops.order('id DESC').paginate(pagination_options)
- end
- def links
- {}.tap do |links|
- if paginated_drops.previous_page
- links[:previous] = drops_path_for_page paginated_drops.previous_page
- end
- if paginated_drops.next_page
- links[:next] = drops_path_for_page paginated_drops.next_page
- end
- end
- end
- def drops_method
- if filter == 'all'
- :items
- elsif filter == 'trash'
- :deleted_items
- elsif filter == 'active'
- :active_items
- end
- end
- def filter
- params.fetch :filter, 'active'
- end
- def pagination_options
- { page: params.fetch(:page, 1),
- per_page: params.fetch(:per_page, 20) }
- end
- def drops_path_for_page(page)
- drops_path pagination_options.merge(page: page)
- end
- end
- end
Add Comment
Please, Sign In to add comment