Commit 40c565a

mo khan <mo@mokhan.ca>
2026-08-28 18:06:14
refactor: extract prepare_output and stop dots safely worktree-bold-oak-fgv1
Deduplicate the quiet?/stop_dots/blank? prologue in print and say, and stop the dots thread with a cooperative flag plus join instead of Thread#kill so it never terminates mid-write. Claude-Session: https://claude.ai/code/session_01Y7dRDoM8i3PJt6BcBcyxqo
Changed files (1)
lib
lib/elelem/terminal.rb
@@ -43,20 +43,14 @@ module Elelem
     end
 
     def print(text)
-      return if quiet?
-
-      stop_dots
-      return if blank?(text)
+      return unless prepare_output(text)
 
       $stdout.print text
       @at_line_start = false
     end
 
     def say(text)
-      return if quiet?
-
-      stop_dots
-      return if blank?(text)
+      return unless prepare_output(text)
 
       $stdout.puts text
       @at_line_start = true
@@ -83,7 +77,7 @@ module Elelem
 
       stop_dots
       @dots_thread = Thread.new do
-        loop do
+        until Thread.current[:stop]
           $stdout.print "."
           $stdout.flush
           sleep 0.1
@@ -93,6 +87,13 @@ module Elelem
 
     private
 
+    def prepare_output(text)
+      return false if quiet?
+
+      stop_dots
+      !blank?(text)
+    end
+
     def blank?(text)
       text.nil? || text.to_s.strip.empty?
     end
@@ -100,7 +101,8 @@ module Elelem
     def stop_dots
       return unless @dots_thread
 
-      @dots_thread.kill
+      @dots_thread[:stop] = true
+      @dots_thread.join
       @dots_thread = nil
       newline
     end