Module: TypeStruct::ClassMethods

Defined in:
lib/type_struct.rb

Instance Method Summary collapse

Instance Method Details

#definitionObject



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

def definition
  const_get(:DEFINITION)
end

#freezeObject



100
101
102
103
104
105
106
107
# File 'lib/type_struct.rb', line 100

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
79
80
81
82
# File 'lib/type_struct.rb', line 65

def from_hash(arg)
  unless h = Hash.try_convert(arg)
    begin
      raise TypeError, "no implicit conversion from #{arg} to Hash"
    rescue => e
      raise TypeStruct::MultiTypeError, [e]
    end
  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



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

def members
  definition.keys
end

#type(k) ⇒ Object



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

def type(k)
  definition[k]
end

#valid?(k, v) ⇒ Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/type_struct.rb', line 96

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