Sha256: 1355363f463070805d3362e846aabf5f8b2de3c0aff63d76b34d442da2163c4a

Contents?: true

Size: 1.07 KB

Versions: 10

Compression:

Stored size: 1.07 KB

Contents

module Datacaster
  module Utils
    extend self

    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

10 entries across 10 versions & 1 rubygems

Version Path
datacaster-3.2.7 lib/datacaster/utils.rb
datacaster-3.2.6 lib/datacaster/utils.rb
datacaster-3.2.5 lib/datacaster/utils.rb
datacaster-3.2.4 lib/datacaster/utils.rb
datacaster-3.2.3 lib/datacaster/utils.rb
datacaster-3.2.2 lib/datacaster/utils.rb
datacaster-3.2.1 lib/datacaster/utils.rb
datacaster-3.2.0 lib/datacaster/utils.rb
datacaster-3.1.5 lib/datacaster/utils.rb
datacaster-3.1.3 lib/datacaster/utils.rb