volontariat/voluntary

View on GitHub
app/controllers/voluntary/api/v1/stories_controller.rb

Summary

Maintainability
A
1 hr
Test Coverage
class Voluntary::Api::V1::StoriesController < ActionController::Base
  include Voluntary::V1::BaseController
  
  respond_to :json
  
  def show
    story = Story.find(params[:id])
    
    respond_to do |format|
      format.json do
        render json: product_serializer('Story', story)
      end
    end
  end
  
  def create
    project = Project.find(params[:story][:project_id])
    story = project.story_class.new({ project_id: project.id }.merge(params[:story] || {}))
    
    authorize! :create, story
    
    story.save
    
    respond_to do |format|
      format.json do
        render json: story.persisted? ? product_serializer('Story', story) : { errors: story.errors.to_hash }
      end
    end
  end
  
  def update
    story = Story.find params[:id]
    
    authorize! :update, story
    
    story.update_attributes params[:story]
    
    respond_to do |format|
      format.json do
        render json: story.valid? ? product_serializer('Story', story) : { errors: story.errors.to_hash }
      end
    end
  end
  
  def activate
    story = Story.find params[:id]
    
    authorize! :update, story
    
    story.activate
    
    respond_to do |format|
      format.json do
        render json: story.errors.empty? && story.valid? ? product_serializer('Story', story) : { errors: story.errors.to_hash }
      end
    end
  end
  
  def deactivate
    story = Story.find params[:id]
    
    authorize! :update, story
    
    story.deactivate
    
    respond_to do |format|
      format.json do
        render json: story.errors.empty? && story.valid? ? product_serializer('Story', story) : { errors: story.errors.to_hash }
      end
    end
  end
  
  def destroy
    story = current_user.stories.friendly.find params[:id]
    
    authorize! :destroy, story
    
    story.destroy
    
    respond_to do |format|
      format.json do
        render json: if story.persisted?
          { error: I18n.t('activerecord.errors.models.story.attributes.base.deletion_failed') }
        else
          {}
        end
      end
    end
  end
end