Module: Mixture::Coerce
- Defined in:
- lib/mixture/coerce.rb,
lib/mixture/coerce/nil.rb,
lib/mixture/coerce/set.rb,
lib/mixture/coerce/base.rb,
lib/mixture/coerce/date.rb,
lib/mixture/coerce/hash.rb,
lib/mixture/coerce/time.rb,
lib/mixture/coerce/array.rb,
lib/mixture/coerce/class.rb,
lib/mixture/coerce/float.rb,
lib/mixture/coerce/range.rb,
lib/mixture/coerce/object.rb,
lib/mixture/coerce/string.rb,
lib/mixture/coerce/symbol.rb,
lib/mixture/coerce/boolean.rb,
lib/mixture/coerce/integer.rb,
lib/mixture/coerce/datetime.rb,
lib/mixture/coerce/rational.rb
Overview
Handles coercion of objects.
Defined Under Namespace
Classes: Array, Base, Boolean, Class, Date, DateTime, Float, Hash, Integer, Nil, Object, Range, Rational, Set, String, Symbol, Time
Class Method Summary collapse
-
.coerce(from, to) ⇒ Proc{(Object, Mixture::Types::Object) => Object}
Returns a block that takes one argument: the value.
-
.coercers ⇒ Hash{Mixture::Type => Mixture::Coerce::Base}
A hash of the coercers that currently exist.
-
.finalize ⇒ void
Registers the default coercions.
-
.perform(type, value) ⇒ Object
Performs the actual coercion, since blocks require a value and type arguments.
-
.register(coercion) ⇒ void
Registers a coercion with the module.
Class Method Details
.coerce(from, to) ⇒ Proc{(Object, Mixture::Types::Object) => Object}
Returns a block that takes one argument: the value.
48 49 50 51 52 |
# File 'lib/mixture/coerce.rb', line 48 def self.coerce(from, to) type = from.inheritable.find { |ancestor| coercers.key?(ancestor) } fail CoercionError, "No coercer for #{from}" unless type coercers[type].to(to) end |
.coercers ⇒ Hash{Mixture::Type => Mixture::Coerce::Base}
A hash of the coercers that currently exist. This maps their types to their classes.
37 38 39 |
# File 'lib/mixture/coerce.rb', line 37 def self.coercers @_coercers ||= ThreadSafe::Hash.new end |
.finalize ⇒ void
This method returns an undefined value.
Registers the default coercions.
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/mixture/coerce.rb', line 80 def self.finalize register Array register Boolean register Class register Date register DateTime register Float register Hash register Integer register Nil register Object register Range register Rational register Set register String register Symbol register Time end |
.perform(type, value) ⇒ Object
Performs the actual coercion, since blocks require a value and type arguments.
60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/mixture/coerce.rb', line 60 def self.perform(type, value) to = Types.infer(type) from = Types.infer(value) block = coerce(from, to) begin block.call(value, to) rescue CoercionError raise rescue StandardError => e raise CoercionError, "#{e.class}: #{e.message}", e.backtrace end end |
.register(coercion) ⇒ void
This method returns an undefined value.
Registers a coercion with the module. This uses the coercers constant.
29 30 31 |
# File 'lib/mixture/coerce.rb', line 29 def self.register(coercion) coercers[coercion.type] = coercion end |