如何为我的gem添加属性?

时间:2013-10-12 19:49:28

标签: ruby-on-rails rubygems

我目前正在制作一个简单的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

访问数据的基本方法是

  

demo = SimpleGem.exec()
  演示[:标题]

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

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

感谢

2 个答案:

答案 0 :(得分:1)

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

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 here

中阅读更多关于面向对象原则的内容

<强>更新 无论您采用构造方法还是访问方法,它都取决于您。以下是构造函数方法的示例:

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时,您将能够根据需要访问标题和描述属性:

demo.title
demo.description

答案 1 :(得分:0)

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

# your module
require 'ostruct'
...

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