Sha256: 7210b2c135086c970d3b691ac3e9b188fb0469475aa43741e1f1606f9b2b00fa

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

class SimplificatorInfrastructure::ErrorsController < ActionController::Base
  around_filter :with_locale

  layout 'simplificator_infrastructure/errors'
  helper_method :error_summary


  def render_error
    respond_to do |format|
      format.any do
        render template_for_status_code, status: error_summary.status_code, content_type: 'text/html'
      end
      format.json do
        render json: {message: error_summary.exception.message}, status: error_summary.status_code
      end
    end
  end

  private

  # Returns the template for the status code that is associated to the current error.
  # INCLUDING 'html' as type to force rendering of the html view.
  def template_for_status_code
    if specific_error_template_exists?
      specific_template
    else
      generic_template
    end
  end

  def specific_template
    "errors/#{error_summary.status_code}.html"
  end

  def generic_template
    'errors/generic_error.html'
  end

  def specific_error_template_exists?
    lookup_context.template_exists?("#{error_summary.status_code}.html", "errors", false)
  end

  def error_summary
    @error_summary ||= begin
      ::SimplificatorInfrastructure::ErrorSummary.new(env)
    end
  end

  # sets the locale and resets afterwards for I18n.t to work in error templates
  def with_locale
    I18n.with_locale(error_summary.locale) do
      yield
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simplificator_infrastructure-0.0.8 app/controllers/simplificator_infrastructure/errors_controller.rb