使 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
这是否是最好的方法,我仍然需要思考。
我有两个不同版本的应用程序,它们使用的某些方法略有不同。
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
这是否是最好的方法,我仍然需要思考。