lib/grape/exceptions/base.rb in grape-0.2.6 vs lib/grape/exceptions/base.rb in grape-0.3.0

- old
+ new

@@ -1,17 +1,66 @@ module Grape module Exceptions class Base < StandardError + + BASE_MESSAGES_KEY = 'grape.errors.messages' + BASE_ATTRIBUTES_KEY = 'grape.errors.attributes' + attr_reader :status, :message, :headers def initialize(args = {}) @status = args[:status] || nil @message = args[:message] || nil @headers = args[:headers] || nil end def [](index) self.send(index) - end + end + + protected + # TODO: translate attribute first + # if BASE_ATTRIBUTES_KEY.key respond to a string message, then short_message is returned + # if BASE_ATTRIBUTES_KEY.key respond to a Hash, means it may have problem , summary and resolution + def compose_message(key, attributes = {} ) + short_message = translate_message(key, attributes) + if short_message.is_a? Hash + @problem = problem(key, attributes) + @summary = summary(key, attributes) + @resolution = resolution(key, attributes) + [ ["Problem", @problem], ["Summary", @summary], ["Resolution", @resolution]].reduce("") do |message, detail_array| + message << "\n#{detail_array[0]}:\n #{detail_array[1]}" unless detail_array[1].blank? + message + end + else + short_message + end + end + + def problem(key, attributes) + translate_message("#{key}.problem", attributes) + end + + def summary(key, attributes) + translate_message("#{key}.summary", attributes) + end + + def resolution(key, attributes) + translate_message("#{key}.resolution", attributes) + end + + + def translate_attribute(key, options = {}) + translate("#{BASE_ATTRIBUTES_KEY}.#{key}", { :default => key }.merge(options)) + end + + def translate_message(key, options = {}) + translate("#{BASE_MESSAGES_KEY}.#{key}", {:default => '' }.merge(options)) + end + + def translate(key, options = {}) + ::I18n.translate(key, options) + end + end end end