module Enumerize::Base
def self.included(base)
def self.included(base) base.extend ClassMethods base.singleton_class.prepend ClassMethods::Hook if base.respond_to?(:validate) base.validate :_validate_enumerized_attributes end end
def _enumerized_values_for_validation
def _enumerized_values_for_validation @_enumerized_values_for_validation ||= {} end
def _set_default_value_for_enumerized_attribute(attr)
def _set_default_value_for_enumerized_attribute(attr) return if attr.default_value.nil? begin if respond_to?(attr.name) attr_value = public_send(attr.name) else return end value_for_validation = _enumerized_values_for_validation[attr.name.to_s] if (!attr_value || attr_value.empty?) && (!value_for_validation || value_for_validation.empty?) value = Utils.call_if_callable(attr.default_value, self) public_send("#{attr.name}=", value) end rescue ActiveModel::MissingAttributeError end end
def _set_default_value_for_enumerized_attributes
def _set_default_value_for_enumerized_attributes self.class.enumerized_attributes.each do |attr| _set_default_value_for_enumerized_attribute(attr) end end
def _validate_enumerized_attributes
def _validate_enumerized_attributes self.class.enumerized_attributes.each do |attr| skip_validations = Utils.call_if_callable(attr.skip_validations_value, self) next if skip_validations value = read_attribute_for_validation(attr.name) next if value.blank? if attr.kind_of? Multiple errors.add attr.name unless value.respond_to?(:all?) && value.all? { |v| v.blank? || attr.find_value(v) } else errors.add attr.name, :inclusion unless attr.find_value(value) end end end
def initialize(...)
def initialize(...) super _set_default_value_for_enumerized_attributes end
def read_attribute_for_validation(key)
def read_attribute_for_validation(key) key = key.to_s if _enumerized_values_for_validation.has_key?(key) _enumerized_values_for_validation[key] elsif defined?(super) super else send(key) end end