class ReeErrors::Error
def caller
def caller self.class.instance_variable_get(:@caller) end
def caller_class
def caller_class @caller_class ||= begin if !caller nil else c = caller if c.is_a?(Class) extract_class_name(c.to_s) else extract_class_name(c.class.to_s) end end end end
def caller_module
def caller_module @caller_module ||= begin if !caller nil else c = caller if c.is_a?(Class) extract_module_name(c.to_s) else extract_module_name(c.class.to_s) end end end end
def code
def code c = self.class.instance_variable_get(:@code) if !c raise ArgumentError.new( "code not specified for error => #{self.inspect}" ) end c end
def default_msg
def default_msg self.class.instance_variable_get(:@default_msg) end
def extract_class_name(klass_str)
def extract_class_name(klass_str) klass_str.split("::").last end
def extract_module_name(klass_str)
def extract_module_name(klass_str) class_name = klass_str.split("::").first return nil if class_name == klass_str return class_name end
def initialize(msg = nil)
def initialize(msg = nil) if !msg && !locale && !default_msg raise ArgumentError, "message, locale or default message should be specified" end message = if msg msg elsif default_msg default_msg else path = (locale || code).to_s has_path = path.include?(".") if has_path pre_path = [caller_module, caller_class].compact.map { underscore(_1)}.join(".") if check_locale_exists(path) t(path, default_by_locale: :en) else t("#{pre_path}.#{path}", default_by_locale: :en) end else if caller_module mod = underscore(caller_module) klass = underscore(caller_class) if check_locale_exists(loc = "#{mod}.errors.#{klass}.#{path}") t(loc, default_by_locale: :en) else check_locale_exists(loc = "#{mod}.errors.#{path}") t(loc, default_by_locale: :en) end else end end end super(message) end
def locale
def locale self.class.instance_variable_get(:@locale) end
def type
def type t = self.class.instance_variable_get(:@type) if !t raise ArgumentError.new( "type was not specified for domain error => #{self.inspect}" ) end t end