Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
89ccab6
Bind net-pop into rbgo: require "net/pop" (Net::POP3 / Net::POPMail)
tannevaled Jul 6, 2026
81a4085
Bind pure-Go webrick into rbgo (require "webrick")
tannevaled Jul 6, 2026
8413594
Bind net-imap (Net::IMAP) into rbgo
tannevaled Jul 6, 2026
81abfb8
feat(vm): bind net-sftp — require "net/sftp" (Net::SFTP over injected…
tannevaled Jul 6, 2026
29bef47
Bind pure-Go net-ftp into rbgo (require "net/ftp")
tannevaled Jul 6, 2026
7b28f1b
Bind net/smtp: Net::SMTP over the real socket/TLS transport
tannevaled Jul 6, 2026
af50b28
Merge remote-tracking branch 'origin/feat/bind-net-pop' into feat/bin…
tannevaled Jul 6, 2026
aada6a9
Merge remote-tracking branch 'origin/feat/bind-webrick' into feat/bin…
tannevaled Jul 6, 2026
d802596
Merge remote-tracking branch 'origin/feat/bind-net-imap' into feat/bi…
tannevaled Jul 6, 2026
36d479a
Merge remote-tracking branch 'origin/feat/bind-net-sftp' into feat/bi…
tannevaled Jul 6, 2026
88884ae
Merge remote-tracking branch 'origin/feat/bind-net-ftp' into feat/bin…
tannevaled Jul 6, 2026
b7a613e
Merge remote-tracking branch 'origin/feat/bind-net-smtp' into feat/bi…
tannevaled Jul 6, 2026
401e383
feat(vm): bind net-smtp/imap/pop/ftp/sftp + webrick stdlib libs
tannevaled Jul 6, 2026
ec6cb60
fix(net-ftp): derive default remote name with an OS-aware basename
tannevaled Jul 6, 2026
4cb0156
Merge remote-tracking branch 'origin/main' into feat/bind-netwave
tannevaled Jul 7, 2026
c8c4084
test(net-http): skip the CGI HTTP_PROXY-ignored assertion on Windows
tannevaled Jul 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,12 @@ require (
github.com/go-ruby-mustache/mustache v0.0.0-20260701123847-26d5e451677a
github.com/go-ruby-mysql/mysql v0.0.0-20260704103258-b9ed4a15ba9d
github.com/go-ruby-nats/nats v0.0.0-20260704105415-42cce800b0e7
github.com/go-ruby-net-ftp/net-ftp v0.0.0-20260630142044-917edc09066e
github.com/go-ruby-net-http/net-http v0.0.0-20260630124155-c794366ce72f
github.com/go-ruby-net-imap/net-imap v0.0.0-20260630193116-82cd428e7b0f
github.com/go-ruby-net-pop/net-pop v0.0.0-20260630142109-66d7036032f5
github.com/go-ruby-net-sftp/net-sftp v0.0.0-20260630142744-9be6f27056d7
github.com/go-ruby-net-smtp/net-smtp v0.0.0-20260630142921-0151ad2e87f5
github.com/go-ruby-nokogiri/nokogiri v0.0.0-20260702164556-6e939959240e
github.com/go-ruby-oauth2/oauth2 v0.0.0-20260702151234-88fab8d845a1
github.com/go-ruby-observer/observer v0.0.0-20260630080708-c3a02da51f79
Expand Down Expand Up @@ -147,6 +152,7 @@ require (
github.com/go-ruby-uri/uri v0.0.0-20260629113958-59633d1b0deb
github.com/go-ruby-warden/warden v0.0.0-20260706120446-d887742539ef
github.com/go-ruby-webauthn/webauthn v0.0.0-20260704120708-35595b0ac27b
github.com/go-ruby-webrick/webrick v0.0.0-20260630133907-a1380ee7733b
github.com/go-ruby-xslt/xslt v0.0.0-20260702171958-146eaf3f0176
github.com/go-ruby-yaml/yaml v0.0.0-20260629093916-8035038027bd
github.com/go-ruby-zeitwerk/zeitwerk v0.0.0-20260706163820-cda238c0e98c
Expand Down
12 changes: 12 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -338,8 +338,18 @@ github.com/go-ruby-mysql/mysql v0.0.0-20260704103258-b9ed4a15ba9d h1:tlOKd49moGe
github.com/go-ruby-mysql/mysql v0.0.0-20260704103258-b9ed4a15ba9d/go.mod h1:ppWK2CmOURx2o9vRsiGVeIZHI/AjCSq0RX74ssEZG8g=
github.com/go-ruby-nats/nats v0.0.0-20260704105415-42cce800b0e7 h1:F+ghhcdLDBVGG977zAq2WQGos1HgRLj/jHJqkIiLL6E=
github.com/go-ruby-nats/nats v0.0.0-20260704105415-42cce800b0e7/go.mod h1:cm0D4pmaTvvQFPK815E7/uJaGeGxkr5xFLHixeQixTA=
github.com/go-ruby-net-ftp/net-ftp v0.0.0-20260630142044-917edc09066e h1:OJa/XKKm+bxdCoM3UKpmsgnk8hl3bFz25jEbZCvd08I=
github.com/go-ruby-net-ftp/net-ftp v0.0.0-20260630142044-917edc09066e/go.mod h1:1H5yOndya/hONJxNjd0oAbRyCAyurxcbze0FXlF2ExA=
github.com/go-ruby-net-http/net-http v0.0.0-20260630124155-c794366ce72f h1:nS0qwCPtVAtp+48j6KkdTdpVL8jT9L2ZGQcJZwOKev8=
github.com/go-ruby-net-http/net-http v0.0.0-20260630124155-c794366ce72f/go.mod h1:PiNQDuyrSPZX8OzApvgyn1fTjRNwx0KNO1vrzdAguEc=
github.com/go-ruby-net-imap/net-imap v0.0.0-20260630193116-82cd428e7b0f h1:rnyq1kTbCxqBQ0UlhaF4I2g+9TnmBLuMFTw4brsInaE=
github.com/go-ruby-net-imap/net-imap v0.0.0-20260630193116-82cd428e7b0f/go.mod h1:jKlWC6EDNkTFr5BDzA7+UAMFXsKLwIy5r9zKqxXSM+U=
github.com/go-ruby-net-pop/net-pop v0.0.0-20260630142109-66d7036032f5 h1:vmwYSD3D+m8vNWaA+I+lD8Ufmnw+rDHbs4askNBcFZo=
github.com/go-ruby-net-pop/net-pop v0.0.0-20260630142109-66d7036032f5/go.mod h1:9+NyzWDudIY8eetFY066OKgrU8bk7ZVqDRKAjFBIwng=
github.com/go-ruby-net-sftp/net-sftp v0.0.0-20260630142744-9be6f27056d7 h1:5aKzjgwxqqMvHLyQOJrDO8GLJUdE1izGJTLDG+3+V5k=
github.com/go-ruby-net-sftp/net-sftp v0.0.0-20260630142744-9be6f27056d7/go.mod h1:okvDFdQDwwx5ubNL6mmXTHGTutWhOTHSnUPq1JzhxoU=
github.com/go-ruby-net-smtp/net-smtp v0.0.0-20260630142921-0151ad2e87f5 h1:5WuRAb8NO7UCHTVUel5LmZfI0A76obGtDOYAzlhrKmM=
github.com/go-ruby-net-smtp/net-smtp v0.0.0-20260630142921-0151ad2e87f5/go.mod h1:+XJbVnPobgkWUscH8bDSw9F3jW6t3QY35DEAyE9qE9Q=
github.com/go-ruby-nokogiri/nokogiri v0.0.0-20260702164556-6e939959240e h1:v8DyCc3Vp+REhN1uyQ4wN8CpJ6JMqWNOm9OESWFBtLU=
github.com/go-ruby-nokogiri/nokogiri v0.0.0-20260702164556-6e939959240e/go.mod h1:WsLJ6/u8/nzHShZKChf20tHosn/nlVnOJiD/xEY6X8c=
github.com/go-ruby-oauth2/oauth2 v0.0.0-20260702151234-88fab8d845a1 h1:iZFtIn5WHQRz/oa04qYAlLvTi0XDRP5dKPGpJTGRzKg=
Expand Down Expand Up @@ -456,6 +466,8 @@ github.com/go-ruby-warden/warden v0.0.0-20260706120446-d887742539ef h1:JLPi8PmkO
github.com/go-ruby-warden/warden v0.0.0-20260706120446-d887742539ef/go.mod h1:oI3L9dywsrSXJqLDuJGIYuHUHRCxUS7BU8PBZGXpx4A=
github.com/go-ruby-webauthn/webauthn v0.0.0-20260704120708-35595b0ac27b h1:ZwN0q9xq9HUGCskWGz8rmL+v6MaHy+AM99oictlPlBs=
github.com/go-ruby-webauthn/webauthn v0.0.0-20260704120708-35595b0ac27b/go.mod h1:tLv8PWrPxrOQrJWMFTfRi6wfZpSjZtmfxHKgGwUriR8=
github.com/go-ruby-webrick/webrick v0.0.0-20260630133907-a1380ee7733b h1:T7H6p2VhpU/05o/XSlsCT3YfMznMhcuShu8iDyDVeqU=
github.com/go-ruby-webrick/webrick v0.0.0-20260630133907-a1380ee7733b/go.mod h1:0DF9Jl9o+cvEvPCzCJ95nHIlF7qz8yzuQIyfMm8FUlM=
github.com/go-ruby-xslt/xslt v0.0.0-20260702171958-146eaf3f0176 h1:iHTCF/Eu0/lwOEank8pLKqoW5j9MI2ERXErrvqsZZ+4=
github.com/go-ruby-xslt/xslt v0.0.0-20260702171958-146eaf3f0176/go.mod h1:1C3Bx0pQIsqLqC2SnqV7pJnGuLJsgYmar2NrD+CmVXw=
github.com/go-ruby-yaml/yaml v0.0.0-20260629093916-8035038027bd h1:4HGjgCdTIuIEM+iZXJ9hJJzt0IBMtxPqdJq72mr0Y64=
Expand Down
6 changes: 6 additions & 0 deletions internal/vm/builtins.go
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,9 @@ func (vm *VM) bootstrap() {
vm.registerSocket() // TCPSocket/TCPServer (net) + OpenSSL::SSL::SSLSocket (crypto/tls); after registerOpenSSL (upgrades its SSL shell)
vm.registerNetHTTP() // net/http + net/https loadable shell; needs StandardError
vm.registerNetHTTPTransport() // real Net::HTTP over the socket transport; after registerNetHTTP + registerSocket
vm.registerNetPOP() // Net::POP3/Net::POPMail (require "net/pop"), backed by go-ruby-net-pop codec; socket = injected IO seam; after registerNetHTTP (Net module) + registerSocket/registerOpenSSL
vm.registerNetSFTP() // Net::SFTP client (require "net/sftp"), backed by go-ruby-net-sftp codec; SSH channel = injected IO seam; nests under Net, after registerNetHTTP
vm.registerNetFTP() // real Net::FTP over the socket transport; after registerNetHTTP (Net module) + registerSocket/registerOpenSSL
vm.registerResolv() // Resolv (real IPv4/IPv6 parse; DNS sockets stubbed); needs StandardError
vm.registerTimeout() // Timeout module (loadable shell); needs RuntimeError
vm.registerDateErrors() // Date::Error < ArgumentError (Date class itself registered early); needs ArgumentError
Expand Down Expand Up @@ -478,6 +481,8 @@ func (vm *VM) bootstrap() {
vm.registerSQLite3() // SQLite3::Database/Statement (require "sqlite3"), backed by go-ruby-sqlite3 (modernc); needs StandardError for SQLite3::Exception
vm.registerRedis() // Redis client (require "redis"), backed by go-ruby-redis RESP codec; socket = injected IO seam; needs StandardError for Redis::BaseError
vm.registerPG() // PG::Connection/Result (require "pg"), backed by go-ruby-pg v3 protocol; socket = injected IO seam; needs StandardError for PG::Error
vm.registerNetIMAP() // Net::IMAP (require "net/imap"), backed by go-ruby-net-imap builder+parser; socket = injected IO seam; after socket/openssl so a TCPSocket/SSLSocket can be the TLS seam
vm.registerNetSMTP() // Net::SMTP (require "net/smtp"), backed by go-ruby-net-smtp codec over rbgo's real socket/TLS transport; after registerSocket/registerNetHTTP (Net module + transport)
vm.registerSidekiq() // Sidekiq::Client/Job(Worker) + module (require "sidekiq"), backed by go-ruby-sidekiq over go-redis/v9; Redis client dialled from Sidekiq.redis/ENV; perform body is Ruby seam; needs StandardError for Sidekiq::Error
vm.registerResque() // Resque module + Job/Worker/Failure (require "resque"), backed by go-ruby-resque over go-redis/v9; @queue resolver + self.perform are Ruby seams; needs StandardError for Resque::Error
vm.registerSequel() // Sequel query builder + Database (require "sequel"), backed by go-ruby-sequel; executor seam wired to SQLite3::Database (real execution)
Expand All @@ -486,6 +491,7 @@ func (vm *VM) bootstrap() {
vm.registerRSpec() // RSpec matcher + expect surface (require "rspec"), backed by go-ruby-rspec; needs Exception for ExpectationNotMetError
vm.registerRuboCop() // RuboCop::Runner#inspect/autocorrect + Cop::Offense (require "rubocop"), backed by go-ruby-rubocop over go-ruby-parser; needs StandardError for RuboCop::Error
vm.registerRack() // Rack::Request/Response/Utils (require "rack" / "rack/utils"), backed by go-ruby-rack; deterministic env/query/escape, no socket
vm.registerWEBrick() // WEBrick::HTTPServer/HTTPRequest/HTTPResponse/HTTPServlet/HTTPStatus (require "webrick"), backed by go-ruby-webrick; deterministic parse/build/mount-dispatch, no socket; the mount_proc block / servlet do_* method is the rbgo seam run inline under the GVL; needs StandardError (WEBrick::HTTPStatus family)
vm.registerGrape() // Grape::Router/Validator/Formatter (require "grape"), backed by go-ruby-grape; endpoint-block exec + Rack env are host seams; needs StandardError for Grape::Exceptions
vm.registerSinatra() // Sinatra::Base class-DSL + #call Rack adapter (require "sinatra/base"), backed by go-ruby-sinatra over go-ruby-rack; route/filter block eval is the rbgo seam; needs Rack + StandardError (Sinatra::NotFound), so registered after registerRack
vm.registerRoda() // Roda class routing-tree DSL (route do |r| … end) + #call Rack adapter (require "roda"), backed by go-ruby-roda over go-ruby-rack; the route/matcher block eval is the rbgo seam, the routing tree is the library; needs Rack + StandardError (Roda::RodaError)
Expand Down
Loading
Loading