Merge Recipe::DSL into Recipe
This commit is contained in:
@@ -1,61 +0,0 @@
|
||||
module Producer
|
||||
module Core
|
||||
class Recipe
|
||||
class DSL
|
||||
class << self
|
||||
def define_macro(name, block)
|
||||
define_method(name) { |*args| task name, *args, &block }
|
||||
end
|
||||
end
|
||||
|
||||
attr_reader :env, :code, :block, :tasks
|
||||
|
||||
def initialize(env, code = nil, &block)
|
||||
@env = env
|
||||
@code = code
|
||||
@block = block
|
||||
@tasks = []
|
||||
end
|
||||
|
||||
def evaluate
|
||||
if @code
|
||||
instance_eval @code
|
||||
else
|
||||
instance_eval &@block
|
||||
end
|
||||
self
|
||||
end
|
||||
|
||||
def source(filepath)
|
||||
instance_eval File.read("./#{filepath}.rb"), "#{filepath}.rb"
|
||||
end
|
||||
|
||||
def target(hostname)
|
||||
env.target ||= hostname
|
||||
end
|
||||
|
||||
def task(name, *args, &block)
|
||||
@tasks << Task.evaluate(name, env, *args, &block)
|
||||
end
|
||||
|
||||
def macro(name, &block)
|
||||
define_singleton_method(name) do |*args|
|
||||
task("#{name}", *args, &block)
|
||||
end
|
||||
end
|
||||
|
||||
def test_macro(name, dsl: Condition::DSL, &block)
|
||||
dsl.define_test(name, block)
|
||||
end
|
||||
|
||||
def set(key, value)
|
||||
env[key] = value
|
||||
end
|
||||
|
||||
def get(key)
|
||||
env[key]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
14
lib/producer/core/recipe/file_evaluator.rb
Normal file
14
lib/producer/core/recipe/file_evaluator.rb
Normal file
@@ -0,0 +1,14 @@
|
||||
module Producer
|
||||
module Core
|
||||
class Recipe
|
||||
class FileEvaluator
|
||||
class << self
|
||||
def evaluate(file_path, env)
|
||||
content = File.read(file_path)
|
||||
Recipe.new(env).tap { |o| o.instance_eval content, file_path }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user