class JSONError::Base
Constants
- DEFAULT_STATUS
- NULL_TOKEN
Attributes
key_alias[R]
context[R]
key[R]
options[R]
Public Class Methods
base?()
click to toggle source
# File lib/json_error/base.rb, line 17 def base? self == JSONError.base end
custom_properties(*custom_properties)
click to toggle source
# File lib/json_error/base.rb, line 58 def custom_properties(*custom_properties) return @custom_properties if custom_properties.empty? disallowed_property_setting!(:custom_properties) if base? attr_accessor(*custom_properties) @custom_properties = [*@custom_properties, *custom_properties].uniq end
default_properties()
click to toggle source
# File lib/json_error/base.rb, line 44 def default_properties %i(status key) end
disallowed_property_setting!(property)
click to toggle source
# File lib/json_error/base.rb, line 21 def disallowed_property_setting!(property) raise(Errors::DisallowedPropertySetting, property: property, class: self) end
inherited(base)
click to toggle source
# File lib/json_error/base.rb, line 11 def inherited(base) base.instance_variable_set(:@translated_properties, translated_properties) base.instance_variable_set(:@custom_properties, custom_properties) base.instance_variable_set(:@key_alias, key_alias) end
key(key = nil, options = {})
click to toggle source
# File lib/json_error/base.rb, line 25 def key(key = nil, options = {}) return @key if key.nil? disallowed_property_setting!(:key) if base? @key_alias = options[:as] if options[:as].is_a?(Symbol) @key ||= key end
new(attrs = {})
click to toggle source
Calls superclass method
# File lib/json_error/base.rb, line 74 def initialize(attrs = {}) @key = self.class.key || attrs.fetch(:key) @context = attrs[:context] assign_custom_properties(attrs) assign_options(attrs) super(message) end
properties()
click to toggle source
# File lib/json_error/base.rb, line 40 def properties [*default_properties, *translated_properties, *custom_properties] end
status(status = nil)
click to toggle source
# File lib/json_error/base.rb, line 33 def status(status = nil) return @status if status.nil? disallowed_property_setting!(:status) if base? @status = status end
translated_properties(*translated_properties)
click to toggle source
# File lib/json_error/base.rb, line 48 def translated_properties(*translated_properties) return @translated_properties if translated_properties.empty? disallowed_property_setting!(:translated_properties) if base? translated_properties.each do |property| define_method(property) { translate(property) } end @translated_properties = [*@translated_properties, *translated_properties].uniq end
visible_properties(*visible_properties)
click to toggle source
# File lib/json_error/base.rb, line 66 def visible_properties(*visible_properties) return(@visible_properties || properties) if visible_properties.empty? disallowed_property_setting!(:visible_properties) if base? @visible_properties = visible_properties.uniq end
Public Instance Methods
status()
click to toggle source
# File lib/json_error/base.rb, line 82 def status self.class.status || 500 end
to_json(*args)
click to toggle source
# File lib/json_error/base.rb, line 86 def to_json(*args) visible_properties_hash.to_json(*args) end
Private Instance Methods
assign_custom_properties(attrs = {})
click to toggle source
# File lib/json_error/base.rb, line 92 def assign_custom_properties(attrs = {}) attrs = attrs.dup.delete_if { |k, _v| !custom_properties.include?(k) } custom_properties.each do |property| instance_variable_set("@#{property}", attrs[property]) end end
assign_options(attrs = {})
click to toggle source
# File lib/json_error/base.rb, line 99 def assign_options(attrs = {}) reserved_names = %i(key context) + custom_properties @options = attrs.dup.delete_if { |k, _v| reserved_names.include?(k) } options.merge!(default: NULL_TOKEN) end
custom_properties()
click to toggle source
# File lib/json_error/base.rb, line 125 def custom_properties self.class.custom_properties || [] end
key_alias()
click to toggle source
# File lib/json_error/base.rb, line 129 def key_alias self.class.key_alias end
translate(node, translation_options = {})
click to toggle source
# File lib/json_error/base.rb, line 105 def translate(node, translation_options = {}) translation_options = options.merge(translation_options) translation = I18n.t("#{translation_path}.#{node}", translation_options) translation unless translation == NULL_TOKEN end
translation_path()
click to toggle source
# File lib/json_error/base.rb, line 111 def translation_path context.nil? ? "json_errors.#{key}" : "json_errors.#{context}.#{key}" end
visible_properties()
click to toggle source
# File lib/json_error/base.rb, line 121 def visible_properties self.class.visible_properties end
visible_properties_hash()
click to toggle source
# File lib/json_error/base.rb, line 115 def visible_properties_hash h = Hash[visible_properties.map { |property| [property, send(property)] }] h[key_alias] = h.delete(:key) unless key_alias.nil? h end