Sha256: 1f71ca9259e9f8a853252b4c1b4eb442ab0239d38a12d7eccf5d9fa3e3fbc9f2

Contents?: true

Size: 887 Bytes

Versions: 1

Compression:

Stored size: 887 Bytes

Contents

# frozen_string_literal: true

require "set"

module Speculation
  # @private
  module Utils
    def self.itself(x)
      x
    end

    def self.constantly(x)
      ->(*) { x }
    end

    def self.ident?(x)
      x.is_a?(Symbol) || x.is_a?(MethodIdentifier)
    end

    def self.method?(x)
      x.is_a?(Method) || x.is_a?(UnboundMethod)
    end

    def self.empty(coll)
      coll.class.new
    end

    def self.into(to, from)
      from.reduce(to) { |memo, obj| conj(memo, obj) }
    end

    def self.conj(a, b)
      case a
      when Array, Set
        a + [b]
      when Hash
        case b
        when Array then a.merge(b[0] => b[1])
        else            a.merge(b)
        end
      else raise ArgumentError, "#{a}: must be an Array, Set or Hash"
      end
    end

    def self.sort_descending(coll)
      coll.sort { |a, b| yield(b) <=> yield(a) }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
speculation-0.4.2 lib/speculation/utils.rb