123456789_123456789_123456789_123456789_123456789_

Class: Rinda::Tuple

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Inherits: Object
Defined in: lib/rinda/rinda.rb

Overview

A tuple is the elementary object in ::Rinda programming. Tuples may be matched against templates if the tuple and the template are the same size.

Class Method Summary

Instance Method Summary

Constructor Details

.new(ary_or_hash) ⇒ Tuple

Creates a new Tuple from ary_or_hash which must be an Array or Hash.

[ GitHub ]

  
# File 'lib/rinda/rinda.rb', line 52

def initialize(ary_or_hash)
  if hash?(ary_or_hash)
    init_with_hash(ary_or_hash)
  else
    init_with_ary(ary_or_hash)
  end
end

Instance Method Details

#[](k)

Accessor method for elements of the tuple.

[ GitHub ]

  
# File 'lib/rinda/rinda.rb', line 70

def [](k)
  @tuple[k]
end

#each

Iterate through the tuple, yielding the index or key, and the value, thus ensuring arrays are iterated similarly to hashes.

[ GitHub ]

  
# File 'lib/rinda/rinda.rb', line 85

def each # FIXME
  if Hash === @tuple
    @tuple.each { |k, v| yield(k, v) }
  else
    @tuple.each_with_index { |v, k| yield(k, v) }
  end
end

#fetch(k)

Fetches item k from the tuple.

[ GitHub ]

  
# File 'lib/rinda/rinda.rb', line 77

def fetch(k)
  @tuple.fetch(k)
end

#hash?(ary_or_hash) ⇒ Boolean (private)

[ GitHub ]

  
# File 'lib/rinda/rinda.rb', line 101

def hash?(ary_or_hash)
  ary_or_hash.respond_to?(:keys)
end

#init_with_ary(ary) (private)

Munges ary into a valid Tuple.

[ GitHub ]

  
# File 'lib/rinda/rinda.rb', line 108

def init_with_ary(ary)
  @tuple = Array.new(ary.size)
  @tuple.size.times do |i|
    @tuple[i] = ary[i]
  end
end

#init_with_hash(hash) (private)

Ensures hash is a valid Tuple.

[ GitHub ]

  
# File 'lib/rinda/rinda.rb', line 118

def init_with_hash(hash)
  @tuple = Hash.new
  hash.each do |k, v|
    raise InvalidHashTupleKey unless String === k
    @tuple[k] = v
  end
end

#size

The number of elements in the tuple.

[ GitHub ]

  
# File 'lib/rinda/rinda.rb', line 63

def size
  @tuple.size
end

#value

Return the tuple itself

[ GitHub ]

  
# File 'lib/rinda/rinda.rb', line 95

def value
  @tuple
end