Sha256: 5bbf2daee9bcfc2f52760506805bc7343610eb7650c5da03020eff08512a2199

Contents?: true

Size: 1010 Bytes

Versions: 216

Compression:

Stored size: 1010 Bytes

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/simple_cache'

module EacRubyUtils
  class RecursiveBuilder
    include ::EacRubyUtils::SimpleCache

    attr_reader :root, :neighbors_block

    def initialize(root, &neighbors_block)
      @root = root
      @neighbors_block = neighbors_block
    end

    private

    attr_reader :added, :to_check

    def result_uncached
      @added = []
      @to_check = []
      item_try_add_to_check(root)
      while check_next_item
        # Do nothing
      end
      added
    end

    def item_try_add_to_check(item)
      to_check << item unless item_added?(item)
    end

    def item_added?(item)
      added.include?(item) || to_check.include?(item)
    end

    def check_next_item
      return false unless to_check.any?

      item = to_check.shift
      added << item
      item_neighborhs(item).each { |sub_item| item_try_add_to_check(sub_item) }
      true
    end

    def item_neighborhs(item)
      neighbors_block.call(item)
    end
  end
end

Version data entries

216 entries across 216 versions & 4 rubygems

Version Path
eac_ruby_utils-0.124.0 lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.97.2 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb
eac_ruby_utils-0.123.0 lib/eac_ruby_utils/recursive_builder.rb
eac_ruby_utils-0.121.0 lib/eac_ruby_utils/recursive_builder.rb
eac_ruby_utils-0.120.0 lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.76.1 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.76.0 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.75.2 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb
eac_ruby_utils-0.119.2 lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.75.1 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.75.0 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb
eac_ruby_utils-0.119.1 lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.74.1 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.74.0 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.73.0 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb
eac_ruby_utils-0.119.0 lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.72.0 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb
eac_ruby_utils-0.118.1 lib/eac_ruby_utils/recursive_builder.rb
eac_ruby_utils-0.118.0 lib/eac_ruby_utils/recursive_builder.rb
eac_tools-0.70.1 sub/eac_ruby_utils/lib/eac_ruby_utils/recursive_builder.rb