Sha256: b18557d1251a777597be4f8edaff327ee66dce48cc74bacceeadd29be25d6d54
Contents?: true
Size: 1.16 KB
Versions: 4
Compression:
Stored size: 1.16 KB
Contents
module Datacaster module Utils extend self def deep_freeze(value, copy: true) Ractor.make_shareable(value, copy:) end def 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 def pickable?(value) is_literal = ->(v) { [String, Symbol, Integer].any? { |c| v.is_a?(c) } } is_literal.(value) || value.is_a?(Array) && !value.empty? && value.all? { |v| is_literal.(v) } end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
datacaster-4.1.0 | lib/datacaster/utils.rb |
datacaster-4.0.1 | lib/datacaster/utils.rb |
datacaster-3.3.1 | lib/datacaster/utils.rb |
datacaster-3.3.0 | lib/datacaster/utils.rb |