Module: TypeStruct::ClassMethods

Defined in:
lib/type_struct.rb

Instance Method Summary collapse

Instance Method Details

#definitionObject



80
81
82
# File 'lib/type_struct.rb', line 80

def definition
  const_get(:DEFINITION)
end

#freezeObject



96
97
98
99
100
101
102
103
# File 'lib/type_struct.rb', line 96

def freeze
  definition.each do |k, _|
    define_method("#{k}=") do |*|
      raise RuntimeError, "can't modify frozen #{self}##{k}"
    end
  end
  super
end

#from_hash(arg) ⇒ Object

Raises:



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/type_struct.rb', line 65

def from_hash(arg)
  unless h = Hash.try_convert(arg)
    raise TypeError, "#{self}.from_hash only accept Hash got `#{h.class}'"
  end
  args = {}
  errors = []
  h.each do |key, value|
    key = key.to_sym
    t = type(key)
    args[key] = try_convert(t, key, value, errors)
  end
  raise MultiTypeError, errors unless errors.empty?
  new(args)
end

#membersObject



84
85
86
# File 'lib/type_struct.rb', line 84

def members
  definition.keys
end

#type(k) ⇒ Object



88
89
90
# File 'lib/type_struct.rb', line 88

def type(k)
  definition[k]
end

#valid?(k, v) ⇒ Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/type_struct.rb', line 92

def valid?(k, v)
  definition[k] === v
end