class Isomorfeus::Props::Validator
Public Class Methods
new(source_class, prop, value, options)
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 4 def initialize(source_class, prop, value, options) @c = source_class @p = prop @v = value @o = options end
Public Instance Methods
validate!()
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 11 def validate! ensured = ensure! unless ensured set_default_value cast! type! end run_checks! true end
validated_value()
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 22 def validated_value validate! @v end
Private Instance Methods
c_direction(v)
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 129 def c_direction(v) Isomorfeus.raise_error(message: "#{@c}: #{@p} is positive") if v == :negative && @v >= 0 Isomorfeus.raise_error(message: "#{@c}: #{@p} is negative") if v == :positive && @v < 0 end
c_gt(v)
click to toggle source
specific validations
# File lib/isomorfeus/props/validator.rb, line 93 def c_gt(v) Isomorfeus.raise_error(message: "#{@c}: #{@p} not greater than #{v}!") unless @v > v end
c_keys(v)
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 101 def c_keys(v) Isomorfeus.raise_error(message: "#{@c}: #{@p} keys dont fit!") unless @v.keys.sort == v.sort end
c_lt(v)
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 97 def c_lt(v) Isomorfeus.raise_error(message: "#{@c}: #{@p} not less than #{v}!") unless @v < v end
c_matches(v)
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 109 def c_matches(v) Isomorfeus.raise_error(message: "#{@c}: #{@p} does not match #{v}") unless v.match?(@v) end
c_max(v)
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 113 def c_max(v) Isomorfeus.raise_error(message: "#{@c}: #{@p} is larger than #{v}") unless @v <= v end
c_max_size(v)
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 121 def c_max_size(v) Isomorfeus.raise_error(message: "#{@c}: #{@p} is larger than #{v}") unless @v.size <= v end
c_min(v)
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 117 def c_min(v) Isomorfeus.raise_error(message: "#{@c}: #{@p} is smaller than #{v}") unless @v >= v end
c_min_size(v)
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 125 def c_min_size(v) Isomorfeus.raise_error(message: "#{@c}: #{@p} is smaller than #{v}") unless @v.size >= v end
c_size(v)
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 105 def c_size(v) Isomorfeus.raise_error(message: "#{@c}: #{@p} length/size is not #{v}") unless @v.size == v end
c_string_sub_types()
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 138 def c_string_sub_types Isomorfeus.raise_error(message: "#{@c}: #{@p} must be a String") unless @v.class == String case @o[:type] when :email Isomorfeus.raise_error(message: "#{@c}: #{@p} is not a valid email address") unless @v.match?(/\A[^@\s]+@([^@\s]+\.)+[^@\s]+\z/) when :uri if RUBY_ENGINE == 'opal' %x{ try { new URL(#@v); } catch { #{Isomorfeus.raise_error(message: "#{@c}: #{@p} is not a valid uri")} } } else Isomorfeus.raise_error(message: "#{@c}: #{@p} is not a valid uri") unless @v.match?(/\A#{URI.regexp}\z/) end end end
c_test()
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 134 def c_test Isomorfeus.raise_error(message: "#{@c}: #{@p} test condition check failed") unless @o[:test].call(@v) end
cast!()
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 36 def cast! if @o.key?(:cast) begin @v = case @o[:class] when Integer then @v.to_i when String then @v.to_s when Float then @v.to_f when Array then @v.to_a when Hash then @v.to_h end @v = !!@v if @o[:type] == :boolean rescue Isomorfeus.raise_error(message: "#{@c}: #{@p} cast failed") unless @v.class == @o[:class] end end end
ensure!()
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 53 def ensure! if @o.key?(:ensure) @v = @o[:ensure] unless @v true elsif @o.key?(:ensure_block) @v = @o[:ensure_block].call(@v) true else false end end
run_checks!()
click to toggle source
all other checks
# File lib/isomorfeus/props/validator.rb, line 83 def run_checks! if @o.key?(:validate) @o[:validate].each do |m, l| send('c_' + m, l) end end @o[:validate_block].call(@v) if @o.key?(:validate_block) end
set_default_value()
click to toggle source
basic tests
# File lib/isomorfeus/props/validator.rb, line 31 def set_default_value return unless @v.nil? @v = @o[:default] if @o.key?(:default) end
type!()
click to toggle source
# File lib/isomorfeus/props/validator.rb, line 65 def type! return if @o[:allow_nil] && @v.nil? if @o.key?(:class) Isomorfeus.raise_error(message: "#{@c}: #{@p} class not #{@o[:class]}") unless @v.class == @o[:class] elsif @o.key?(:is_a) Isomorfeus.raise_error(message: "#{@c}: #{@p} is not a #{@o[:is_a]}") unless @v.is_a?(@o[:is_a]) elsif @o.key?(:type) case @o[:type] when :boolean Isomorfeus.raise_error(message: "#{@c}: #{@p} is not a boolean") unless @v.class == TrueClass || @v.class == FalseClass else c_string_sub_types end end end