【发布时间】:2021-08-29 15:58:24
【问题描述】:
我正在开发一个 gem (https://rubygems.org/gems/apipie-postman),它会根据您的 Apipie 输出自动生成 Postman 文档。现在,我遇到的一个问题是每次运行 rake 任务来生成集合时,它都会生成一个新集合,而不是更新旧集合。
我正在尝试将集合 uid 保存为常量,所以如果它是 nil 我应该创建集合,否则我应该根据 uid 更新集合。
到目前为止,我尝试在课堂上使用attr_accessor,或使用Object.const_set('key', value)。问题是每次我运行 rake 任务(这就是我设置逻辑的方式 - 开发人员必须运行 rake 任务来生成文档),self.attr_accessor_value 为 nil,Object.const_defined?('key') 也为 nil .
parse_apipie_file_and_create_postman_body
if Object.const_defined?('postman_uid')
Faraday.public_send(:put, "https://api.getpostman.com/collections/#{Object.const_get('postman_uid')}", body, headers)
else
response = Faraday.public_send(:post, 'https://api.getpostman.com/collections/', body, headers)
if response.status == 200
Object.const_set('postman_uid', JSON.parse(response.body)['collection']['uid'])
end
end
【问题讨论】:
-
你能分享一些你想要做什么的示例代码吗?如果没有示例代码,别人可能很难理解您面临的问题。
-
是的,当然。我将更新问题以包含信息
-
这种方法存在很多问题,我什至不知道从哪里开始......这不是常量的用途!常量是全局引用。使用
Object.const_set将在全局命名空间中动态创建一个常量,这很少是合理的。此外,您的代码会引发异常,因为postman_uid是不正确的常量名称。您正在寻找的是一种记忆阅读器方法。将您的 rake 任务逻辑包装在服务对象中以使其更容易。
标签: ruby-on-rails ruby rubygems