Sha256: 85443bb137b566a61871c8def8351126203daad48453d60a27575fc392f52dda
Contents?: true
Size: 1.75 KB
Versions: 2
Compression:
Stored size: 1.75 KB
Contents
# frozen_string_literal: true module Attribeauty class Validator def self.run(name, type, original_val, **args) new(name, type, original_val, **args).run end attr_reader :original_val, :errors, :name, :type, :required, :default, :excludes, :value, :valid def initialize(name, original_val, type = nil, **args) @name = name @type = type @original_val = original_val @default = args[:default] args.delete_if { |key, value| key == :required && value == false } @required = args[:required] @excludes = args[:exclude_if] @valid = true @errors = [] end def run handle_missing_original_val! handle_missing_required! handle_missing_type set_default cast_value handle_excludes self rescue ValueInvalidError self end def valid? valid end def required? required end private def handle_missing_original_val! return unless !required? && original_val.nil? @valid = false raise ValueInvalidError end # only returning errors if required is missing, not if nil?, or :empty? def handle_missing_required! return unless required? && original_val.nil? errors << "#{name} required" @valid = false raise ValueInvalidError end def handle_missing_type @value = original_val if type.nil? end def set_default return unless original_val.nil? && !default.nil? @original_val = default end def cast_value @value ||= TypeCaster.run(original_val, type) end def handle_excludes return if excludes.nil? || !valid? @valid = ![*excludes].flatten.any? { |exclude| value.public_send(exclude) } end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
attribeauty-0.4.2 | lib/attribeauty/validator.rb |
attribeauty-0.4.1 | lib/attribeauty/validator.rb |