Class: AwesomeErrors::Errors

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable
Defined in:
lib/awesome_errors/errors.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeErrors



15
16
17
# File 'lib/awesome_errors/errors.rb', line 15

def initialize
  @errors = Set.new
end

Instance Attribute Details

#errorsObject (readonly)

Returns the value of attribute errors.



13
14
15
# File 'lib/awesome_errors/errors.rb', line 13

def errors
  @errors
end

Instance Method Details

#[](key) ⇒ Object



19
20
21
# File 'lib/awesome_errors/errors.rb', line 19

def [](key)
  @errors.filter_map { |error| error.message if error.key == key }
end

#add(key, **options) ⇒ Object



27
28
29
30
31
32
# File 'lib/awesome_errors/errors.rb', line 27

def add(key, **options)
  error = Error.new(key: key.to_sym, **options)
  @errors << error

  error
end

#as_json(options = {}) ⇒ Object



44
45
46
# File 'lib/awesome_errors/errors.rb', line 44

def as_json(options = {})
  to_hash(full_messages: options[:full_messages] || false)
end

#full_messagesObject



70
71
72
# File 'lib/awesome_errors/errors.rb', line 70

def full_messages
  errors.map(&:full_message)
end

#group_by_keyObject



55
56
57
# File 'lib/awesome_errors/errors.rb', line 55

def group_by_key
  errors.group_by(&:key)
end

#import(error) ⇒ Object



40
41
42
# File 'lib/awesome_errors/errors.rb', line 40

def import(error)
  @errors << error
end

#keysObject



23
24
25
# File 'lib/awesome_errors/errors.rb', line 23

def keys
  @errors.map(&:key).uniq.freeze
end

#merge!(other) ⇒ Object



34
35
36
37
38
# File 'lib/awesome_errors/errors.rb', line 34

def merge!(other)
  other.errors.each do |error|
    import(error)
  end
end

#messagesObject



59
60
61
62
63
64
# File 'lib/awesome_errors/errors.rb', line 59

def messages
  hash = to_hash
  hash.default = [].freeze
  hash.freeze
  hash
end

#messages_for(key) ⇒ Object



66
67
68
# File 'lib/awesome_errors/errors.rb', line 66

def messages_for(key)
  @errors.filter_map { |error| error.message if error.key == key }
end

#to_hash(full_messages: false) ⇒ Object



48
49
50
51
52
53
# File 'lib/awesome_errors/errors.rb', line 48

def to_hash(full_messages: false)
  message_method = full_messages ? :full_message : :message
  group_by_key.transform_values do |err_objects|
    err_objects.map(&message_method)
  end
end