Module: T

Defined in:
lib/emery/type.rb

Defined Under Namespace

Classes: ArrayType, HashType, NilableType, StringFormattedType, UnionType, UnknownType

Class Method Summary collapse

Class Method Details

.array(item_type) ⇒ Object



147
148
149
# File 'lib/emery/type.rb', line 147

def T.array(item_type)
  ArrayType.new(item_type)
end

.check(type, value) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/emery/type.rb', line 120

def T.check(type, value)
  if type.methods.include? :check
    type.check(value)
  else
    if type != NilClass
      T.check_not_nil(type, value)
    end
    if !value.is_a? type
      raise TypeError.new("Value '#{value.inspect.to_s}' type is #{value.class} - #{type} is required")
    end
  end
  return value
end

.check_not_nil(type, value) ⇒ Object



4
5
6
7
8
# File 'lib/emery/type.rb', line 4

def T.check_not_nil(type, value)
  if value == nil
    raise TypeError.new("Type #{type.to_s} does not allow nil value")
  end
end

.check_var(var_name, type, value) ⇒ Object



159
160
161
162
163
164
165
166
# File 'lib/emery/type.rb', line 159

def T.check_var(var_name, type, value)
  begin
    check(type, value)
    return value
  rescue TypeError => e
    raise TypeError.new("Variable #{var_name} type check failed, expected type: #{type.to_s}, value: #{value}")
  end
end

.hash(key_type, value_type) ⇒ Object



151
152
153
# File 'lib/emery/type.rb', line 151

def T.hash(key_type, value_type)
  HashType.new(key_type, value_type)
end

.instance_of?(type, value) ⇒ Boolean

Returns:



134
135
136
137
138
139
140
141
# File 'lib/emery/type.rb', line 134

def T.instance_of?(type, value)
  begin
    T.check(type, value)
    true
  rescue TypeError
    false
  end
end

.nilable(value_type) ⇒ Object



143
144
145
# File 'lib/emery/type.rb', line 143

def T.nilable(value_type)
  NilableType.new(value_type)
end

.union(*typdefs) ⇒ Object



155
156
157
# File 'lib/emery/type.rb', line 155

def T.union(*typdefs)
  UnionType.new(*typdefs)
end