Sha256: bd85ef34ade0048b23fd9cbda5e78fd90321e064b30ea4efa06409a98e73cddb

Contents?: true

Size: 786 Bytes

Versions: 3

Compression:

Stored size: 786 Bytes

Contents

module Wombat
  class Iterator < PropertyContainer
    attr_accessor :selector

    def initialize(selector)
      @selector = selector
      super()
    end

    def parse
    	raise ArgumentError.new('Must provide a block to locate property values') unless block_given?

    	all_properties.each do |p|
        p.result ||= []
        result = yield p
        if result
          result = p.callback ? p.callback.call(result) : result
          p.result << result
        end
      end
    end

    def flatten(depth = nil)
    	# determine the iterator length by the biggest property array that we have
    	length = all_properties.map(&:result).sort { |a| a.length }.last.size

    	Array.new.tap do |a|
		  	length.times do |i|
		  		a << super(i)
		  	end
		  end
	  end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wombat-0.4.0 lib/wombat/iterator.rb
wombat-0.3.1 lib/wombat/iterator.rb
wombat-0.3.0 lib/wombat/iterator.rb