/
errors.rb
71 lines (59 loc) · 1.67 KB
/
errors.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# encoding: utf-8
module Warden
class Proxy
# :api: public
def errors
@env['warden.errors'] ||= Errors.new
end
# Lifted from DataMapper's dm-validations plugin :)
# @author Guy van den Berg
# @since DM 0.9
class Errors
include Enumerable
# Clear existing authentication errors.
def clear!
errors.clear
end
# Add a authentication error. Use the field_name :general if the errors does
# not apply to a specific field of the Resource.
#
# @param <Symbol> field_name the name of the field that caused the error
# @param <String> message the message to add
def add(field_name, message)
(errors[field_name] ||= []) << message
end
# Collect all errors into a single list.
def full_messages
errors.inject([]) do |list,pair|
list += pair.last
end
end
# Return authentication errors for a particular field_name.
#
# @param <Symbol> field_name the name of the field you want an error for
def on(field_name)
errors_for_field = errors[field_name]
blank?(errors_for_field) ? nil : errors_for_field
end
def each
errors.map.each do |k,v|
next if blank?(v)
yield(v)
end
end
def empty?
entries.empty?
end
def method_missing(meth, *args, &block)
errors.send(meth, *args, &block)
end
private
def errors
@errors ||= {}
end
def blank?(thing)
thing.nil? || thing == "" || (thing.respond_to?(:empty?) && thing.empty?)
end
end # class Errors
end # Proxy
end # Warden