Module: Formtastic::Inputs::Base::Validations
Defined Under Namespace
Classes: IndeterminableMaximumAttributeError, IndeterminableMinimumAttributeError
Instance Method Summary
collapse
Instance Method Details
#autofocus? ⇒ Boolean
179
180
181
182
183
|
# File 'lib/formtastic/inputs/base/validations.rb', line 179
def autofocus?
opt_autofocus = options[:input_html] && options[:input_html][:autofocus]
!!opt_autofocus
end
|
#column_limit ⇒ Object
185
186
187
|
# File 'lib/formtastic/inputs/base/validations.rb', line 185
def column_limit
column.limit if column? && column.respond_to?(:limit)
end
|
#limit ⇒ Object
189
190
191
|
# File 'lib/formtastic/inputs/base/validations.rb', line 189
def limit
validation_limit || column_limit
end
|
#not_required_through_negated_validation! ⇒ Object
167
168
169
|
# File 'lib/formtastic/inputs/base/validations.rb', line 167
def not_required_through_negated_validation!
@not_required_through_negated_validation = true
end
|
#not_required_through_negated_validation? ⇒ Boolean
163
164
165
|
# File 'lib/formtastic/inputs/base/validations.rb', line 163
def not_required_through_negated_validation?
@not_required_through_negated_validation
end
|
#optional? ⇒ Boolean
175
176
177
|
# File 'lib/formtastic/inputs/base/validations.rb', line 175
def optional?
!required?
end
|
#required? ⇒ Boolean
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
# File 'lib/formtastic/inputs/base/validations.rb', line 132
def required?
return false if options[:required] == false
return true if options[:required] == true
return false if not_required_through_negated_validation?
if validations?
validations.select { |validator|
if validator.options.key?(:on)
return false if (validator.options[:on] != :save) && ((object.new_record? && validator.options[:on] != :create) || (!object.new_record? && validator.options[:on] != :update))
end
case validator.kind
when :presence
true
when :inclusion
validator.options[:allow_blank] != true
when :length
validator.options[:allow_blank] != true &&
validator.options[:minimum].to_i > 0 ||
validator.options[:within].try(:first).to_i > 0
else
false
end
}.any?
else
return responds_to_global_required? && !!builder.all_fields_required_by_default
end
end
|
#required_attribute? ⇒ Boolean
159
160
161
|
# File 'lib/formtastic/inputs/base/validations.rb', line 159
def required_attribute?
required? && builder.use_required_attribute
end
|
#responds_to_global_required? ⇒ Boolean
171
172
173
|
# File 'lib/formtastic/inputs/base/validations.rb', line 171
def responds_to_global_required?
true
end
|
#validation_integer_only? ⇒ Boolean
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/formtastic/inputs/base/validations.rb', line 117
def validation_integer_only?
validation = validations? && validations.find do |validation|
validation.kind == :numericality
end
if validation
validation.options[:only_integer]
else
false
end
end
|
#validation_limit ⇒ Object
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/formtastic/inputs/base/validations.rb', line 52
def validation_limit
validation = validations? && validations.find do |validation|
validation.kind == :length
end
if validation
validation.options[:maximum] || (validation.options[:within].present? ? validation.options[:within].max : nil)
else
nil
end
end
|
#validation_max ⇒ Object
Prefer :less_than_or_equal_to over :less_than, for no particular reason.
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/formtastic/inputs/base/validations.rb', line 86
def validation_max
validation = validations? && validations.find do |validation|
validation.kind == :numericality
end
if validation
raise IndeterminableMaximumAttributeError if validation.options[:less_than] && column? && [:float, :decimal].include?(column.type)
if validation.options[:less_than_or_equal_to]
return (validation.options[:less_than_or_equal_to].call(object)) if validation.options[:less_than_or_equal_to].kind_of?(Proc)
return (validation.options[:less_than_or_equal_to])
end
if validation.options[:less_than]
return ((validation.options[:less_than].call(object)) - 1) if validation.options[:less_than].kind_of?(Proc)
return (validation.options[:less_than] - 1)
end
end
end
|
#validation_min ⇒ Object
Prefer :greater_than_or_equal_to over :greater_than, for no particular reason.
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/formtastic/inputs/base/validations.rb', line 64
def validation_min
validation = validations? && validations.find do |validation|
validation.kind == :numericality
end
if validation
raise IndeterminableMinimumAttributeError if validation.options[:greater_than] && column? && [:float, :decimal].include?(column.type)
if validation.options[:greater_than_or_equal_to]
return (validation.options[:greater_than_or_equal_to].call(object)) if validation.options[:greater_than_or_equal_to].kind_of?(Proc)
return (validation.options[:greater_than_or_equal_to])
end
if validation.options[:greater_than]
return (validation.options[:greater_than].call(object) + 1) if validation.options[:greater_than].kind_of?(Proc)
return (validation.options[:greater_than] + 1)
end
end
end
|
#validation_step ⇒ Object
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/formtastic/inputs/base/validations.rb', line 106
def validation_step
validation = validations? && validations.find do |validation|
validation.kind == :numericality
end
if validation
validation.options[:step] || (1 if validation_integer_only?)
else
nil
end
end
|
#validations ⇒ Object
24
25
26
27
28
29
30
31
32
|
# File 'lib/formtastic/inputs/base/validations.rb', line 24
def validations
@validations ||= if object && object.class.respond_to?(:validators_on)
object.class.validators_on(attributized_method_name).select do |validator|
validator_relevant?(validator)
end
else
nil
end
end
|
#validations? ⇒ Boolean
128
129
130
|
# File 'lib/formtastic/inputs/base/validations.rb', line 128
def validations?
validations != nil
end
|
#validator_relevant?(validator) ⇒ Boolean
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/formtastic/inputs/base/validations.rb', line 34
def validator_relevant?(validator)
return true unless validator.options.key?(:if) || validator.options.key?(:unless)
conditional = validator.options.key?(:if) ? validator.options[:if] : validator.options[:unless]
result = if conditional.respond_to?(:call)
conditional.call(object)
elsif conditional.is_a?(::Symbol) && object.respond_to?(conditional)
object.send(conditional)
else
conditional
end
result = validator.options.key?(:unless) ? !result : !!result
not_required_through_negated_validation! if !result && [:presence, :inclusion, :length].include?(validator.kind)
result
end
|