class TwitterCldr::Resources::ImportResolver

Attributes

importers[R]
options[R]

Public Class Methods

new(importers = Resources.importer_classes_for_ruby_engine, options = {}) click to toggle source
# File lib/twitter_cldr/resources/import_resolver.rb, line 10
def initialize(importers = Resources.importer_classes_for_ruby_engine, options = {})
  @importers = importers
  @options = options
end

Public Instance Methods

import() click to toggle source
# File lib/twitter_cldr/resources/import_resolver.rb, line 15
def import
  check_unmet_deps
  import_in_order
end

Private Instance Methods

check_unmet_deps() click to toggle source
# File lib/twitter_cldr/resources/import_resolver.rb, line 41
def check_unmet_deps
  instances.each do |instance|
    check_unmet_instance_deps(instance)
  end
end
check_unmet_instance_deps(instance) click to toggle source
# File lib/twitter_cldr/resources/import_resolver.rb, line 47
def check_unmet_instance_deps(instance)
  return if options[:allow_missing_dependencies]

  unmet_deps = unmet_deps_for(instance)

  unless unmet_deps.empty?
    list = unmet_deps.map { |d| d.name }.join(', ')
    raise "#{instance.class} dependencies are not met: #{list}"
  end
end
deps_for(instance) click to toggle source
# File lib/twitter_cldr/resources/import_resolver.rb, line 70
def deps_for(instance)
  if dep_requirement = instance.requirements[:dependency]
    dep_requirement.importer_classes
  else
    []
  end
end
import_in_order() click to toggle source
# File lib/twitter_cldr/resources/import_resolver.rb, line 22
def import_in_order
  tsort.each { |instance| instance.import }
end
instances() click to toggle source
# File lib/twitter_cldr/resources/import_resolver.rb, line 58
def instances
  @instances ||= importers.map do |importer|
    importer.is_a?(Class) ? importer.new : importer
  end
end
tsort_each_child(instance) { |dep| ... } click to toggle source
# File lib/twitter_cldr/resources/import_resolver.rb, line 30
def tsort_each_child(instance, &block)
  deps_for(instance).map do |dep_class|
    dep = instances.find { |ins| ins.class == dep_class }
    yield dep if dep

    unless options[:allow_missing_dependencies]
      raise "Could not find dependency #{dep_class.name}"
    end
  end
end
tsort_each_node(&block) click to toggle source
# File lib/twitter_cldr/resources/import_resolver.rb, line 26
def tsort_each_node(&block)
  instances.each(&block)
end
unmet_deps_for(instance) click to toggle source
# File lib/twitter_cldr/resources/import_resolver.rb, line 64
def unmet_deps_for(instance)
  deps_for(instance).reject do |dep_class|
    instances.any? { |ins| ins.class == dep_class }
  end
end