module Formbuilder::Entry
Attributes
only_validate_page[RW]
skip_validation[RW]
Public Instance Methods
audit_responses()
click to toggle source
Audits get run explicitly.
# File lib/formbuilder/entry.rb, line 177 def audit_responses form.response_fields.each do |response_field| response_field.audit_response(self.response_value(response_field), get_responses) end mark_responses_as_changed! end
calculate_responses_text()
click to toggle source
# File lib/formbuilder/entry.rb, line 147 def calculate_responses_text return unless self.respond_to?(:"#{responses_column}_text=") self.send(:"#{responses_column}_text=", get_responses.select { |k, v| Integer(k) rescue nil }.values.join(' ')) end
calculate_sortable_values()
click to toggle source
for manual use, maybe when migrating
# File lib/formbuilder/entry.rb, line 153 def calculate_sortable_values response_fieldable.input_fields.each do |response_field| if (x = response_value(response_field)).present? get_responses["#{response_field.id}_sortable_value"] = response_field.sortable_value(x) end end mark_responses_as_changed! end
destroy_response(response_field)
click to toggle source
# File lib/formbuilder/entry.rb, line 136 def destroy_response(response_field) response_field.before_response_destroyed(self) id = response_field.id.to_s set_responses get_responses.reject { |k, v| k.in?([id, "#{id}_sortable_value"]) } mark_responses_as_changed! end
error_for(response_field)
click to toggle source
# File lib/formbuilder/entry.rb, line 143 def error_for(response_field) Array(self.errors.messages[:"#{responses_column}_#{response_field.id}"]).first end
errors_on_page?(x)
click to toggle source
# File lib/formbuilder/entry.rb, line 52 def errors_on_page?(x) pages_with_errors[x - 1] # 0-indexed end
first_page_with_errors()
click to toggle source
# File lib/formbuilder/entry.rb, line 38 def first_page_with_errors if (i = pages_with_errors.find_index { |x| x == true }) i + 1 else nil end end
get_responses()
click to toggle source
# File lib/formbuilder/entry.rb, line 64 def get_responses send(responses_column) end
mark_responses_as_changed!()
click to toggle source
# File lib/formbuilder/entry.rb, line 72 def mark_responses_as_changed! send("#{responses_column}_will_change!") end
normalize_responses()
click to toggle source
Normalizations get run before validation.
# File lib/formbuilder/entry.rb, line 164 def normalize_responses return if form.blank? form.response_fields.each do |response_field| if (x = self.response_value(response_field)) response_field.normalize_response(x, get_responses) end end mark_responses_as_changed! end
pages_with_errors()
click to toggle source
# File lib/formbuilder/entry.rb, line 46 def pages_with_errors form.response_fields_by_page.map do |page| page.find { |response_field| self.error_for(response_field).present? } ? true : false end end
response_value(response_field)
click to toggle source
# File lib/formbuilder/entry.rb, line 101 def response_value(response_field) value = get_responses[response_field.id.to_s] if value response_field.serialized ? YAML::load(value) : value elsif !value && response_field.serialized && response_field.field_type != 'checkboxes' {} else # for checkboxes, we need to know the difference between no value and none selected nil end end
responses_column()
click to toggle source
# File lib/formbuilder/entry.rb, line 56 def responses_column @responses_column || 'responses' end
responses_column=(x)
click to toggle source
# File lib/formbuilder/entry.rb, line 60 def responses_column=(x) @responses_column = x end
responses_column_changed?()
click to toggle source
# File lib/formbuilder/entry.rb, line 76 def responses_column_changed? send("#{responses_column}_changed?") end
responses_column_was()
click to toggle source
# File lib/formbuilder/entry.rb, line 80 def responses_column_was send("#{responses_column}_was") end
save_response(raw_value, response_field, response_field_params = {})
click to toggle source
# File lib/formbuilder/entry.rb, line 122 def save_response(raw_value, response_field, response_field_params = {}) value = response_field.transform_raw_value(raw_value, self, response_field_params: response_field_params) if value.present? get_responses["#{response_field.id}"] = response_field.serialized ? value.to_yaml : value get_responses["#{response_field.id}_sortable_value"] = response_field.sortable_value(value) else get_responses.delete("#{response_field.id}") get_responses.delete("#{response_field.id}_sortable_value") end mark_responses_as_changed! end
save_responses(response_field_params, response_fields, opts = {})
click to toggle source
# File lib/formbuilder/entry.rb, line 113 def save_responses(response_field_params, response_fields, opts = {}) set_responses({}) unless opts[:partial_update] response_field_params ||= {} response_fields.select { |rf| rf.input_field }.each do |response_field| self.save_response(response_field_params[response_field.id.to_s], response_field, response_field_params) end end
set_responses(x)
click to toggle source
# File lib/formbuilder/entry.rb, line 68 def set_responses(x) send("#{responses_column}=", x) end
valid_page?(x)
click to toggle source
# File lib/formbuilder/entry.rb, line 33 def valid_page?(x) self.valid? !self.errors_on_page?(x) end
value_present?(response_field)
click to toggle source
# File lib/formbuilder/entry.rb, line 84 def value_present?(response_field) value = self.response_value(response_field) # value isn't blank (ignore hashes) return true if (value && value.present? && !value.is_a?(Hash)) # no options are available return true if (response_field.options_field && Array(response_field.field_options["options"]).empty?) # there is at least one value (for hashes) # reject select fields return true if (value.is_a?(Hash) && value.reject { |k, v| k.in? ['am_pm', 'country'] }.find { |k, v| v.present? }) # otherwise, it's not present return false end