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 109 110 111 112 |
# File 'lib/bake/context.rb', line 99 def call(*commands) last_result = nil while command = commands.shift if recipe = @recipes[command] arguments, = recipe.prepare(commands) last_result = recipe.call(*arguments, **) else raise ArgumentError, "Could not find recipe for #{command}!" end end return last_result end |
#lookup(command) ⇒ Object
114 115 116 |
# File 'lib/bake/context.rb', line 114 def lookup(command) @recipes[command] end |
#to_s ⇒ Object
118 119 120 121 122 123 124 |
# File 'lib/bake/context.rb', line 118 def to_s if @root "#{self.class} #{File.basename(@root)}" else self.class.name end end |