class Datacaster::Base
Public Class Methods
merge_errors(left, right)
click to toggle source
# File lib/datacaster/base.rb, line 3 def self.merge_errors(left, right) add_error_to_base = ->(hash, error) { hash[:base] ||= [] hash[:base] = merge_errors(hash[:base], error) hash } return [] if left.nil? && right.nil? return right if left.nil? return left if right.nil? result = case [left.class, right.class] when [Array, Array] left | right when [Array, Hash] add_error_to_base.(right, left) when [Hash, Hash] (left.keys | right.keys).map do |k| [k, merge_errors(left[k], right[k])] end.to_h when [Hash, Array] add_error_to_base.(left, right) else raise ArgumentError.new("Expected failures to be Arrays or Hashes, left: #{left.inspect}, right: #{right.inspect}") end result end
Public Instance Methods
&(other)
click to toggle source
# File lib/datacaster/base.rb, line 32 def &(other) AndNode.new(self, other) end
*(other)
click to toggle source
# File lib/datacaster/base.rb, line 40 def *(other) AndWithErrorAggregationNode.new(self, other) end
call(object)
click to toggle source
# File lib/datacaster/base.rb, line 48 def call(object) Datacaster.ValidResult(object) end
inspect()
click to toggle source
# File lib/datacaster/base.rb, line 52 def inspect "#<Datacaster::Base>" end
then(other)
click to toggle source
# File lib/datacaster/base.rb, line 44 def then(other) ThenNode.new(self, other) end
|(other)
click to toggle source
# File lib/datacaster/base.rb, line 36 def |(other) OrNode.new(self, other) end
Private Instance Methods
shortcut_definition(definition)
click to toggle source
Translates hashes like {a: <IntegerChecker>} to <HashSchema {a: <IntegerChecker>}>
and arrays like [<IntegerChecker>] to <ArraySchema <IntegerChecker>>
# File lib/datacaster/base.rb, line 60 def shortcut_definition(definition) case definition when Datacaster::Base definition when Array if definition.length != 1 raise ArgumentError.new("Datacaster: shorcut array definitions must have exactly 1 element in the array, e.g. [integer]") end ArraySchema.new(definition.first) when Hash HashSchema.new(definition) else return definition if definition.respond_to?(:call) raise ArgumentError.new("Datacaster: Unknown definition #{definition.inspect}, which doesn't respond to #call") end end