Class: Chino::DepPuller

Inherits:
Object
  • Object
show all
Defined in:
lib/chino/dep_puller.rb

Overview

dependency puller

Constant Summary collapse

NIL_DRIVER =
Chino::Drivers::BaseDriver.new(nil)

Instance Method Summary collapse

Constructor Details

#initializeDepPuller

Returns a new instance of DepPuller.



12
13
14
# File 'lib/chino/dep_puller.rb', line 12

def initialize
  @dependencies = {}
end

Instance Method Details

#dependency(file) ⇒ Object



34
35
36
37
38
39
# File 'lib/chino/dep_puller.rb', line 34

def dependency(file)
  depname = name_for_dependency(file)
  return NIL_DRIVER unless @dependencies.key?(depname)

  @dependencies[depname].values.first
end

#dependency_has_file?(file) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/chino/dep_puller.rb', line 49

def dependency_has_file?(file)
  dependency(file).exist?(file)
end

#get_from_dependency(file) ⇒ Object



45
46
47
# File 'lib/chino/dep_puller.rb', line 45

def get_from_dependency(file)
  dependency(file).load_file(file)
end

#load_dependency!(dep) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/chino/dep_puller.rb', line 16

def load_dependency!(dep)
  const_name = "#{dep[:driver].camelize}Driver"
  raise "No such driver '#{dep[:driver]}'" unless Drivers.const_defined?(const_name)

  driver_class = Drivers.const_get(const_name)
  driver = driver_class.new(dep)
  name = driver.name
  version = driver.version
  return unless @dependencies.dig(name, version).nil?

  @dependencies[name] ||= {}
  @dependencies[name][version] = driver

  driver.inner_deps.each do |inner_dep|
    load_dependency!(inner_dep)
  end
end

#name_for_dependency(file) ⇒ Object



41
42
43
# File 'lib/chino/dep_puller.rb', line 41

def name_for_dependency(file)
  file.split('/').first
end