Exception: JSONError::Base

Inherits:
StandardError
  • Object
show all
Defined in:
lib/json_error/base.rb

Constant Summary collapse

DEFAULT_STATUS =
500
NULL_TOKEN =
'~'

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attrs = {}) ⇒ Base

Returns a new instance of Base.



67
68
69
70
71
72
73
# File 'lib/json_error/base.rb', line 67

def initialize(attrs = {})
  @key = self.class.key || attrs.fetch(:key)
  @context = attrs[:context]
  assign_custom_properties(attrs)
  assign_options(attrs)
  super(message)
end

Class Attribute Details

.key_aliasObject (readonly)

Returns the value of attribute key_alias.



9
10
11
# File 'lib/json_error/base.rb', line 9

def key_alias
  @key_alias
end

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



6
7
8
# File 'lib/json_error/base.rb', line 6

def context
  @context
end

#keyObject (readonly)

Returns the value of attribute key.



6
7
8
# File 'lib/json_error/base.rb', line 6

def key
  @key
end

#optionsObject (readonly)

Returns the value of attribute options.



6
7
8
# File 'lib/json_error/base.rb', line 6

def options
  @options
end

Class Method Details

.base?Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/json_error/base.rb', line 17

def base?
  self == JSONError.base
end

.custom_properties(*custom_properties) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/json_error/base.rb', line 51

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_propertiesObject



37
38
39
# File 'lib/json_error/base.rb', line 37

def default_properties
  i(status key)
end

.disallowed_property_setting!(property) ⇒ Object



21
22
23
# File 'lib/json_error/base.rb', line 21

def disallowed_property_setting!(property)
  raise(Errors::DisallowedPropertySetting, property: property, class: self)
end

.inherited(base) ⇒ Object



11
12
13
14
15
# 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 = {}) ⇒ Object



25
26
27
28
29
30
31
# 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

.propertiesObject



33
34
35
# File 'lib/json_error/base.rb', line 33

def properties
  [*default_properties, *translated_properties, *custom_properties]
end

.translated_properties(*translated_properties) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/json_error/base.rb', line 41

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) ⇒ Object



59
60
61
62
63
64
# File 'lib/json_error/base.rb', line 59

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

Instance Method Details

#statusObject



75
76
77
# File 'lib/json_error/base.rb', line 75

def status
  translate(:status, default: DEFAULT_STATUS)
end

#to_json(*args) ⇒ Object



79
80
81
# File 'lib/json_error/base.rb', line 79

def to_json(*args)
  visible_properties_hash.to_json(*args)
end