Sha256: f08feeb0b9a270a54d7bc40a44416c54d5cc6536a7403d2a64b3a1ab33101646

Contents?: true

Size: 1.3 KB

Versions: 5

Compression:

Stored size: 1.3 KB

Contents

# This mixin depends on three methods: #index( i, v ) where _index_ is an Integer,
# and #indicies.

require 'mega/nack'

Iterable = Enumerable


module Indexable

  def indicies
    #
  end

  def fetch( i )
    # raise
  end

  # if writable

  def store( i, v )
    #
  end

  def delete( i )
    #
  end

  # derivative methods

  def keys ; indicies ; end

  def []( i )
    fetch( i )
  end

  def []=( i, v )
    store( i, v )
  end

  # Returns an array of all values for the given list of indexes.
  def fetch_all( *x )
    x = indicies if x.empty?
    x.collect { |i| fetch(i) }
  end

  # Return true if the given index is viable.
  def index?( i )
    indicies.include?( i )
  end
  alias :key?, :index?


  def delete_all( *x )
    x.each { |i| delete( i ) }
  end

  def delete_values( *w )
    indicies.each { |i| delete( i ) if w.include?( fetch(i) ) }
  end


  # Returns a random value.
  #
  def rand_value
    fetch( indicies.at( rand( indicies.size ) ) )
  end
  alias_method :at_rand, :rand_value

  # Return a random index.
  #
  def rand_index
    indicies.at( rand( indicies.size ) )
  end
  alias_method :rand_key, :rand_index

  # Returns a random pair of an index and its value in a two-element array.
  #
  def rand_pair
    i = indicies.at( rand( indicies.size ) )
    [ i, fetch(i)  ]
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
facets-1.4.1 forge/more/indexable.rb
facets-1.4.2 forge/more/indexable.rb
facets-1.4.3 forge/more/indexable.rb
facets-1.4.4 forge/more/indexable.rb
facets-1.4.5 snip/more/indexable.rb