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(context, loc) ⇒ DslCascadeBuilder

Returns a new instance of DslCascadeBuilder.



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

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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) ⇒ Object



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

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



53
54
55
56
# File 'lib/kumi/core/ruby_parser/dsl_cascade_builder.rb', line 53

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

#on(*args) ⇒ Object



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

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 = @context.fn(:cascade_and, *trait_bindings)
  result = ensure_syntax(expr)
  add_case(condition, result)
end

#on_any(*args) ⇒ Object



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

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



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

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)


65
66
67
# File 'lib/kumi/core/ruby_parser/dsl_cascade_builder.rb', line 65

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