class MagicArray

Attributes

count[RW]
elements[RW]

Public Class Methods

load_limit(attr=nil) click to toggle source
# File lib/magic_array.rb, line 65
def load_limit attr=nil
  @@load_limit = attr || 100
end
new(*attrs) click to toggle source
# File lib/magic_array.rb, line 7
def initialize *attrs
  @elements = []
  @count = 0 unless @count
  self
end

Public Instance Methods

[](index) click to toggle source
# File lib/magic_array.rb, line 17
def [] index
  case index
    when Range then
      if elements[index].empty? || elements[index].include?(nil)
        load_elements(index)
      else
        elements[index]
      end
    else
      elements[index] || load_element(index)
  end
end
all() click to toggle source
# File lib/magic_array.rb, line 30
def all
  self[0..(count-1)]
end
load_element(index) click to toggle source
# File lib/magic_array.rb, line 34
def load_element index
  elements[index] = element_source index
end
load_elements(range) click to toggle source
# File lib/magic_array.rb, line 38
def load_elements range
  iterative_range = if range.end < count || count == 0
                      range.dup
                    else
                      Range.new range.begin, count-1
                    end

  while iterative_range.count > 0
    limited_range = iterative_range.first(@@load_limit)
    iterative_range = Range.new(
        (
        limited_range.count < @@load_limit ?
            iterative_range.end+1 :
            iterative_range.begin+@@load_limit
        ),
        iterative_range.end
    )
    array = elements_source limited_range.first, limited_range.count
    limited_range.each_with_index do |element, index|
      elements[element] = array[index]
    end
  end
  elements[range]
end
method_missing(m, *args, &block) click to toggle source
# File lib/magic_array.rb, line 13
def method_missing m, *args, &block
  @elements.public_send m, args
end