module EnumAttributesValidation

Constants

VERSION

Public Instance Methods

check_enum_invalid_attributes() click to toggle source
# File lib/enum_attributes_validation.rb, line 17
def check_enum_invalid_attributes
  if enum_invalid_attributes.present?
    enum_invalid_attributes.each do |key, opts|
      if opts[:message]
        self.errors.add(:base, opts[:message])
      else
        self.errors.add(key, :invalid_enum, value: opts[:value], valid_values: self.class.send(key.to_s.pluralize).keys.sort.join(', '), default: "value provided (#{opts[:value]}) is invalid")
      end
    end
  end
end
enum_invalid_attributes() click to toggle source
# File lib/enum_attributes_validation.rb, line 10
def enum_invalid_attributes
  @enum_invalid_attributes ||= {}
end
validate_enum_attribute(*attributes) click to toggle source
# File lib/enum_attributes_validation.rb, line 45
def validate_enum_attribute(*attributes)
  self.validate_enum_attributes(*attributes)
end
validate_enum_attributes(*attributes, **opts) click to toggle source
# File lib/enum_attributes_validation.rb, line 31
def validate_enum_attributes(*attributes, **opts)
  attributes.each do |attribute|
    string_attribute = attribute.to_s

    define_method (string_attribute+"=").to_sym do |argument|
      unless argument.nil?
        string_argument = argument.to_s
        self[string_attribute]                  = string_argument                    if     self.class.send(string_attribute.pluralize).keys.include?(string_argument)
        self.enum_invalid_attributes[attribute] = opts.merge(value: string_argument) unless self.class.send(string_attribute.pluralize).keys.include?(string_argument)
      end
    end
  end
end