Commit e67b0d6

mo khan <mo@mokhan.ca>
2025-08-12 17:57:01
refactor: extract TUI class
1 parent 8d74a93
Changed files (3)
lib/elelem/configuration.rb
@@ -1,41 +1,6 @@
 # frozen_string_literal: true
 
 module Elelem
-  class TUI
-    attr_reader :stdin, :stdout
-
-    def initialize(stdin = $stdin, stdout = $stdout)
-      @stdin = stdin
-      @stdout = stdout
-    end
-
-    def prompt(message)
-      say(message)
-      stdin.gets&.chomp
-    end
-
-    def say(message, colour: :default, newline: false)
-      formatted_message = colourize(message, colour: colour)
-      if newline
-        stdout.puts(formatted_message)
-      else
-        stdout.print(formatted_message)
-      end
-      stdout.flush
-    end
-
-    private
-
-    def colourize(text, colour: :default)
-      case colour
-      when :gray
-        "\e[90m#{text}\e[0m"
-      else
-        text
-      end
-    end
-  end
-
   class Configuration
     attr_reader :host, :model, :token, :debug
 
@@ -54,7 +19,7 @@ module Elelem
     end
 
     def tui
-      @tui ||= TUI.new
+      @tui ||= TUI.new($stdin, $stdout)
     end
 
     def api
lib/elelem/tui.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module Elelem
+  class TUI
+    attr_reader :stdin, :stdout
+
+    def initialize(stdin = $stdin, stdout = $stdout)
+      @stdin = stdin
+      @stdout = stdout
+    end
+
+    def prompt(message)
+      say(message)
+      stdin.gets&.chomp
+    end
+
+    def say(message, colour: :default, newline: false)
+      formatted_message = colourize(message, colour: colour)
+      if newline
+        stdout.puts(formatted_message)
+      else
+        stdout.print(formatted_message)
+      end
+      stdout.flush
+    end
+
+    private
+
+    def colourize(text, colour: :default)
+      case colour
+      when :gray
+        "\e[90m#{text}\e[0m"
+      else
+        text
+      end
+    end
+  end
+end
lib/elelem.rb
@@ -13,6 +13,7 @@ require_relative "elelem/application"
 require_relative "elelem/configuration"
 require_relative "elelem/conversation"
 require_relative "elelem/tools"
+require_relative "elelem/tui"
 require_relative "elelem/version"
 
 module Elelem