Module: TypedData
- Defined in:
- lib/fusion/typed_data.rb
Overview
Utility ===
Ruby's Data with === type per attribute. A type is anything ===-able:
a class (Integer), a regexp (Identifier), a marker module, or — for
anything composite (unions, typed arrays, enums, "optional") — a proc.
Mini-clone of gem literal.
Class Method Summary collapse
Class Method Details
.define(**schema) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/fusion/typed_data.rb', line 11 def self.define(**schema) Data.define(*schema.keys) do define_method(:initialize) do |**kwargs| kwargs.each_key do |key| unless schema[key] === kwargs[key] raise TypeError, "#{key}: expected #{schema[key]}, got #{kwargs[key].inspect} (#{kwargs[key].class})" end end super(**kwargs) end end end |