Class: Hashery::Association

Inherits:
Object show all
Includes:
Comparable
Defined in:
lib/hashery/association.rb

Overview

Note:

This class is still fairly experimental. And it is not loaded along with the other Hashery libraries when using ‘require ’hashery’‘. It must be required independently.

Associations can be used to draw simple relationships.

:Apple >> :Fruit
:Apple >> :Red

:Apple.associations #=> [ :Fruit, :Red ]

It can also be used for simple lists of ordered pairs.

c = [ :a >> 1, :b >> 2 ]
c.each { |k,v| puts "#{k} associated with #{v} }

produces

a associated with 1
b associated with 2

The method :>> is used to construct the association. It is a rarely used method so it is generally available. But you can’t use it for any of the following classes becuase they use #>> for other things.

Bignum
Fixnum
Date
IPAddr
Process::Status

Association is a general binary association that allows one object to be associated with another. It has a variety of uses, such as linked-lists, simple ordered maps and mixed collections, among them.

Defined Under Namespace

Modules: Kernel

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(index, value = nil) ⇒ Association

Initialize new Association.

Parameters:

  • index

    The “index key” of the association.

  • value (defaults to: nil)

    The “value” of the association.



94
95
96
97
98
99
100
101
# File 'lib/hashery/association.rb', line 94

def initialize(index, value=nil)
  @index = index
  @value = value

  unless index.associations.include?(value)
    index.associations << value
  end
end

Instance Attribute Details

#indexObject

The “index key” of the association.



81
82
83
# File 'lib/hashery/association.rb', line 81

def index
  @index
end

#valueObject

The “value” of the association.



86
87
88
# File 'lib/hashery/association.rb', line 86

def value
  @value
end

Class Method Details

.[](index, value) ⇒ Object

Shortcut for #new.

Parameters:

  • index

    The “index key” of the association.

  • value

    The “value” of the association.

Returns:

  • ‘Association`.



65
66
67
# File 'lib/hashery/association.rb', line 65

def [](index, value)
  new(index, value)
end

.referenceObject

Store association references.

Returns:

  • ‘Hash` of all associaitons.



53
54
55
# File 'lib/hashery/association.rb', line 53

def reference
  @reference ||= Hash.new{ |h,k,v| h[k]=[] }
end

Instance Method Details

#<=>(assoc) ⇒ Integer

Compare the values of two associations.

Parameters:

  • TODO:

    Comparions with non-associations?

  • assoc

    The other ‘Association`.

Returns:

  • (Integer)

    Returns Integer ‘1`, `0`, or `-1`.



112
113
114
115
116
# File 'lib/hashery/association.rb', line 112

def <=>(assoc)
  return -1 if self.value < assoc.value
  return  1 if self.value > assoc.value
  return  0 if self.value == assoc.value
end

#inspectString

Produce a literal code string for creating an association.

Returns:

  • (String)

    Returns String.



143
144
145
# File 'lib/hashery/association.rb', line 143

def inspect
  "#{index.inspect} >> #{value.inspect}"
end

#invert!Array

Invert association, making the index the value and vice-versa.

Returns:

  • (Array)

    Returns Array with two-elements reversed.



123
124
125
126
127
# File 'lib/hashery/association.rb', line 123

def invert!
  temp = @index
  @index = @value
  @value = temp
end

#to_aryArray

Convert to two-element associative array.

Returns:

  • (Array)

    Returns Array Two-element Array of index and value pair.



152
153
154
# File 'lib/hashery/association.rb', line 152

def to_ary
  [index, value]
end

#to_sString

Produce a string representation.

Returns:

  • (String)

    Returns String.



134
135
136
# File 'lib/hashery/association.rb', line 134

def to_s
  return "#{index} >> #{value}"
end