ezuhaib/psymic

View on GitHub
app/controllers/wiki_pages_controller.rb

Summary

Maintainability
A
1 hr
Test Coverage
class WikiPagesController < ApplicationController
  # GET /wiki_pages
  # GET /wiki_pages.json
  before_filter :fetch_wiki_page , only: [:show,:edit,:update,:destroy]
  def fetch_wiki_page
    @wiki_page = WikiPage.find_by_slug(params[:id])
  end

  # Index is itself a wiki page
  def index
    authorize! :read, WikiPage
    @wiki_page = WikiPage.find_by_slug(:root)
    render template: 'wiki_pages/show'
  end

  # GET /wiki_pages/1
  # GET /wiki_pages/1.json
  def show
    @wiki_title = params[:id]
    authorize! :read , WikiPage
    if @wiki_page.blank?
      @page_title = "Wiki page not found"
      render template:"wiki_pages/new_landing"
    else
      @page_title = @wiki_page.title
    end
  end

  # GET /wiki_pages/new
  # GET /wiki_pages/new.json
  def new
    authorize! :create , WikiPage
    @page_title = "New wiki page"
    @wiki_page = WikiPage.new
    @wiki_page.slug = params[:slug] if params[:slug]

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @wiki_page }
    end
  end

  # GET /wiki_pages/1/edit
  def edit
  authorize! :update , WikiPage
  @page_title = "Editing wiki page"
  end

  # POST /wiki_pages
  # POST /wiki_pages.json
  def create
    authorize! :create , WikiPage
    @wiki_page = WikiPage.new(wiki_params)
    @wiki_page.user_id = current_user.id

    respond_to do |format|
      if @wiki_page.save
        format.html { redirect_to @wiki_page, notice: 'Wiki page was successfully created.' }
        format.json { render json: @wiki_page, status: :created, location: @wiki_page }
      else
        format.html { render action: "new" }
        format.json { render json: @wiki_page.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /wiki_pages/1
  # PUT /wiki_pages/1.json
  def update
    authorize! :update , WikiPage
    respond_to do |format|
      if @wiki_page.update_attributes(wiki_params)
        format.html { redirect_to @wiki_page, notice: 'Wiki page was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @wiki_page.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /wiki_pages/1
  # DELETE /wiki_pages/1.json
  def destroy
    @wiki_page.destroy
    authorize! :destroy , @wiki_page

    respond_to do |format|
      format.html { redirect_to wiki_pages_url }
      format.json { head :no_content }
    end
  end

  private
  def wiki_params
    params.require(:wiki_page).permit(:body, :title, :user_id , :slug)
  end
end