2016-08-01 09:50:01 -05:00
|
|
|
class AnswerFormatValidator < ActiveModel::EachValidator
|
|
|
|
def validate_each(record, attribute, value)
|
|
|
|
send(record.question.input_type, record, attribute, value)
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def text record, attribute, value
|
2016-08-01 16:27:17 -05:00
|
|
|
clean_val = value.to_s.strip
|
|
|
|
return if clean_val.length.between?(1, 1000)
|
2016-08-01 09:50:01 -05:00
|
|
|
|
2016-08-01 16:27:17 -05:00
|
|
|
if clean_val.blank?
|
2016-08-01 09:50:01 -05:00
|
|
|
record.errors[attribute] << (options[:message] || "Please enter an answer.")
|
|
|
|
end
|
|
|
|
|
2016-08-01 16:27:17 -05:00
|
|
|
if clean_val.length > 1000
|
2016-08-04 20:01:17 -05:00
|
|
|
record.errors[attribute] << (options[:message] || "The character limit for this answer is 1000.")
|
2016-08-01 09:50:01 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def radio record, attribute, value
|
2016-08-01 16:27:17 -05:00
|
|
|
return unless value.to_s.strip.blank?
|
2016-08-01 09:50:01 -05:00
|
|
|
|
|
|
|
record.errors[attribute] << (options[:message] || "Please select an answer.")
|
|
|
|
end
|
|
|
|
|
|
|
|
def checkbox record, attribute, value
|
2016-08-01 16:27:17 -05:00
|
|
|
return unless value.nil? || Array(value).join.blank?
|
2016-08-01 09:50:01 -05:00
|
|
|
|
|
|
|
record.errors[attribute] << (options[:message] || "Please select an answer.")
|
|
|
|
end
|
|
|
|
|
|
|
|
def live_code record, attribute, value
|
2016-08-01 16:27:17 -05:00
|
|
|
return unless value.nil? || value.values.join.blank?
|
2016-08-01 09:50:01 -05:00
|
|
|
|
2016-08-04 20:01:17 -05:00
|
|
|
record.errors[attribute] << (options[:message] || live_code_error_message(value))
|
|
|
|
end
|
|
|
|
|
|
|
|
def live_code_text record, attribute, value
|
|
|
|
return if value.present? && live_code_text_value_check(value)
|
|
|
|
|
|
|
|
record.errors[attribute] << (options[:message] || live_code_text_error_message(value))
|
|
|
|
end
|
|
|
|
|
|
|
|
#################################
|
|
|
|
|
|
|
|
def live_code_text_error_message value
|
|
|
|
return 'You must write code in one of the above textareas to progress.' if value.nil?
|
|
|
|
|
|
|
|
code_present = value.values_at(:html, :css, :js).join.present?
|
|
|
|
reason_present = value[:text].present?
|
|
|
|
later_present = value.keys.count == 1
|
|
|
|
return 'Please check that you will come back to complete the code example.' if later_present
|
|
|
|
return 'You must write code in one of the above textareas to progress.' unless code_present
|
|
|
|
return 'You must provide an answer in the reason field.' unless reason_present
|
|
|
|
end
|
|
|
|
|
|
|
|
def live_code_error_message value
|
|
|
|
if value.present? && value.keys.count == 1
|
|
|
|
return "Please check that you will come back to complete the code example."
|
|
|
|
end
|
|
|
|
"You must write code in one of the above textareas to progress."
|
|
|
|
end
|
|
|
|
|
|
|
|
def live_code_text_value_check value
|
|
|
|
later_present = value[:later].present? && value.keys.count == 1
|
|
|
|
code_present = value.values_at(:html, :css, :js).join.present?
|
|
|
|
reason_present = value[:text].present?
|
|
|
|
|
|
|
|
later_present || (code_present && reason_present)
|
2016-08-01 09:50:01 -05:00
|
|
|
end
|
|
|
|
end
|