在包装类

时间:2015-06-17 18:04:34

标签: ruby-on-rails ruby wrapper

我正在为API创建一个包装器类,因为我的应用程序需要在不同的时间使用不同的凭据调用它。我开始向包装器传递一个方法和参数,然后在调用它时(基本上)执行此操作

call
  set_credentials
  TheAPI::Thing.send(method, args)
ensure
  reset_credentials_to_default
end

但是,我意识到这里面临的挑战是如果我需要链接方法;这样我一次只能打一个;所以例如我无法TheAPI::Thing.find(id).delete。 (至少,没有重新调用凭证设置器,这是不受欢迎的,因为我必须获取令牌)。

有没有办法使用ruby来收集链接到对象上的方法/ args?或者我只是要传递一些丑陋有序的东西?

编辑:肯定activerecord的查询构建器执行类似这样的操作,在返回之前收集链接的方法,然后在它们全部收集之后,确保作为最后一步构建,调用和返回查询?

1 个答案:

答案 0 :(得分:1)

这样做的方法是定义一个代理对象并传递它而不是实际的东西。

在对象本身中,保持对Thing的引用并覆盖method_missing:http://ruby-doc.org/core-2.1.0/BasicObject.html#method-i-method_missing

在缺少的方法中做你今天做的事情。简而言之,这就是ActiveRecord正在做的事情。

就链接事物而言,我不相信这会是一个问题,因为可以链接的方法通常会返回对自我的引用。当你在链中调用第二个方法时,你实际上已经完成了第一个方法的工作,并且拥有一个在链中具有第二个方法的对象。您需要注意的唯一技巧是,如果希望链接成功,您希望返回对封装事物的代理类的引用,而不是事物的实际返回。

如果遇到麻烦我可以试一试,然后我可以打开一个完整的例子。