Class: Ree::PackageLoader
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
|
87
88
89
|
# File 'lib/ree/core/package_loader.rb', line 87
def reset
@loaded_paths = {}
end
|