首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby包装器模块

Ruby包装器模块
EN

Stack Overflow用户
提问于 2013-09-07 20:14:53
回答 1查看 192关注 0票数 0

我正在使用REST为第三方HTTParty API编写一个包装器。我希望能够通过调用本地模块来调用第三方API,如下所示:

代码语言:javascript
运行
复制
APIWrapper::APIObject::APIMethod

我想在APIWrapper中编写一个神奇的函数,它接受函数调用,并解码对象和方法来调用第三方API。所以上面的电话会做这样的事情:

代码语言:javascript
运行
复制
params = {
  'format' = 'json',
  'object' = api_object,
  'method' = api_method,
}

get(APIWrapper::BASE_URI, {:query => params})

我希望能够基于调用的方法自动填充api_objectapi_method,这样我就不必为我想要生成的每个API调用显式地编写一个方法。在PHP中,这将使用神奇的__get方法来完成。在Ruby中有类似的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-07 20:25:58

在Ruby中绝对可以做到这一点。您需要在const_missing上实现APIWrapper,它将返回一个实现method_missing的对象以获得API方法部分:

代码语言:javascript
运行
复制
module APIWrapper
  def const_missing(const_name)
    anon_class = Class.new do
      def method_missing(name, *params, &block)
        params = {
          'format' = 'json',
          'object' = const_name.to_s,
          'method' = name.to_s,
        }
        get(APIWrapper::BASE_URI, {:query => params})
      end
    end
  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18677508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档