Sha256: 83f34758ce2644cdfe564757bfd9d78d5a43a4579486e01bbbf9b0232ba524a0

Contents?: true

Size: 1.3 KB

Versions: 9

Compression:

Stored size: 1.3 KB

Contents

# encoding: utf-8

module Mixture
  module Coerce
    # Handles coercion of the Object class.
    class Object < Base
      type Types::Object

      # Tries a set of methods on the object, before failing with a
      # coercion error.
      #
      # @return [Proc{(Symbol) => Proc{(Object) => Object}}]
      TryMethods = proc do |*methods|
        proc do |value|
          method = methods.find { |m| value.respond_to?(m) }
          if method
            value.public_send(method)
          else
            fail CoercionError, "Could not coerce #{value.class}"
          end
        end
      end

      coerce_to(Types::Object, Itself)
      coerce_to(Types::Array, TryMethods[:to_a, :to_ary, :to_array])
      coerce_to(Types::Date, TryMethods[:to_date])
      coerce_to(Types::DateTime, TryMethods[:to_datetime])
      coerce_to(Types::Float, TryMethods[:to_f, :to_float])
      coerce_to(Types::Hash, TryMethods[:to_h, :to_hash])
      coerce_to(Types::Integer, TryMethods[:to_i, :to_integer])
      coerce_to(Types::Rational, TryMethods[:to_r, :to_rational])
      coerce_to(Types::Set, TryMethods[:to_set])
      coerce_to(Types::String, TryMethods[:to_s, :to_str, :to_string])
      coerce_to(Types::Symbol, TryMethods[:to_sym, :intern, :to_symbol])
      coerce_to(Types::Time, TryMethods[:to_time])
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
mixture-0.5.1 lib/mixture/coerce/object.rb
mixture-0.5.0 lib/mixture/coerce/object.rb
mixture-0.4.0 lib/mixture/coerce/object.rb
mixture-0.3.6 lib/mixture/coerce/object.rb
mixture-0.3.5 lib/mixture/coerce/object.rb
mixture-0.3.4 lib/mixture/coerce/object.rb
mixture-0.3.2 lib/mixture/coerce/object.rb
mixture-0.3.1 lib/mixture/coerce/object.rb
mixture-0.3.0 lib/mixture/coerce/object.rb