bake 0.20.0 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/bake/command/call.rb +1 -2
- data/lib/bake/command/list.rb +2 -12
- data/lib/bake/context.rb +30 -33
- data/lib/bake/registry/aggregate.rb +112 -0
- data/lib/bake/registry/bakefile_loader.rb +32 -0
- data/lib/bake/registry/directory_loader.rb +77 -0
- data/lib/bake/registry.rb +15 -0
- data/lib/bake/scope.rb +13 -4
- data/lib/bake/version.rb +1 -1
- data/lib/bake.rb +1 -2
- data.tar.gz.sig +0 -0
- metadata +7 -5
- metadata.gz.sig +0 -0
- data/lib/bake/loader.rb +0 -48
- data/lib/bake/loaders.rb +0 -110
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a486a2d684d8417098b550d477c23b52d9ee41e364bdb3eba4abe94a34b7e4bb
|
4
|
+
data.tar.gz: d6ed531b2cb2aa138d3eef54eaef5d082a6b119b5d320bb77cb72c2bc360b802
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77e365e561d39182941954d48fbafb0b85dafd7e7392b5edb5c254052483437729d1d4207355fae156daeac2c10e06c56c9da7dbad8d98eab7d0c32f4b9d5607
|
7
|
+
data.tar.gz: d8a8ffbafbc2797d96026921c77ae99e6b00a719cd66291d36067db1ec72d3c0c9031dc069c20b18ac50fa6841177a07b5303f4367c6aabb01f373babee71783
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/bake/command/call.rb
CHANGED
data/lib/bake/command/list.rb
CHANGED
@@ -80,21 +80,11 @@ module Bake
|
|
80
80
|
terminal = @parent.terminal
|
81
81
|
context = @parent.context
|
82
82
|
|
83
|
-
|
84
|
-
printed = print_scope(terminal, context.scope) do
|
85
|
-
terminal.print_line(:context, context)
|
86
|
-
end
|
87
|
-
|
88
|
-
if printed
|
89
|
-
terminal.print_line
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context.loaders.each do |loader|
|
83
|
+
context.registry.each do |loader|
|
94
84
|
printed = false
|
95
85
|
|
96
86
|
loader.each do |path|
|
97
|
-
|
87
|
+
loader.scopes_for(path) do |scope|
|
98
88
|
print_scope(terminal, scope, printed: printed) do
|
99
89
|
terminal.print_line(:loader, loader)
|
100
90
|
printed = true
|
data/lib/bake/context.rb
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
# Copyright, 2020, by Olle Jonsson.
|
6
6
|
|
7
7
|
require_relative 'base'
|
8
|
+
require_relative 'registry'
|
8
9
|
|
9
10
|
module Bake
|
10
11
|
# The default file name for the top level bakefile.
|
@@ -45,57 +46,49 @@ module Bake
|
|
45
46
|
# @path [String] A file-system path.
|
46
47
|
def self.load(path = Dir.pwd)
|
47
48
|
if bakefile_path = self.bakefile_path(path)
|
48
|
-
scope = Scope.load(bakefile_path)
|
49
|
-
|
50
49
|
working_directory = File.dirname(bakefile_path)
|
51
|
-
loaders = Loaders.default(working_directory)
|
52
50
|
else
|
53
|
-
scope = nil
|
54
|
-
|
55
51
|
working_directory = path
|
56
|
-
loaders = Loaders.default(working_directory)
|
57
52
|
end
|
58
53
|
|
59
|
-
|
54
|
+
registry = Registry.default(working_directory, bakefile_path)
|
55
|
+
context = self.new(registry, working_directory)
|
56
|
+
|
57
|
+
context.bakefile
|
58
|
+
|
59
|
+
return context
|
60
60
|
end
|
61
61
|
|
62
|
-
# Initialize the context with the specified
|
63
|
-
# @parameter
|
64
|
-
def initialize(
|
65
|
-
@
|
66
|
-
|
67
|
-
@stack = []
|
62
|
+
# Initialize the context with the specified registry.
|
63
|
+
# @parameter registry [Registry]
|
64
|
+
def initialize(registry, root = nil)
|
65
|
+
@registry = registry
|
66
|
+
@root = root
|
68
67
|
|
69
68
|
@instances = Hash.new do |hash, key|
|
70
69
|
hash[key] = instance_for(key)
|
71
70
|
end
|
72
71
|
|
73
|
-
@scope = scope
|
74
|
-
@root = root
|
75
|
-
|
76
|
-
if @scope
|
77
|
-
base = Base.derive
|
78
|
-
base.prepend(@scope)
|
79
|
-
|
80
|
-
@instances[[]] = base.new(self)
|
81
|
-
end
|
82
|
-
|
83
72
|
@recipes = Hash.new do |hash, key|
|
84
73
|
hash[key] = recipe_for(key)
|
85
74
|
end
|
86
75
|
end
|
87
76
|
|
88
|
-
|
89
|
-
|
77
|
+
def bakefile
|
78
|
+
@instances[[]]
|
79
|
+
end
|
90
80
|
|
91
|
-
# The
|
92
|
-
attr :
|
81
|
+
# The registry which will be used to resolve recipes in this context.
|
82
|
+
attr :registry
|
93
83
|
|
94
84
|
# The root path of this context.
|
95
85
|
# @returns [String | Nil]
|
96
86
|
attr :root
|
97
87
|
|
98
88
|
# Invoke recipes on the context using command line arguments.
|
89
|
+
#
|
90
|
+
# e.g. `context.call("gem:release:version:increment", "0,0,1")`
|
91
|
+
#
|
99
92
|
# @parameter commands [Array(String)]
|
100
93
|
def call(*commands)
|
101
94
|
last_result = nil
|
@@ -118,6 +111,8 @@ module Bake
|
|
118
111
|
@recipes[command]
|
119
112
|
end
|
120
113
|
|
114
|
+
alias [] lookup
|
115
|
+
|
121
116
|
def to_s
|
122
117
|
if @root
|
123
118
|
"#{self.class} #{File.basename(@root)}"
|
@@ -135,9 +130,13 @@ module Bake
|
|
135
130
|
def recipe_for(command)
|
136
131
|
path = command.split(":")
|
137
132
|
|
133
|
+
# If the command is in the form `foo:bar`, we check two cases:
|
134
|
+
#
|
135
|
+
# (1) We check for an instance at path `foo:bar` and if it responds to `bar`.
|
138
136
|
if instance = @instances[path] and instance.respond_to?(path.last)
|
139
137
|
return instance.recipe_for(path.last)
|
140
138
|
else
|
139
|
+
# (2) We check for an instance at path `foo` and if it responds to `bar`.
|
141
140
|
*path, name = *path
|
142
141
|
|
143
142
|
if instance = @instances[path] and instance.respond_to?(name)
|
@@ -158,12 +157,10 @@ module Bake
|
|
158
157
|
def base_for(path)
|
159
158
|
base = nil
|
160
159
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
base.prepend(scope)
|
166
|
-
end
|
160
|
+
# For each loader, we check if it has a scope for the given path. If it does, we prepend it to the base:
|
161
|
+
@registry.scopes_for(path) do |scope|
|
162
|
+
base ||= Base.derive(path)
|
163
|
+
base.prepend(scope)
|
167
164
|
end
|
168
165
|
|
169
166
|
return base
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2020-2024, by Samuel Williams.
|
5
|
+
|
6
|
+
require 'console'
|
7
|
+
|
8
|
+
require_relative 'directory_loader'
|
9
|
+
require_relative 'bakefile_loader'
|
10
|
+
|
11
|
+
module Bake
|
12
|
+
# Structured access to the working directory and loaded gems for loading bakefiles.
|
13
|
+
module Registry
|
14
|
+
class Aggregate
|
15
|
+
include Enumerable
|
16
|
+
|
17
|
+
# Create a loader using the specified working directory.
|
18
|
+
# @parameter working_directory [String]
|
19
|
+
def self.default(working_directory, bakefile_path = nil)
|
20
|
+
registry = self.new
|
21
|
+
|
22
|
+
if bakefile_path
|
23
|
+
registry.append_bakefile(bakefile_path)
|
24
|
+
end
|
25
|
+
|
26
|
+
registry.append_defaults(working_directory)
|
27
|
+
|
28
|
+
return registry
|
29
|
+
end
|
30
|
+
|
31
|
+
# Initialize an empty array of registry.
|
32
|
+
def initialize
|
33
|
+
# Used to de-duplicated directories:
|
34
|
+
@roots = {}
|
35
|
+
|
36
|
+
# The ordered list of loaders:
|
37
|
+
@ordered = Array.new
|
38
|
+
end
|
39
|
+
|
40
|
+
# Whether any registry are defined.
|
41
|
+
# @returns [Boolean]
|
42
|
+
def empty?
|
43
|
+
@ordered.empty?
|
44
|
+
end
|
45
|
+
|
46
|
+
# Enumerate the registry in order.
|
47
|
+
def each(&block)
|
48
|
+
@ordered.each(&block)
|
49
|
+
end
|
50
|
+
|
51
|
+
def scopes_for(path, &block)
|
52
|
+
@ordered.each do |registry|
|
53
|
+
registry.scopes_for(path, &block)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def append_bakefile(path)
|
58
|
+
@ordered << BakefileLoader.new(path)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Append a specific project path to the search path for recipes.
|
62
|
+
# The computed path will have `bake` appended to it.
|
63
|
+
# @parameter current [String] The path to add.
|
64
|
+
def append_path(current = Dir.pwd, **options)
|
65
|
+
bake_path = File.join(current, "bake")
|
66
|
+
|
67
|
+
if File.directory?(bake_path)
|
68
|
+
return insert(bake_path, **options)
|
69
|
+
end
|
70
|
+
|
71
|
+
return false
|
72
|
+
end
|
73
|
+
|
74
|
+
# Add registry according to the current working directory and loaded gems.
|
75
|
+
# @parameter working_directory [String]
|
76
|
+
def append_defaults(working_directory)
|
77
|
+
# Load recipes from working directory:
|
78
|
+
self.append_path(working_directory)
|
79
|
+
|
80
|
+
# Load recipes from loaded gems:
|
81
|
+
self.append_from_gems
|
82
|
+
end
|
83
|
+
|
84
|
+
# Enumerate all loaded gems and add them.
|
85
|
+
def append_from_gems
|
86
|
+
::Gem.loaded_specs.each do |name, spec|
|
87
|
+
Console.debug(self) {"Checking gem #{name}: #{spec.full_gem_path}..."}
|
88
|
+
|
89
|
+
if path = spec.full_gem_path and File.directory?(path)
|
90
|
+
append_path(path, name: spec.full_name)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
protected
|
96
|
+
|
97
|
+
def insert(directory, **options)
|
98
|
+
unless @roots.key?(directory)
|
99
|
+
Console.debug(self) {"Adding #{directory.inspect}"}
|
100
|
+
|
101
|
+
loader = DirectoryLoader.new(directory, **options)
|
102
|
+
@roots[directory] = loader
|
103
|
+
@ordered << loader
|
104
|
+
|
105
|
+
return true
|
106
|
+
end
|
107
|
+
|
108
|
+
return false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2020-2024, by Samuel Williams.
|
5
|
+
|
6
|
+
require_relative '../scope'
|
7
|
+
|
8
|
+
module Bake
|
9
|
+
module Registry
|
10
|
+
class BakefileLoader
|
11
|
+
def initialize(path)
|
12
|
+
@path = path
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
"#{self.class} #{@path}"
|
17
|
+
end
|
18
|
+
|
19
|
+
attr :path
|
20
|
+
|
21
|
+
def each(&block)
|
22
|
+
yield []
|
23
|
+
end
|
24
|
+
|
25
|
+
def scopes_for(path)
|
26
|
+
if path == []
|
27
|
+
yield Scope.load(@path, [])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2020-2024, by Samuel Williams.
|
5
|
+
|
6
|
+
require_relative '../scope'
|
7
|
+
|
8
|
+
module Bake
|
9
|
+
module Registry
|
10
|
+
# Represents a directory which contains bakefiles.
|
11
|
+
class DirectoryLoader
|
12
|
+
# Initialize the loader with the specified root path.
|
13
|
+
# @parameter root [String] A file-system path.
|
14
|
+
def initialize(root, name: nil)
|
15
|
+
@root = root
|
16
|
+
@name = name
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
"#{self.class} #{@name || @root}"
|
21
|
+
end
|
22
|
+
|
23
|
+
# The root path for this loader.
|
24
|
+
attr :root
|
25
|
+
|
26
|
+
# Enumerate all bakefiles within the loaders root directory.
|
27
|
+
#
|
28
|
+
# You can pass the yielded path to {scope_for} to load the corresponding {Scope}.
|
29
|
+
#
|
30
|
+
# @yields {|path| ...}
|
31
|
+
# @parameter path [String] The (relative) scope path.
|
32
|
+
def each
|
33
|
+
return to_enum unless block_given?
|
34
|
+
|
35
|
+
Dir.glob("**/*.rb", base: @root) do |file_path|
|
36
|
+
yield file_path.sub(/\.rb$/, '').split(File::SEPARATOR)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Load the {Scope} for the specified relative path within this loader, if it exists.
|
41
|
+
# @parameter path [Array(String)] A relative path.
|
42
|
+
def scopes_for(path)
|
43
|
+
*directory, file = *path
|
44
|
+
|
45
|
+
file_path = File.join(@root, directory, "#{file}.rb")
|
46
|
+
|
47
|
+
if File.exist?(file_path)
|
48
|
+
yield Scope.load(file_path, path)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class FileLoader
|
54
|
+
def initialize(paths)
|
55
|
+
@paths = paths
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_s
|
59
|
+
"#{self.class} #{@paths}"
|
60
|
+
end
|
61
|
+
|
62
|
+
attr :paths
|
63
|
+
|
64
|
+
def each(&block)
|
65
|
+
@paths.each_key(&block)
|
66
|
+
end
|
67
|
+
|
68
|
+
def scope_for(path)
|
69
|
+
if file_path = @paths[path]
|
70
|
+
if File.exist?(file_path)
|
71
|
+
return Scope.load(file_path, path)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2020-2024, by Samuel Williams.
|
5
|
+
|
6
|
+
require_relative 'registry/aggregate'
|
7
|
+
|
8
|
+
module Bake
|
9
|
+
# Structured access to the working directory and loaded gems for loading bakefiles.
|
10
|
+
module Registry
|
11
|
+
def self.default(...)
|
12
|
+
Aggregate.default(...)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/bake/scope.rb
CHANGED
@@ -11,20 +11,23 @@ module Bake
|
|
11
11
|
# Load the specified file into a unique scope module, which can then be included into a {Base} instance.
|
12
12
|
def self.load(file_path, path = [])
|
13
13
|
scope = Module.new
|
14
|
+
|
15
|
+
if scope.respond_to?(:set_temporary_name)
|
16
|
+
scope.set_temporary_name("#{self.name}[#{file_path}]")
|
17
|
+
end
|
18
|
+
|
14
19
|
scope.extend(self)
|
15
20
|
|
16
21
|
scope.const_set(:FILE_PATH, file_path)
|
17
22
|
scope.const_set(:PATH, path)
|
18
23
|
|
24
|
+
# yield scope if block_given?
|
25
|
+
|
19
26
|
scope.module_eval(File.read(file_path), file_path)
|
20
27
|
|
21
28
|
return scope
|
22
29
|
end
|
23
30
|
|
24
|
-
def self.inspect
|
25
|
-
"Bake::Scope<#{self.const_get(:FILE_PATH)}>"
|
26
|
-
end
|
27
|
-
|
28
31
|
# Recipes defined in this scope.
|
29
32
|
#
|
30
33
|
# @yields {|recipe| ...}
|
@@ -41,6 +44,12 @@ module Bake
|
|
41
44
|
end
|
42
45
|
|
43
46
|
# The path of the file that was used to {load} this scope.
|
47
|
+
def file_path
|
48
|
+
pp file_path_self: self
|
49
|
+
self.const_get(:FILE_PATH)
|
50
|
+
end
|
51
|
+
|
52
|
+
# The path of the scope, relative to the root of the context.
|
44
53
|
def path
|
45
54
|
self.const_get(:PATH)
|
46
55
|
end
|
data/lib/bake/version.rb
CHANGED
data/lib/bake.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
@@ -38,7 +38,7 @@ cert_chain:
|
|
38
38
|
Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
|
39
39
|
voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
|
40
40
|
-----END CERTIFICATE-----
|
41
|
-
date: 2024-
|
41
|
+
date: 2024-08-21 00:00:00.000000000 Z
|
42
42
|
dependencies:
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: bigdecimal
|
@@ -87,9 +87,11 @@ files:
|
|
87
87
|
- lib/bake/command/top.rb
|
88
88
|
- lib/bake/context.rb
|
89
89
|
- lib/bake/documentation.rb
|
90
|
-
- lib/bake/loader.rb
|
91
|
-
- lib/bake/loaders.rb
|
92
90
|
- lib/bake/recipe.rb
|
91
|
+
- lib/bake/registry.rb
|
92
|
+
- lib/bake/registry/aggregate.rb
|
93
|
+
- lib/bake/registry/bakefile_loader.rb
|
94
|
+
- lib/bake/registry/directory_loader.rb
|
93
95
|
- lib/bake/scope.rb
|
94
96
|
- lib/bake/types.rb
|
95
97
|
- lib/bake/types/any.rb
|
@@ -130,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
132
|
- !ruby/object:Gem::Version
|
131
133
|
version: '0'
|
132
134
|
requirements: []
|
133
|
-
rubygems_version: 3.5.
|
135
|
+
rubygems_version: 3.5.11
|
134
136
|
signing_key:
|
135
137
|
specification_version: 4
|
136
138
|
summary: A replacement for rake with a simpler syntax.
|
metadata.gz.sig
CHANGED
Binary file
|
data/lib/bake/loader.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Released under the MIT License.
|
4
|
-
# Copyright, 2020-2024, by Samuel Williams.
|
5
|
-
|
6
|
-
require_relative 'scope'
|
7
|
-
|
8
|
-
module Bake
|
9
|
-
# Represents a directory which contains bakefiles.
|
10
|
-
class Loader
|
11
|
-
# Initialize the loader with the specified root path.
|
12
|
-
# @parameter root [String] A file-system path.
|
13
|
-
def initialize(root, name: nil)
|
14
|
-
@root = root
|
15
|
-
@name = name
|
16
|
-
end
|
17
|
-
|
18
|
-
def to_s
|
19
|
-
"#{self.class} #{@name || @root}"
|
20
|
-
end
|
21
|
-
|
22
|
-
# The root path for this loader.
|
23
|
-
attr :root
|
24
|
-
|
25
|
-
# Enumerate all bakefiles within the loaders root directory.
|
26
|
-
# @yields {|path| ...}
|
27
|
-
# @parameter path [String] The Ruby source file path.
|
28
|
-
def each
|
29
|
-
return to_enum unless block_given?
|
30
|
-
|
31
|
-
Dir.glob("**/*.rb", base: @root) do |file_path|
|
32
|
-
yield file_path.sub(/\.rb$/, '').split(File::SEPARATOR)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# Load the {Scope} for the specified relative path within this loader, if it exists.
|
37
|
-
# @parameter path [Array(String)] A relative path.
|
38
|
-
def scope_for(path)
|
39
|
-
*directory, file = *path
|
40
|
-
|
41
|
-
file_path = File.join(@root, directory, "#{file}.rb")
|
42
|
-
|
43
|
-
if File.exist?(file_path)
|
44
|
-
return Scope.load(file_path, path)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
data/lib/bake/loaders.rb
DELETED
@@ -1,110 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Released under the MIT License.
|
4
|
-
# Copyright, 2020-2024, by Samuel Williams.
|
5
|
-
|
6
|
-
require 'console'
|
7
|
-
|
8
|
-
require_relative 'loader'
|
9
|
-
|
10
|
-
module Bake
|
11
|
-
# Structured access to the working directory and loaded gems for loading bakefiles.
|
12
|
-
class Loaders
|
13
|
-
include Enumerable
|
14
|
-
|
15
|
-
# Create a loader using the specified working directory.
|
16
|
-
# @parameter working_directory [String]
|
17
|
-
def self.default(working_directory)
|
18
|
-
loaders = self.new
|
19
|
-
|
20
|
-
loaders.append_defaults(working_directory)
|
21
|
-
|
22
|
-
return loaders
|
23
|
-
end
|
24
|
-
|
25
|
-
# Initialize an empty array of loaders.
|
26
|
-
def initialize
|
27
|
-
@roots = {}
|
28
|
-
@ordered = Array.new
|
29
|
-
end
|
30
|
-
|
31
|
-
# Whether any loaders are defined.
|
32
|
-
# @returns [Boolean]
|
33
|
-
def empty?
|
34
|
-
@ordered.empty?
|
35
|
-
end
|
36
|
-
|
37
|
-
# Add loaders according to the current working directory and loaded gems.
|
38
|
-
# @parameter working_directory [String]
|
39
|
-
def append_defaults(working_directory)
|
40
|
-
# Load recipes from working directory:
|
41
|
-
self.append_path(working_directory)
|
42
|
-
|
43
|
-
# Load recipes from loaded gems:
|
44
|
-
self.append_from_gems
|
45
|
-
end
|
46
|
-
|
47
|
-
# Enumerate the loaders in order.
|
48
|
-
def each(&block)
|
49
|
-
@ordered.each(&block)
|
50
|
-
end
|
51
|
-
|
52
|
-
# Append a specific project path to the search path for recipes.
|
53
|
-
# The computed path will have `bake` appended to it.
|
54
|
-
# @parameter current [String] The path to add.
|
55
|
-
def append_path(current = Dir.pwd, **options)
|
56
|
-
bake_path = File.join(current, "bake")
|
57
|
-
|
58
|
-
if File.directory?(bake_path)
|
59
|
-
return insert(bake_path, **options)
|
60
|
-
end
|
61
|
-
|
62
|
-
return false
|
63
|
-
end
|
64
|
-
|
65
|
-
# Search from the current working directory until a suitable bakefile is found and add it.
|
66
|
-
# @parameter current [String] The path to start searching from.
|
67
|
-
def append_from_root(current = Dir.pwd, **options)
|
68
|
-
while current
|
69
|
-
Console.logger.debug(self) {"Checking current #{current}..."}
|
70
|
-
|
71
|
-
append_path(current, **options)
|
72
|
-
|
73
|
-
parent = File.dirname(current)
|
74
|
-
|
75
|
-
if current == parent
|
76
|
-
break
|
77
|
-
else
|
78
|
-
current = parent
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# Enumerate all loaded gems and add them.
|
84
|
-
def append_from_gems
|
85
|
-
::Gem.loaded_specs.each do |name, spec|
|
86
|
-
Console.logger.debug(self) {"Checking gem #{name}: #{spec.full_gem_path}..."}
|
87
|
-
|
88
|
-
if path = spec.full_gem_path and File.directory?(path)
|
89
|
-
append_path(path, name: spec.full_name)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
protected
|
95
|
-
|
96
|
-
def insert(directory, **options)
|
97
|
-
unless @roots.key?(directory)
|
98
|
-
Console.logger.debug(self) {"Adding #{directory.inspect}"}
|
99
|
-
|
100
|
-
loader = Loader.new(directory, **options)
|
101
|
-
@roots[directory] = loader
|
102
|
-
@ordered << loader
|
103
|
-
|
104
|
-
return true
|
105
|
-
end
|
106
|
-
|
107
|
-
return false
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|