55require "restful_error/status"
66require "restful_error/version"
77
8- I18n . load_path += Dir [ "#{ File . expand_path ( "../config/locales" ) } /*.yml" ] if defined? I18n
9-
108module RestfulError
9+ module Helper
10+ def restful
11+ @restful ||= begin
12+ raise NotImplementedError , "http_status must be implemented by including class" unless respond_to? ( :http_status )
13+ RestfulError . build_status_from_symbol_or_code ( http_status )
14+ end
15+ end
16+ def response_message
17+ return @response_message unless @response_message . nil?
18+ @response_message = RestfulError . localized_phrase ( self . class . name , restful )
19+ end
20+ end
21+
1122 class BaseError < StandardError
12- attr_reader :response_message
23+ include RestfulError :: Helper
1324 def initialize ( message = nil )
1425 @response_message = message
1526 super
1627 end
1728 end
1829
19- module Helper
20- def restful
21- raise NotImplementedError , "http_status must be implemented by including class" unless respond_to? ( :http_status )
22-
23- @restful ||= RestfulError . build_status_from_symbol_or_code ( http_status )
24- end
25- end
26-
2730 @cache = { }
2831 class << self
2932 def []( code_like )
@@ -38,10 +41,21 @@ def const_missing(const_name)
3841 @cache [ status . code ] ||= build_error_class_for ( status )
3942 end
4043
44+ def init_i18n
45+ return if @init_i18n
46+ I18n . load_path += Dir [ "#{ File . expand_path ( "./config/locales" ) } /*.yml" ]
47+ @init_i18n = true
48+ end
49+ def localized_phrase ( class_name , status )
50+ return false unless defined? ( I18n )
51+ init_i18n
52+ class_key = RestfulError ::Inflector . underscore ( class_name )
53+ I18n . t class_key , default : [ status . symbol , false ] , scope : :restful_error
54+ end
55+
4156 private
4257
4358 def build_error_class_for ( status )
44- message = defined? ( I18n ) ? I18n . t ( status . symbol , default : status . reason_phrase , scope : :restful_error ) : status . reason_phrase
4559 klass = Class . new ( BaseError ) do
4660 define_method ( :http_status ) { status . code }
4761 define_method ( :restful ) { status }
0 commit comments