module FlowEngine

def self.constantize(name)

Returns:
  • (Class, Module) -

Parameters:
  • name (String) -- e.g. "FlowEngine::LLM::Adapters::AnthropicAdapter"
def self.constantize(name)
  name.split("::").inject(Object) { |mod, const| mod.const_get(const) }
end

def self.define(&)

Raises:
  • (Errors::DefinitionError) - if no start step or no steps are defined

Returns:
  • (Definition) - frozen flow definition with start step and nodes

Other tags:
    Yield: - context of {DSL::FlowBuilder} (start, step, and rule helpers)
def self.define(&)
  builder = DSL::FlowBuilder.new
  builder.instance_eval(&)
  builder.build
end

def self.load_dsl(text)

Raises:
  • (Errors::DefinitionError) - on syntax or evaluation errors

Returns:
  • (Definition) - the definition produced by evaluating the DSL

Parameters:
  • text (String) -- Ruby source containing FlowEngine.define { ... }
def self.load_dsl(text)
  # rubocop:disable Security/Eval
  eval(text, TOPLEVEL_BINDING.dup, "(dsl)", 1)
  # rubocop:enable Security/Eval
rescue SyntaxError => e
  raise Errors::DefinitionError, "DSL syntax error: #{e.message}"
rescue StandardError => e
  raise Errors::DefinitionError, "DSL evaluation error: #{e.message}"
end