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