Sha256: 14b352f54333767c1425dff9d7353cf20ec526126235447068807afb61b564bb

Contents?: true

Size: 1.7 KB

Versions: 1

Compression:

Stored size: 1.7 KB

Contents

# encoding: utf-8

require "mixture/coerce/base"
require "mixture/coerce/array"
require "mixture/coerce/date"
require "mixture/coerce/datetime"
require "mixture/coerce/float"
require "mixture/coerce/hash"
require "mixture/coerce/integer"
require "mixture/coerce/nil"
require "mixture/coerce/object"
require "mixture/coerce/rational"
require "mixture/coerce/set"
require "mixture/coerce/string"
require "mixture/coerce/symbol"
require "mixture/coerce/time"

module Mixture
  # Handles coercion of objects.
  module Coerce
    # Registers a coercion with the module.  This uses the {.coercers}
    # constant.
    #
    # @param coercion [Mixture::Coerce::Base] The coercer to register.
    # @return [void]
    def self.register(coercion)
      coercers[coercion.type] = coercion
    end

    # A hash of the coercers that currently exist.  This maps their
    # types to their classes.
    #
    # @return [Hash{Mixture::Type => Mixture::Coerce::Base}]
    def self.coercers
      @_coercers ||= {}
    end

    # Returns a block that takes one argument: the value.
    #
    # @param from [Mixture::Type]
    #   The type to coerce from.
    # @param to [Mixture::Type]
    #   The type to coerce to.
    # @return [Proc{(Object) => Object}]
    def self.coerce(from, to)
      coercers
        .fetch(from) { fail CoercionError, "No coercer for #{from}" }
        .to(to)
    end

    # Registers the default coercions.
    def self.load
      register Array
      register Date
      register DateTime
      register Float
      register Hash
      register Integer
      register Nil
      register Object
      register Rational
      register Set
      register String
      register Symbol
      register Time
    end

    load
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mixture-0.2.0 lib/mixture/coerce.rb