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 |