Class: Inquirex::DSL::FlowBuilder
- Inherits:
-
Object
- Object
- Inquirex::DSL::FlowBuilder
- Includes:
- RuleHelpers
- Defined in:
- lib/inquirex/dsl/flow_builder.rb
Overview
Builds a Definition from the declarative DSL block used in Inquirex.define. Provides start, meta, and all verb methods (ask, say, header, btw, warning, confirm).
Constant Summary collapse
- THEME_KEY_ALIASES =
Maps snake_case theme keys (idiomatic in Ruby) to the camelCase names the JS widget (inquirex-js ThemeOverrides) expects on the wire.
{ on_brand: :onBrand, text_muted: :textMuted, header_font: :headerFont }.freeze
Instance Method Summary collapse
-
#accumulator(name, type: :decimal, default: 0) ⇒ Object
Declares a named running total the flow accumulates into as answers come in.
-
#ask(id) { ... } ⇒ Object
Defines a question step that collects typed input from the user.
-
#btw(id) ⇒ Object
Defines an admonition or sidebar note step (no input collected).
-
#build ⇒ Definition
Produces the frozen Definition.
-
#confirm(id) ⇒ Object
Defines a yes/no confirmation gate (collects a boolean answer).
-
#header(id) ⇒ Object
Defines a section heading step (no input collected).
-
#initialize(id: nil, version: "1.0.0") ⇒ FlowBuilder
constructor
A new instance of FlowBuilder.
-
#meta(title: nil, subtitle: nil, brand: nil, theme: nil) ⇒ Object
Sets frontend metadata: title, subtitle, brand, and theme.
-
#say(id) ⇒ Object
Defines an informational message step (no input collected).
-
#start(step_id) ⇒ Object
Sets the entry step id for the flow.
-
#warning(id) ⇒ Object
Defines an important alert step (no input collected).
Methods included from RuleHelpers
#all, #any, #contains, #equals, #greater_than, #less_than, #not_empty
Constructor Details
#initialize(id: nil, version: "1.0.0") ⇒ FlowBuilder
Returns a new instance of FlowBuilder.
12 13 14 15 16 17 18 19 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 12 def initialize(id: nil, version: "1.0.0") @flow_id = id @flow_version = version @start_step_id = nil @nodes = {} @meta = {} @accumulators = {} end |
Instance Method Details
#accumulator(name, type: :decimal, default: 0) ⇒ Object
Declares a named running total the flow accumulates into as answers come in. The ‘:price` accumulator is the common lead-qualification use case; others (e.g. :complexity, :credit_score) work identically.
28 29 30 31 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 28 def accumulator(name, type: :decimal, default: 0) sym = name.to_sym @accumulators[sym] = Accumulator.new(name: sym, type:, default:) end |
#ask(id) { ... } ⇒ Object
Defines a question step that collects typed input from the user.
68 69 70 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 68 def ask(id, &) add_step(id, :ask, &) end |
#btw(id) ⇒ Object
Defines an admonition or sidebar note step (no input collected).
89 90 91 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 89 def btw(id, &) add_step(id, :btw, &) end |
#build ⇒ Definition
Produces the frozen Definition.
111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 111 def build raise Errors::DefinitionError, "No start step defined" if @start_step_id.nil? raise Errors::DefinitionError, "No steps defined" if @nodes.empty? Definition.new( start_step_id: @start_step_id, nodes: @nodes, id: @flow_id, version: @flow_version, meta: @meta, accumulators: @accumulators ) end |
#confirm(id) ⇒ Object
Defines a yes/no confirmation gate (collects a boolean answer).
103 104 105 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 103 def confirm(id, &) add_step(id, :confirm, &) end |
#header(id) ⇒ Object
Defines a section heading step (no input collected).
82 83 84 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 82 def header(id, &) add_step(id, :header, &) end |
#meta(title: nil, subtitle: nil, brand: nil, theme: nil) ⇒ Object
Sets frontend metadata: title, subtitle, brand, and theme.
57 58 59 60 61 62 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 57 def (title: nil, subtitle: nil, brand: nil, theme: nil) @meta[:title] = title if title @meta[:subtitle] = subtitle if subtitle @meta[:brand] = brand if brand @meta[:theme] = normalize_theme(theme) if theme end |
#say(id) ⇒ Object
Defines an informational message step (no input collected).
75 76 77 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 75 def say(id, &) add_step(id, :say, &) end |
#start(step_id) ⇒ Object
Sets the entry step id for the flow.
36 37 38 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 36 def start(step_id) @start_step_id = step_id end |
#warning(id) ⇒ Object
Defines an important alert step (no input collected).
96 97 98 |
# File 'lib/inquirex/dsl/flow_builder.rb', line 96 def warning(id, &) add_step(id, :warning, &) end |