Sha256: 3bc6a8d7fc43b129d8011286dae1751efbbec1729c1b030af09a7c7c7fc53555

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

module Customs
  module Statuses

    def self.included base
      base.class_attribute :navigational_formats
      base.navigational_formats = [:html]
    end

    { :unauthorized   => 401,
      :forbidden      => 403,
      :not_found      => 404,
      :not_acceptable => 406,
      :unprocessable  => 422
    }.each do |method, code|
      define_method method do
        render options_for_status_code(code)
        false
      end
    end

    def access_denied
      return unauthorized if self.respond_to?(:current_user) && !current_user
      forbidden
    end

    def unprocessable *args
      options = args.extract_options!

      respond_to do |format|
        format.any *navigational_formats do
          action = options.delete(:action)
          action ||= case params[:action]
            when 'update' then 'edit'
            when 'create' then 'new'
            else raise "Unknown unprocessable action"
          end

          render :status => 422, :action => action
        end

        format.all { render :status => 422 }
      end
    end

    def options_for_status_code code
      { :status => code, :template => template_for_status_code(code) }
    end

    def template_for_status_code code
      "customs/#{code}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
customs-1.1.0 lib/customs/statuses.rb