Sha256: 7b899c8c97ab25b4c97a20e3b01f0f6dc32e244a38a9594c788392bae268ceae

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

module SearchCraft::DependsOn
  extend ActiveSupport::Concern

  class_methods do
    @@dependencies = {}

    def depends_on(*builder_names)
      @@dependencies[name] = builder_names
    end

    # TODO: implement .add_index instead of #view_indexes below
    def add_index(index_name, columns, unique: false, name: nil)
      @indexes ||= {}
      # TODO: also get indexes from @@dependencies[name]
      @indexes[index_name] = {columns: columns, unique: unique, name: name}
    end

    def sort_builders_by_dependency
      sorted = []
      visited = {}

      builders_to_rebuild.each do |builder|
        visit(builder, visited, sorted)
      end

      sorted
    end

    def visit(builder, visited, sorted)
      return if visited[builder.name]

      dependency_names = @@dependencies[builder.name] || []
      dependency_names.each do |dependency_name|
        dependency = Object.const_get(dependency_name)
        visit(dependency, visited, sorted)
      end

      visited[builder.name] = true
      sorted << builder
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
searchcraft-0.4.0 lib/searchcraft/depends_on.rb