Class: Terret::Prompt

Inherits:
Hames::Service
  • Object
show all
Defined in:
lib/terret/loop.rb

Overview

ctx.prompt — minimal prompt assembly: priority-ordered sections rendered per step; registration is an effect.

Instance Method Summary collapse

Instance Method Details

#register_section(name, priority: 100, &block) ⇒ Object



125
126
127
128
129
130
131
# File 'lib/terret/loop.rb', line 125

def register_section(name, priority: 100, &block)
  entry = [priority, name.to_s, block]
  @ctx.effect do
    @sections << entry
    -> { @sections.delete(entry) }
  end
end

#render(env = {}) ⇒ Object



133
134
135
136
137
# File 'lib/terret/loop.rb', line 133

def render(env = {})
  @sections.sort_by { |(p, n, _)| [p, n] }
           .filter_map { |(_, _, b)| b.call(env) }
           .join("\n\n")
end

#start(ctx) ⇒ Object



120
121
122
123
# File 'lib/terret/loop.rb', line 120

def start(ctx)
  @ctx = ctx
  @sections = []
end