def self.invoke(*args_, &builder_block_)
block_ = nil
eval_str_ = nil
target_ = nil
opts_ = {}
case args_.first
when ::String
eval_str_ = args_.shift
when ::Proc
block_ = args_.shift
end
if builder_block_
builder_ = ::Blockenspiel::Builder.new
invoke(builder_block_, builder_)
target_ = builder_._create_target
args_.shift if args_.first.nil?
else
target_ = args_.shift
unless target_
raise ::ArgumentError, "No DSL target provided"
end
end
if args_.first.kind_of?(::Hash)
opts_ = args_.shift
end
if args_.size > 0
raise ::ArgumentError, "Unexpected arguments"
end
if block_
_invoke_with_block(block_, target_, opts_)
else
_invoke_with_string(eval_str_, target_, opts_)
end
end