Class: NRSER::Types::Type

Inherits:
Object
  • Object
show all
Defined in:
lib/nrser/types/type.rb

Direct Known Subclasses

Attrs, Bounded, Combinator, Hash, Is, IsA, Where

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**options) ⇒ Type

Returns a new instance of Type.



10
11
12
13
# File 'lib/nrser/types/type.rb', line 10

def initialize **options
  @name = options[:name]
  @from_s = options[:from_s]
end

Class Method Details

.short_nameObject



6
7
8
# File 'lib/nrser/types/type.rb', line 6

def self.short_name
  name.split('::').last
end

Instance Method Details

#check(value) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/nrser/types/type.rb', line 27

def check value
  unless test value
    raise TypeError.new NRSER.squish <<-END
      value #{ value.inspect } failed check #{ self.inspect }
    END
  end
  
  value
end

#default_nameObject



19
20
21
# File 'lib/nrser/types/type.rb', line 19

def default_name
  self.class.short_name
end

#from_s(s) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/nrser/types/type.rb', line 45

def from_s s
  if @from_s.nil?
    raise NoMethodError, "#from_s not defined"
  end
  
  check @from_s.(s)
end

#has_from_s?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/nrser/types/type.rb', line 53

def has_from_s?
  ! @from_s.nil?
end

#nameObject



15
16
17
# File 'lib/nrser/types/type.rb', line 15

def name
  @name || default_name
end

#respond_to?(name, include_all = false) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
43
# File 'lib/nrser/types/type.rb', line 37

def respond_to? name, include_all = false
  if name == :from_s || name == 'from_s'
    has_from_s?
  else
    super name, include_all
  end
end

#test(value) ⇒ Object

Raises:

  • (NotImplementedError)


23
24
25
# File 'lib/nrser/types/type.rb', line 23

def test value
  raise NotImplementedError
end

#to_sObject



57
58
59
# File 'lib/nrser/types/type.rb', line 57

def to_s
  "<Type:#{ name }>"
end