organize files into bin, lib, and test dirs
FossilOrigin-Name: a207bd9de54f2c13c832a51c766d663b04e2904e72c178756ebba72a0c15a289
change zyrtowtrnoplktwkoxqzzmokuxtotnly
commit 9f403a9b1b65120383c373bd3890a5d1e26b5f46
author alpha <alpha@kejadlen.dev>
date
parent xplsqsmu
diff --git a/ruby/Rakefile b/ruby/Rakefile
index bfd5f99..ba8c644 100644
--- a/ruby/Rakefile
+++ b/ruby/Rakefile
@@ -1,6 +1,4 @@
 require "minitest/test_task"
 
-Minitest::TestTask.create do |t|
-  t.test_globs = "./test_*.rb"
-end
+Minitest::TestTask.create
 task default: :test
diff --git a/ruby/bin/lox b/ruby/bin/lox
new file mode 100755
index 0000000..c0a2c0a
--- /dev/null
+++ b/ruby/bin/lox
@@ -0,0 +1,40 @@
+#!/usr/bin/env ruby -w
+
+$LOAD_PATH.unshift(File.expand_path("../lib", __dir__))
+
+require "lox"
+
+def run_prompt
+  loop do
+    print "> "
+    line = gets
+    break if line.nil? || line.empty?
+    begin
+      run(line)
+    rescue Lox::Error => e
+      puts e.message
+    end
+  end
+end
+
+def run_file(io)
+  run(io.read)
+rescue Lox::Error => e
+  puts e.message
+  exit 65
+end
+
+def run(src)
+  Lox::Runner.new.run(src)
+end
+
+
+if __FILE__ == $0
+  puts "Usage: #$0 [script]" or exit 64 if ARGV.length > 1
+
+  if ARGV.empty?
+    run_prompt
+  else
+    run_file(ARGF)
+  end
+end
diff --git a/ruby/lox.rb b/ruby/lib/lox.rb
old mode 100755
new mode 100644
similarity index 90%
rename from ruby/lox.rb
rename to ruby/lib/lox.rb
index b7dbda2..416c12b
--- a/ruby/lox.rb
+++ b/ruby/lib/lox.rb
@@ -13,30 +13,6 @@ module Lox
     end
   end
 
-  def self.run_prompt
-    loop do
-      print "> "
-      line = gets
-      break if line.empty?
-      begin
-        run(line)
-      rescue Error => e
-        puts e.message
-      end
-    end
-  end
-
-  def self.run_file(io)
-    run(io.read)
-  rescue Error
-    puts e.message
-    exit 65
-  end
-
-  def self.run(src)
-    Runner.new.run(src)
-  end
-
   def self.error(line, msg)
     raise Error(line:, message:)
   end
@@ -229,13 +205,3 @@ module Lox
     end
   end
 end
-
-if __FILE__ == $0
-  puts "Usage: #$0 [script]" or exit 64 if ARGV.length > 1
-
-  if ARGV.empty?
-    Lox.run_prompt
-  else
-    Lox.run_file(ARGF)
-  end
-end
diff --git a/ruby/test_lox.rb b/ruby/test/test_lox.rb
similarity index 95%
rename from ruby/test_lox.rb
rename to ruby/test/test_lox.rb
index e217fd1..1aeff9e 100644
--- a/ruby/test_lox.rb
+++ b/ruby/test/test_lox.rb
@@ -9,9 +9,10 @@ require "pry"
 
 class TestLox < Minitest::Test
   def test_error_on_more_than_one_arg
-    o, s = Open3.capture2("./lox.rb foo bar")
+    lox_path = File.expand_path("../bin/lox", __dir__)
+    o, s = Open3.capture2(lox_path, "foo", "bar")
     assert_equal 64, s.exitstatus
-    assert_equal "Usage: ./lox.rb [script]\n", o
+    assert_equal "Usage: #{lox_path} [script]\n", o
   end
 end