Extract recipe DSL code and spec
This commit is contained in:
@@ -18,41 +18,6 @@ module Producer
|
||||
dsl = DSL.new(@code).evaluate(env)
|
||||
dsl.tasks.map(&:evaluate)
|
||||
end
|
||||
|
||||
|
||||
class DSL
|
||||
attr_reader :tasks
|
||||
|
||||
def initialize(code = nil, &block)
|
||||
@code = code
|
||||
@block = block
|
||||
@tasks = []
|
||||
end
|
||||
|
||||
def evaluate(env)
|
||||
if @code
|
||||
instance_eval @code, env.current_recipe.filepath
|
||||
else
|
||||
instance_eval &@block
|
||||
end
|
||||
self
|
||||
rescue NameError => e
|
||||
err = RecipeEvaluationError.new("invalid recipe keyword `#{e.name}'")
|
||||
err.set_backtrace e.backtrace.reject { |l| l =~ /\/producer-core\// }
|
||||
raise err
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
def source(filepath)
|
||||
instance_eval File.read("./#{filepath}.rb")
|
||||
end
|
||||
|
||||
def task(name, &block)
|
||||
@tasks << Task.new(name, &block)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
39
lib/producer/core/recipe/dsl.rb
Normal file
39
lib/producer/core/recipe/dsl.rb
Normal file
@@ -0,0 +1,39 @@
|
||||
module Producer
|
||||
module Core
|
||||
class Recipe
|
||||
class DSL
|
||||
attr_reader :tasks
|
||||
|
||||
def initialize(code = nil, &block)
|
||||
@code = code
|
||||
@block = block
|
||||
@tasks = []
|
||||
end
|
||||
|
||||
def evaluate(env)
|
||||
if @code
|
||||
instance_eval @code, env.current_recipe.filepath
|
||||
else
|
||||
instance_eval &@block
|
||||
end
|
||||
self
|
||||
rescue NameError => e
|
||||
err = RecipeEvaluationError.new("invalid recipe keyword `#{e.name}'")
|
||||
err.set_backtrace e.backtrace.reject { |l| l =~ /\/producer-core\// }
|
||||
raise err
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
def source(filepath)
|
||||
instance_eval File.read("./#{filepath}.rb")
|
||||
end
|
||||
|
||||
def task(name, &block)
|
||||
@tasks << Task.new(name, &block)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user