gpt4 book ai didi

Ruby:重构包含正则表达式的条件语句

转载 作者:行者123 更新时间:2023-11-28 21:32:06 25 4
gpt4 key购买 nike

我有一个方法mock_request,我为了单元测试的目的而重写了它。对于每个请求,我想执行一些代码:

def mock_request(method, url, params={})
case "#{method} #{url}"
when 'post /customers'
# create customer
when %r{post /customers/(.*)/items}
id = $1 # update customer
when %r{post /customers/(.*)}
id = $1 # update customer
else
throw 'Unrecognized request'
end
end

问题是这个 case 语句变得很长,每个 case 的行数在慢慢增加。此外,同时处理多个模型。

我想做的是为每个模型创建单独的文件,并以某种方式将它们包含在这个 mock_request 方法中。像这样:

# handlers/customers.rb
module RequestHandlers
# post /customers
# post /customers/(.*)
end

# handlers/items.rb
module RequestHandlers
# post /customers/(.*)/items
end

# mock_request.rb
class MockServer
def mock_request(method, url, params={})
handle_request(method, url)
end
end

但是我不确定如何实现它。在 ruby​​ 中处理此问题的最佳方法是什么?

最佳答案

您可以创建一个散列,其中包含作为键的方法和 URL 字符串,以及作为值的要评估的代码块。

def mock_request(method, url, params={})
#create a request hash where the default value is your else, this way if a key that doesn't exist is called, the unrecognized request is called

req = Hash.new ({throw 'Unrecognized request'})
req['post /customers'] = {#create customer block/proc}
req[%r{post /customers/(.*)/items}] = {#update customer block/proc}

req["#{method} #{url}"]
end

这对您来说可能是一个更好的选择,并且可以让您摆脱冗长的案例陈述。

关于Ruby:重构包含正则表达式的条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16610446/

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