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