Sha256: d61053801ab4806ffb2029c3bc9e4552d4ea18a99d222c92123d2cb5e3e111aa

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

=begin

= Association

=end
  
class Association < Array
  def initialize( key, value ) 
    self.replace [ key, value ]
  end
  def key
    self[0]
  end
  def value
    self[1]
  end
end
  
module Kernel
  def >>( associate )
    Association.new( self, associate )
  end
end

# of course we need to teach array about working with associations
class Array
  
  alias_method(:_get, :"[]")
  private :_get
  def [](i)
    r = self._get(i)
    return r.value if r.is_a? Association
    return r
  end
  
  alias_method(:_at, :at)
  private :_at
  def at(i)
    r = self._at(i)
    return r.value if r.is_a? Association
    return r
  end

  alias_method( :_values_at, :values_at)
  private :_values_at
  def values_at(*args)
    r = self.values_at(i)
    if r
      return r.collect{ |e| e.is_a?(Association) ? e.value : e }
    end
    return r
  end

end

  
# --- development testing ---
  
if $0 == __FILE__
    
  omap = [ :a >> 1, :b >> 2 ]
  
  p omap[0]
    
  omap.each { |a| p a }
    
  puts "---"
  omap.each { |k,v| p k,v }
    
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
carats-0.3.0 lib/carat-dev/association/association.rb