module Datacaster::Predefined
Public Instance Methods
absent()
click to toggle source
'Meta' types
# File lib/datacaster/predefined.rb, line 51 def absent check('Absent', 'must be absent') { |x| x == Datacaster.absent } end
any()
click to toggle source
# File lib/datacaster/predefined.rb, line 55 def any check('Any', 'must be set') { |x| x != Datacaster.absent } end
array()
click to toggle source
# File lib/datacaster/predefined.rb, line 111 def array check('Array', 'must be array') { |x| x.is_a?(Array) } end
array_schema(element_caster)
click to toggle source
# File lib/datacaster/predefined.rb, line 33 def array_schema(element_caster) ArraySchema.new(element_caster) end
cast(name = 'Anonymous', &block)
click to toggle source
Base
types
# File lib/datacaster/predefined.rb, line 7 def cast(name = 'Anonymous', &block) Caster.new(name, &block) end
check(name = 'Anonymous', error = 'is invalid', &block)
click to toggle source
# File lib/datacaster/predefined.rb, line 11 def check(name = 'Anonymous', error = 'is invalid', &block) Checker.new(name, error, &block) end
compare(value, name = 'Anonymous', error = nil)
click to toggle source
# File lib/datacaster/predefined.rb, line 15 def compare(value, name = 'Anonymous', error = nil) Comparator.new(value, name, error) end
decimal(digits = 8)
click to toggle source
Strict types
# File lib/datacaster/predefined.rb, line 102 def decimal(digits = 8) Trier.new('Decimal', 'must be decimal', [ArgumentError, TypeError]) do |x| # strictly validate format of string, BigDecimal() doesn't do that Float(x) BigDecimal(x, digits) end end
float()
click to toggle source
# File lib/datacaster/predefined.rb, line 115 def float check('Float', 'must be float') { |x| x.is_a?(Float) } end
hash_schema(fields)
click to toggle source
# File lib/datacaster/predefined.rb, line 37 def hash_schema(fields) HashSchema.new(fields) end
hash_value()
click to toggle source
'hash' is a bad method name, because it will overwrite built in Object#hash
# File lib/datacaster/predefined.rb, line 120 def hash_value check('Hash', 'must be hash') { |x| x.is_a?(Hash) } end
hash_with_symbolized_keys()
click to toggle source
# File lib/datacaster/predefined.rb, line 124 def hash_with_symbolized_keys hash_value & transform("SymbolizeKeys") { |x| x.symbolize_keys } end
integer()
click to toggle source
# File lib/datacaster/predefined.rb, line 128 def integer check('Integer', 'must be integer') { |x| x.is_a?(Integer) } end
integer32()
click to toggle source
# File lib/datacaster/predefined.rb, line 132 def integer32 integer & check('FourBytes', 'out of range') { |x| x.abs <= 2_147_483_647 } end
iso8601()
click to toggle source
Form request types
# File lib/datacaster/predefined.rb, line 146 def iso8601 string & try('ISO8601', 'must be iso8601 string', catched_exception: [ArgumentError, TypeError]) { |x| DateTime.iso8601(x) } end
must_be(klass)
click to toggle source
# File lib/datacaster/predefined.rb, line 92 def must_be(klass) check('MustBe', "must be #{klass.inspect}") { |x| x.is_a?(klass) } end
non_empty_string()
click to toggle source
# File lib/datacaster/predefined.rb, line 140 def non_empty_string string & check('NonEmptyString', 'must be present') { |x| !x.empty? } end
optional(base)
click to toggle source
# File lib/datacaster/predefined.rb, line 96 def optional(base) absent | base end
optional_param(base)
click to toggle source
# File lib/datacaster/predefined.rb, line 175 def optional_param(base) transform_if_present("optional_param(#{base.inspect})") { |x| x == '' ? Datacaster::Absent.instance : x } & (absent | base) end
pass()
click to toggle source
# File lib/datacaster/predefined.rb, line 67 def pass transform('Pass', &:itself) end
pick(*keys)
click to toggle source
# File lib/datacaster/predefined.rb, line 71 def pick(*keys) must_be(Enumerable) & transform("Picker") { |value| result = keys.map do |key| if value.respond_to?(:key?) && !value.key?(key) Datacaster.absent elsif value.respond_to?(:length) && key.is_a?(Integer) && key > 0 && key >= value.length Datacaster.absent else value[key] end end keys.length == 1 ? result.first : result } end
remove()
click to toggle source
# File lib/datacaster/predefined.rb, line 63 def remove transform('Remove') { Datacaster.absent } end
responds_to(method)
click to toggle source
# File lib/datacaster/predefined.rb, line 88 def responds_to(method) check('RespondsTo', "must respond to #{method.inspect}") { |x| x.respond_to?(method) } end
string()
click to toggle source
# File lib/datacaster/predefined.rb, line 136 def string check('String', 'must be string') { |x| x.is_a?(String) } end
to_boolean()
click to toggle source
# File lib/datacaster/predefined.rb, line 151 def to_boolean cast('ToBoolean') do |x| if ['true', '1', true].include?(x) Datacaster.ValidResult(true) elsif ['false', '0', false].include?(x) Datacaster.ValidResult(false) else Datacaster.ErrorResult(['must be boolean']) end end end
to_float()
click to toggle source
# File lib/datacaster/predefined.rb, line 163 def to_float Trier.new('ToFloat', 'must be float', [ArgumentError, TypeError]) do |x| Float(x) end end
to_integer()
click to toggle source
# File lib/datacaster/predefined.rb, line 169 def to_integer Trier.new('ToInteger', 'must be integer', [ArgumentError, TypeError]) do |x| Integer(x) end end
transform(name = 'Anonymous', &block)
click to toggle source
# File lib/datacaster/predefined.rb, line 19 def transform(name = 'Anonymous', &block) Transformer.new(name, &block) end
transform_if_present(name = 'Anonymous', &block)
click to toggle source
# File lib/datacaster/predefined.rb, line 23 def transform_if_present(name = 'Anonymous', &block) raise 'Expected block' unless block_given? Transformer.new(name) { |v| v == Datacaster.absent ? v : block.(v) } end
transform_to_hash(fields)
click to toggle source
# File lib/datacaster/predefined.rb, line 41 def transform_to_hash(fields) HashMapper.new(fields) end
transform_to_value(value)
click to toggle source
# File lib/datacaster/predefined.rb, line 59 def transform_to_value(value) transform('ToValue') { value } end
try(name = 'Anonymous', error = 'is invalid', catched_exception:, &block)
click to toggle source
# File lib/datacaster/predefined.rb, line 29 def try(name = 'Anonymous', error = 'is invalid', catched_exception:, &block) Trier.new(name, error, catched_exception, &block) end
validate(active_model_validations, name = 'Anonymous')
click to toggle source
# File lib/datacaster/predefined.rb, line 45 def validate(active_model_validations, name = 'Anonymous') Validator.new(active_model_validations, name) end