lib/speckle/list/builder.rb
module Speckle
module List
class Builder
def initialize
@sources = []
@filters = []
@filtered = nil
end
def add_source(source)
@sources << source
end
def add_filter(filter)
@filters << filter
end
def filter_list(list, filter)
filtered = []
list.each do |item|
result = filter.run(item)
filtered.concat(result)
end
filtered
end
def rebuild
filtered = @sources
@filters.each do |filter|
filtered = filter_list(filtered, filter)
end
@filtered = filtered
end
def build
rebuild if @filtered.nil?
@filtered
end
end
end
end