dsawardekar/speckle

View on GitHub
lib/speckle/list/builder.rb

Summary

Maintainability
A
0 mins
Test Coverage
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