使 Sinatra Helpers 仅在某些路由中可用(模块化应用程序)

Make Sinatra Helpers available only in some routes (modular application)

我有两个不同版本的应用程序,它们使用的某些方法略有不同。

module Sinatra
  class MyApp < Sinatra::Base
    helpers Sinatra::Version1
    helpers Sinatra::Version2
  end
end

module Sinatra
  module Version1
    def say_hello
      puts "Hello from Version1"
    end
  end
  helpers Version1
end

module Sinatra
  module Version2
    def say_hello
      puts "Hello from Version2"
    end
  end
  helpers Version2
end

我意识到以这种方式指定的助手是 "top level" 并且可用于所有路由。

我想让不同版本的方法可用于不同的路线。有什么方法可以在模块化应用程序中完成此操作吗?

如果您将应用程序拆分为两个不同的模块 类,其中 "include" 需要帮助程序,则这是可能的。例如:

# config.ru

require './app.rb'

map('/one') do
  run MyApp1
end

map('/two') do
  run MyApp2
end


# app.rb
# helper modules same as you've mentioned above.

class MyApp1 < Sinatra::Base
  helpers Sinatra::Version1

  get '/' do
    say_hello
  end
end

class MyApp2 < Sinatra::Base
  helpers Sinatra::Version2

  get '/' do
    say_hello
  end
end

这是否是最好的方法,我仍然需要思考。