Class: Bake::Context
- Inherits:
-
Object
- Object
- Bake::Context
- Defined in:
- lib/bake/context.rb
Instance Attribute Summary collapse
-
#loaders ⇒ Object
readonly
Returns the value of attribute loaders.
-
#root ⇒ Object
readonly
Returns the value of attribute root.
-
#scope ⇒ Object
readonly
Returns the value of attribute scope.
Class Method Summary collapse
-
.bakefile_path(path, bakefile: BAKEFILE) ⇒ String?
If path points to a file, assume it’s a
bake.rbfile. - .load(path) ⇒ Object
Instance Method Summary collapse
- #call(*commands) ⇒ Object
-
#initialize(loaders, scope = nil, root = nil) ⇒ Context
constructor
A new instance of Context.
- #lookup(command) ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(loaders, scope = nil, root = nil) ⇒ Context
Returns a new instance of Context.
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/bake/context.rb', line 71 def initialize(loaders, scope = nil, root = nil) @loaders = loaders @stack = [] @instances = Hash.new do |hash, key| hash[key] = instance_for(key) end @scope = scope @root = root if @scope base = Base.derive base.prepend(@scope) @instances[[]] = base.new(self) end @recipes = Hash.new do |hash, key| hash[key] = recipe_for(key) end end |
Instance Attribute Details
#loaders ⇒ Object (readonly)
Returns the value of attribute loaders.
97 98 99 |
# File 'lib/bake/context.rb', line 97 def loaders @loaders end |
#root ⇒ Object (readonly)
Returns the value of attribute root.
96 97 98 |
# File 'lib/bake/context.rb', line 96 def root @root end |
#scope ⇒ Object (readonly)
Returns the value of attribute scope.
95 96 97 |
# File 'lib/bake/context.rb', line 95 def scope @scope end |
Class Method Details
.bakefile_path(path, bakefile: BAKEFILE) ⇒ String?
If path points to a file, assume it’s a bake.rb file. Otherwise, recursively search up the directory tree starting from path to find the specified bakefile.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/bake/context.rb', line 29 def self.bakefile_path(path, bakefile: BAKEFILE) if File.file?(path) return path end current = path while current bakefile_path = File.join(current, BAKEFILE) if File.exist?(bakefile_path) return bakefile_path end parent = File.dirname(current) if current == parent break else current = parent end end return nil end |
.load(path) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/bake/context.rb', line 55 def self.load(path) if bakefile_path = self.bakefile_path(path) scope = Scope.load(bakefile_path) working_directory = File.dirname(bakefile_path) loaders = Loaders.default(working_directory) else scope = nil working_directory = path loaders = Loaders.default(working_directory) end return self.new(loaders, scope, working_directory) end |
Instance Method Details
#call(*commands) ⇒ Object
99 100 101 102 103 104 105 106 107 108 |
# File 'lib/bake/context.rb', line 99 def call(*commands) while command = commands.shift if recipe = @recipes[command] arguments, = recipe.prepare(commands) recipe.call(*arguments, **) else raise ArgumentError, "Could not find recipe for #{command}!" end end end |
#lookup(command) ⇒ Object
110 111 112 |
# File 'lib/bake/context.rb', line 110 def lookup(command) @recipes[command] end |
#to_s ⇒ Object
114 115 116 117 118 119 120 |
# File 'lib/bake/context.rb', line 114 def to_s if @root "#{self.class} #{File.basename(@root)}" else self.class.name end end |