@ledsun blog

無味の味は佳境に入らざればすなわち知れず

ruby.wasmでrequire_relativeしたときのリダイレクトレスポンスの扱い方

require_relativeでリダイレクトレスポンスをサポートしたいと思っています。 たとえば次のようなシナリオです。

  1. require_relative "a" を実行する
  2. fetch('a.rb') を実行する
  3. a.rb にGETリクエストを送る
  4. サーバーから302レスポンスでb.rbが返ってくる
  5. b.rb にGETリクエストを送る
  6. Rubyスクリプトの取得する
  7. Kernel.evalRubyスクリプトを実行する

シーケンス図で次のようになります。

sequenceDiagram
    participant Client
    participant Server

    Client->>Client: require_relative "a"
    Client->>Client: fetch('a.rb') 
    Client->>Server: GET request './a.rb'
    Server->>Client: 302 Response with './b.rb'
    Client->>Server: GET request for './b.rb'
    Server->>Client: Ruby script transfer
    Client->>Client: Kernel.eval Ruby script

4~5のリダイレクトレスポンスに追随してGETリクエストを送る動作はfetch APIがサポートしています。 特に追加で何かする必要はありません。

気にするのは'a.rb'をロードしたつもりが、実際は'b.rb'を読み込んだシチュエーションです。 このあと require_relative "b" を実行したときにRubyスクリプト b.rb を再び実行するかどうかです。

結論としては b.rb を読込済みとし、再び実行しません。 二重読込を防止したいのは、Rubyスクリプトの実体だと考えています。 同じRubyスクリプトを別の名前で require_relaitve したときに、二度実行するのは、ユーザーの意図した動作ではないと考えます。

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy