0

我目前正在制作一个简单的 ruby​​ gem,它从现有的 api 获取数据并按需显示。

require 'net/http'

module SimpleGem

@@api= 'http://api.example.com'

def self.exec
  reponse = Net::HTTP.get(URI.parse(@@api))
  result = JSON.parse(reponse)
end


end

访问数据的基本方式是

演示 = SimpleGem.exec()
演示[:title]

我想把它当作对象来处理,这样我就可以访问这样的数据:

demo = SimpleGem.exec()
demo.title 
demo.description

谢谢

4

2 回答 2

1

首先,您需要设计一个具有支持属性/属性的对象。因此,在您的情况下,标题和描述是您的对象 SimpleGem 的属性。下一步是使用构造函数或访问器(getter/setter)来填充对象。

class SimpleGemObject

 #constructor
 def initialize(title,description)
  @title = title
  @description = description
 end

 #accessor methods
 def title=title
  @title = title
 end

 def description=description
  @description = description
 end
end

这为您提供了一个很好的起点,您可以在此处阅读有关 ruby​​ 中面向对象原则的更多信息

更新 无论您采用构造方法还是访问器方法,这都取决于您。这是构造函数方法的示例:

def self.exec
 reponse = Net::HTTP.get(URI.parse(@@api))
 result = JSON.parse(reponse)
 sampleObject = SampleObject.new(result[:title], result[:description])
end

您的 self.exec 现在将返回 SampleObject 类型的对象。现在,当您调用 demo = Sample.exec 时,您将能够根据需要访问 title 和 description 属性:

demo.title
demo.description
于 2013-10-12T20:04:57.650 回答
0

我现在无法测试,但也许这可以帮助你

# your module
require 'ostruct'
...

def exec
  reponse = Net::HTTP.get(URI.parse(@@api))
  OpenStruct.new(JSON.parse(reponse))
end
于 2013-10-12T19:57:32.510 回答