Class: NRSER::Types::ArrayOfType

Inherits:
ArrayType show all
Defined in:
lib/nrser/types/array.rb

Overview

Type for arrays where every entry satisfies a specific type.

Broken out from ArrayType so that TupleType can inherit from ArrayType and get share it’s string handling functionality without receiving the entry type stuff (which it handles differently).

Constant Summary

Constants inherited from ArrayType

NRSER::Types::ArrayType::DEFAULT_SPLIT_WITH

Instance Attribute Summary collapse

Attributes inherited from IsA

#klass

Instance Method Summary collapse

Methods inherited from ArrayType

#from_s

Methods inherited from IsA

#from_data, #has_from_data?

Methods inherited from Type

#check, #from_data, #from_s, #has_from_data?, #has_to_data?, #name, #respond_to?, short_name, #to_data, #to_s

Constructor Details

#initialize(item_type, **options) ⇒ ArrayOfType

Instantiate a new ‘ArrayOfType`.



129
130
131
132
# File 'lib/nrser/types/array.rb', line 129

def initialize item_type, **options
  super **options
  @item_type = NRSER::Types.make item_type
end

Instance Attribute Details

#item_typeNRSER::Types::Type (readonly)

Type that all items must satisfy for an array to be a member of this type.

Returns:



122
123
124
# File 'lib/nrser/types/array.rb', line 122

def item_type
  @item_type
end

Instance Method Details

#==(other) ⇒ Object

TODO:

I’m not even sure why this is implemented… was it used somewhere?

It doesn’t seems too well thought out… seems like the reality of comparing types is much more complicated?



174
175
176
177
178
# File 'lib/nrser/types/array.rb', line 174

def == other
  equal?(other) || (
    other.class == self.class && @item_type == other.item_type
  )
end

#default_nameObject

Instance Methods



138
139
140
# File 'lib/nrser/types/array.rb', line 138

def default_name
  "#{ super() }<#{ @item_type }>"
end

#has_from_s?Boolean

NRSER::Types::ArrayOfType can convert values from strings if it’s #item_type can convert values from strings.

Returns:

  • (Boolean)


158
159
160
# File 'lib/nrser/types/array.rb', line 158

def has_from_s?
  @item_type.has_from_s?
end

#items_from_strings(items) ⇒ Object



163
164
165
# File 'lib/nrser/types/array.rb', line 163

def items_from_strings items
  items.map &@item_type.method( :from_s )
end

#test(value) ⇒ Object



143
144
145
146
147
148
149
150
# File 'lib/nrser/types/array.rb', line 143

def test value
  # Check the super method first, which will test if `value` is an Array
  # instance, and return `false` if it's not.
  return false unless super( value )
  
  # Otherwise test all the items
  value.all? &@item_type.method( :test )
end