kwbock/clipster

View on GitHub
app/controllers/clipster/clips_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
require_dependency "clipster/application_controller"

module Clipster
  class ClipsController < ApplicationController

    # GET /clips
    # GET /clips.json
    # GET /clips.xml
    def clips
      # get all clips, with the newest clip first
      if params[:lang].nil?
        @clips = Clip.public.order('created_at DESC').page(params[:page])
      else
        @clips = Clip.language_for_public(params[:lang]).order('created_at DESC').page(params[:page])
      end

      @updated_at = @clips.first.updated_at unless @clips.empty?

      respond_to do |format|
        format.html
        format.atom
        format.json { render json: @clips }
        format.xml { render xml: @clips }
      end
    end

    # GET /new
    # GET /new.json
    # GET /new.xml
    def new
      @clip = Clip.new
      
      respond_to do |format|
        format.html # new.html.erb
        format.json { render json: @clip }
        format.xml { render xml: @clip }
      end
    end

    # POST /create
    # POST /create.json
    # POST /create.xml
    def create
      @clip = Clip.new
      begin
        @clip = Clip.new(params[:clip])
      rescue ActiveModel::MassAssignmentSecurity::Error => error
        @clip.errors.add("Security -",error.message)
      end
      
      respond_to do |format|
        if @clip.errors.empty? && @clip.valid? && @clip.save
          format.html { redirect_to @clip }
          format.json { render json: @clip, status: :created, location: @post }
          format.xml { render xml: @clip, status: :created, location: @post }
        else# didn't pass validation
          format.html { render :new }
          format.json { render json: @clip.errors, status: :unprocessable_entity }
          format.xml { render xml: @clip.errors, status: :unprocessable_entity }
        end
      end
    end

    # POST /[id]
    # POST /[id].json
    # POST /[id].xml
    def show
      @clip = Clip.where("id = :id and (expires is null OR expires > :now)",{
          :id => params[:id],
          :now => DateTime.now
      }).first

      if @clip.nil?
        # Most likely the clip is expired, take advantage of this time to
        # clean up all expired clips, then display error page
        Clip.delete_expired
        respond_to do |format|
          @clip = Clip.new
          @clip.errors.add("Clip id", "is either invalid or it has expired.")
          format.html { render :expired, status: :not_found }
          format.text { render text: @clip.errors, status: :not_found }
          format.json { render json: @clip.errors, status: :not_found }
          format.xml { render xml: @clip.errors, status: :not_found }
        end
        return
      end

      respond_to do |format|
        format.html
        format.text { render text: @clip.clip.html_safe }
        format.json { render json: @clip }
        format.xml { render xml: @clip }
      end
    end

    # GET /search?search_term=[term]
    # GET /search.json?search_term=[term]
    # GET /search.xml?search_term=[term]
    def search
      @clips = Clip.search(params[:search_term]).page(params[:page])
      respond_to do |format|
        format.html { render :clips }
        format.json { render json: @clips }
        format.xml { render xml: @clips }
      end
    end

    def preview
      @clip = Clip.new(params[:clip])
      render :partial => 'clipster/common/clip', :object => @clip
    end
  end
end