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