Module: RubyLLM::Schema::DSL::Conditionals

Included in:
RubyLLM::Schema::DSL
Defined in:
lib/ruby_llm/schema/dsl/conditionals.rb

Instance Method Summary collapse

Instance Method Details

#conditionsObject



7
8
9
# File 'lib/ruby_llm/schema/dsl/conditionals.rb', line 7

def conditions
  @conditions ||= []
end

#dependenciesObject



11
12
13
# File 'lib/ruby_llm/schema/dsl/conditionals.rb', line 11

def dependencies
  @dependencies ||= {}
end

#dependent(property, &block) ⇒ Object



15
16
17
18
19
20
# File 'lib/ruby_llm/schema/dsl/conditionals.rb', line 15

def dependent(property, &block)
  builder = ConditionalBuilder.new
  builder.instance_eval(&block)

  dependencies[property.to_s] = builder
end

#given(**properties, &block) ⇒ Object

Raises:

  • (ArgumentError)


22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/ruby_llm/schema/dsl/conditionals.rb', line 22

def given(**properties, &block)
  raise ArgumentError, "given requires at least one property condition" if properties.empty?

  if_schema = {
    properties: properties.transform_keys(&:to_s).transform_values { |v| coerce_condition(v) },
    required: properties.keys.map(&:to_s)
  }

  then_builder = ConditionalBuilder.new
  else_builder = ConditionalBuilder.new

  context = ConditionalContext.new(then_builder, else_builder)
  context.instance_eval(&block)

  condition = {if: if_schema, then: then_builder.to_schema}
  condition[:else] = else_builder.to_schema unless else_builder.empty?

  conditions << condition
end