Module: Formtastic::Inputs::Base::Validations
Defined Under Namespace
Classes: IndeterminableMaximumAttributeError, IndeterminableMinimumAttributeError
Instance Method Summary
collapse
Instance Method Details
#autofocus? ⇒ Boolean
178
179
180
181
182
|
# File 'lib/formtastic/inputs/base/validations.rb', line 178
def autofocus?
opt_autofocus = options[:input_html] && options[:input_html][:autofocus]
!!opt_autofocus
end
|
#column_limit ⇒ Object
184
185
186
|
# File 'lib/formtastic/inputs/base/validations.rb', line 184
def column_limit
column.limit if column? && column.respond_to?(:limit)
end
|
#limit ⇒ Object
188
189
190
|
# File 'lib/formtastic/inputs/base/validations.rb', line 188
def limit
validation_limit || column_limit
end
|
#not_required_through_negated_validation! ⇒ Object
166
167
168
|
# File 'lib/formtastic/inputs/base/validations.rb', line 166
def not_required_through_negated_validation!
@not_required_through_negated_validation = true
end
|
#not_required_through_negated_validation? ⇒ Boolean
162
163
164
|
# File 'lib/formtastic/inputs/base/validations.rb', line 162
def not_required_through_negated_validation?
@not_required_through_negated_validation
end
|
#optional? ⇒ Boolean
174
175
176
|
# File 'lib/formtastic/inputs/base/validations.rb', line 174
def optional?
!required?
end
|
#readonly? ⇒ Boolean
192
193
194
|
# File 'lib/formtastic/inputs/base/validations.rb', line 192
def readonly?
readonly_from_options? || readonly_attribute?
end
|
#readonly_attribute? ⇒ Boolean
196
197
198
199
200
201
202
|
# File 'lib/formtastic/inputs/base/validations.rb', line 196
def readonly_attribute?
object_class = self.object.class
object_class.respond_to?(:readonly_attributes) &&
self.object.persisted? &&
column.respond_to?(:name) &&
object_class.readonly_attributes.include?(column.name.to_s)
end
|
#readonly_from_options? ⇒ Boolean
204
205
206
|
# File 'lib/formtastic/inputs/base/validations.rb', line 204
def readonly_from_options?
options[:input_html] && options[:input_html][:readonly]
end
|
#required? ⇒ Boolean
130
131
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
|
# File 'lib/formtastic/inputs/base/validations.rb', line 130
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.any? { |validator|
if validator.options.key?(:on)
validator_on = Array(validator.options[:on])
next false if (validator_on.exclude?(:save)) && ((object.new_record? && validator_on.exclude?(:create)) || (!object.new_record? && validator_on.exclude?(: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
}
else
return responds_to_global_required? && !!builder.all_fields_required_by_default
end
end
|
#required_attribute? ⇒ Boolean
158
159
160
|
# File 'lib/formtastic/inputs/base/validations.rb', line 158
def required_attribute?
required? && builder.use_required_attribute
end
|
#responds_to_global_required? ⇒ Boolean
170
171
172
|
# File 'lib/formtastic/inputs/base/validations.rb', line 170
def responds_to_global_required?
true
end
|
#validation_integer_only? ⇒ Boolean
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/formtastic/inputs/base/validations.rb', line 115
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
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/formtastic/inputs/base/validations.rb', line 54
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
|
# 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 option_value(validation.options[:less_than_or_equal_to], object)
end
if validation.options[:less_than]
return option_value(validation.options[:less_than], object) - 1
end
end
end
|
#validation_min ⇒ Object
Prefer :greater_than_or_equal_to over :greater_than, for no particular reason.
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 66
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 option_value(validation.options[:greater_than_or_equal_to], object)
end
if validation.options[:greater_than]
return option_value(validation.options[:greater_than], object) + 1
end
end
end
|
#validation_step ⇒ Object
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/formtastic/inputs/base/validations.rb', line 104
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
126
127
128
|
# File 'lib/formtastic/inputs/base/validations.rb', line 126
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
51
52
|
# 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.arity > 0
conditional.call(object)
elsif conditional.respond_to?(:call) && conditional.arity == 0
object.instance_exec(&conditional)
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
|