Rails返回json取决于webhook操作是否符合DRY



我有一个webhook接收器服务,在响应中我需要发送特定的json。我想遵守DRY策略,所以我不想在22个地方重复相同的代码。预期的json应为:

render json: {
"fulfillmentMessages": [
{
"text": {
"text": [
"here is the text depends on action",
],
},
},
],
}

示例3的操作如下:

def create
action_name = params[:webhook][:queryResult][:intent][:displayName]
case action_name
when 'get-calendar'
render json: {
"fulfillmentMessages": [
{
"text": {
"text": [
"show user's calendar",
],
},
},
],
}
when 'get-room'
render json: {
"fulfillmentMessages": [
{
"text": {
"text": [
'show available meeting rooms',
],
},
},
],
}
when 'login'
render json: {
"fulfillmentMessages": [
{
"text": {
"text": [
'login user',
],
},
},
],
}
end
end

就像我写的那样,我在这里有21个动作,唯一改变的是:"文本":['文本取决于操作',],在json的情况下,是否可以不重复相同的代码?

我认为这里最好的解决方案是将这个case逻辑移动到hash:

ACTIONS = {
"get-room" => "show available meeting rooms",
"get-calendar" => "show user's calendar",
}
def create
action_name = params.dig(:webhook, :queryResult, :intent, :displayName)
render json: prepare_response(action_name)
end
def prepare_response(action_name)
{
"fulfillmentMessages": [
{
"text": {
"text": [
ACTIONS[action_name],
],
},
},
],
}
end

对于未来,也可以添加类似";验证";(警卫(

def create
action_name = params.dig(:webhook, :queryResult, :intent, :displayName)
return 'what ever you want here' if action_name.blank?
return 'here as well' if ACTIONS.keys.exclude?(action_name)
...
end

最新更新