gpt4 book ai didi

ruby - 如何从 Sinatra 中删除路由?

转载 作者:数据小太阳 更新时间:2023-10-29 07:54:00 24 4
gpt4 key购买 nike

我有一些动态加载的插件,它们在启动时会注册它们的路由,但是我还需要能够在它们被禁用时删除它们的路由。有没有办法删除现有路线?

API 没有任何我能找到的方法来删除它们,我能想到的唯一其他方法是直接转到 Sinatra::Base 中的@routes 对象,但我不确定如果你能做任何事情,如果你能……这样做安全吗?

最佳答案

查看代码几分钟后,我没有看到任何“破坏性”改变路由的代码,除了:

C:\Ruby\lib\ruby\gems\1.9.1\gems\sinatra-1.3.1\lib\sinatra\base.rb:
936 def reset!
937 @conditions = []
938: @routes = {}
939 @filters = {:before => [], :after => []}
940 @errors = {}

这是一种“从轨道上用核武器摧毁它”的方法,可能不是您需要的。根据这项调查,我认为您需要自己修改 routes 散列。

对于当前版本的代码,这对我来说看起来“安全”,因为 route!方法总是查找当前的路由数组并正常迭代它们(没有缓存):

def route!(base = settings, pass_block=nil)
if routes = base.routes[@request.request_method]
routes.each do |pattern, keys, conditions, block|
pass_block = process_route(pattern, keys, conditions) do |*args|
route_eval { block[*args] }
end
end
end

# Run routes defined in superclass.
if base.superclass.respond_to?(:routes)
return route!(base.superclass, pass_block)
end

route_eval(&pass_block) if pass_block
route_missing
end

Sinatra 存储路由的内部结构在最近的版本中发生了变化,所以我不会依赖它在没有对每个新版本进行测试的情况下始终工作。更好的是,提出一个补丁,看看是否可以将接受的功能合并到主库中。

关于ruby - 如何从 Sinatra 中删除路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8212778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com