Class: Ree::PackageLoader

Inherits:
Object show all
Includes:
Args
Defined in:
lib/ree/core/package_loader.rb

Instance Method Summary collapse

Methods included from Args

#check_arg, #check_arg_any, #check_arg_array_of, #check_bool, #not_nil

Constructor Details

#initialize(packages_store) ⇒ PackageLoader

Returns a new instance of PackageLoader.



9
10
11
12
13
# File 'lib/ree/core/package_loader.rb', line 9

def initialize(packages_store)
  @loaded_paths = {}
  @loaded_packages = {}
  @packages_store = packages_store
end

Instance Method Details

#get_loaded_package(package_name) ⇒ Object



35
36
37
38
39
40
41
42
43
44
# File 'lib/ree/core/package_loader.rb', line 35

def get_loaded_package(package_name)
  package = get_package(package_name)
  load_package_entry(package_name)
  
  return package if package.schema_loaded?

  read_package_structure(package_name)

  package
end

#get_package(package_name, raise_if_missing = true) ⇒ Object



46
47
48
49
50
51
52
53
54
55
# File 'lib/ree/core/package_loader.rb', line 46

def get_package(package_name, raise_if_missing = true)
  check_arg(package_name, :package_name, Symbol)
  package = @packages_store.get(package_name)

  if !package && raise_if_missing
    raise Ree::Error.new("Package :#{package_name} is not found in Packages.schema.json. Run `ree gen.packages_json` to update schema.", :package_schema_not_found)
  end

  package
end

#load_entire_package(package_name) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/ree/core/package_loader.rb', line 15

def load_entire_package(package_name)
  return if @loaded_packages[package_name]

  package = get_loaded_package(package_name)

  return unless package
  
  package.objects.each do |package_object|
    object_path = Ree::PathHelper.abs_object_path(package_object)

    load_file(object_path, package.name)
  end

  @loaded_packages[package.name] = true

  package.deps.each do |dep|
    load_entire_package(dep.name)
  end 
end

#load_file(path, package_name) ⇒ Object



91
92
93
94
95
96
97
98
99
# File 'lib/ree/core/package_loader.rb', line 91

def load_file(path, package_name)
  @loaded_paths[package_name] ||= {}
  return if @loaded_paths[package_name][path]
  @loaded_paths[package_name][path] = true

  Ree.logger.debug("load_file(:#{package_name}, '#{path}')")

  Kernel.require(path)
end

#load_package_entry(package_name) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/ree/core/package_loader.rb', line 57

def load_package_entry(package_name)
  package = @packages_store.get(package_name)

  if package.nil?
    raise Ree::Error.new("package :#{package_name} not found in Packages.schema.json")
  end

  return if package.loaded?

  Ree.logger.debug("load_package_entry(:#{package_name})")

  load_file(
    Ree::PathHelper.abs_package_entry_path(package),
    package_name
  )
end

#read_package_structure(package_name) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/ree/core/package_loader.rb', line 74

def read_package_structure(package_name)
  package = get_package(package_name)

  Ree.logger.debug("read_package_file_structure(:#{package_name})")

  if !package.dir
    package.set_schema_loaded
    return package
  end

  Ree::PackageFileStructureLoader.new.call(package)
end

#resetObject



87
88
89
# File 'lib/ree/core/package_loader.rb', line 87

def reset
  @loaded_paths = {}
end