Class: Kumi::Core::RubyParser::DslCascadeBuilder

Inherits:
Object
  • Object
show all
Includes:
Syntax
Defined in:
lib/kumi/core/ruby_parser/dsl_cascade_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(expr, loc) ⇒ DslCascadeBuilder

‘expr` is the ExpressionConverter facade: it coerces Ruby values to AST nodes and builds fn/ref/literal/input nodes. It is NOT the BuildContext.



13
14
15
16
17
# File 'lib/kumi/core/ruby_parser/dsl_cascade_builder.rb', line 13

def initialize(expr, loc)
  @expr  = expr
  @cases = []
  @loc   = loc
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) ⇒ Object



60
61
62
63
64
65
# File 'lib/kumi/core/ruby_parser/dsl_cascade_builder.rb', line 60

def method_missing(method_name, *args, &)
  return super if !args.empty? || block_given?

  # Allow direct trait references in cascade conditions
  create_binding(method_name, @loc)
end

Instance Attribute Details

#casesObject (readonly)

Returns the value of attribute cases.



9
10
11
# File 'lib/kumi/core/ruby_parser/dsl_cascade_builder.rb', line 9

def cases
  @cases
end

Instance Method Details

#base(expr) ⇒ Object



55
56
57
58
# File 'lib/kumi/core/ruby_parser/dsl_cascade_builder.rb', line 55

def base(expr)
  result = ensure_syntax(expr)
  add_case(create_literal(true), result)
end

#on(*args) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/kumi/core/ruby_parser/dsl_cascade_builder.rb', line 19

def on(*args)
  validate_on_args(args, "on", @loc)

  trait_names = args[0..-2]
  expr = args.last

  trait_bindings = convert_trait_names_to_bindings(trait_names, @loc)
  condition = @expr.fn(:cascade_and, *trait_bindings)
  result = ensure_syntax(expr)
  add_case(condition, result)
end

#on_any(*args) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/kumi/core/ruby_parser/dsl_cascade_builder.rb', line 31

def on_any(*args)
  validate_on_args(args, "on_any", @loc)

  trait_names = args[0..-2]
  expr = args.last

  trait_bindings = convert_trait_names_to_bindings(trait_names, @loc)
  condition = create_fn(:any?, trait_bindings)
  result = ensure_syntax(expr)
  add_case(condition, result)
end

#on_none(*args) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/kumi/core/ruby_parser/dsl_cascade_builder.rb', line 43

def on_none(*args)
  validate_on_args(args, "on_none", @loc)

  trait_names = args[0..-2]
  expr = args.last

  trait_bindings = convert_trait_names_to_bindings(trait_names, @loc)
  condition = create_fn(:none?, trait_bindings)
  result = ensure_syntax(expr)
  add_case(condition, result)
end

#respond_to_missing?(_method_name, _include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/kumi/core/ruby_parser/dsl_cascade_builder.rb', line 67

def respond_to_missing?(_method_name, _include_private = false)
  true
end