2013-10-12 2 views
0

В настоящее время я делаю простой рубиновый камень, который извлекает данные из существующего 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()
демонстрационная [: название]

Я хотел бы, чтобы справиться с этим, как объекты, так я могу получить доступ к следующим данным:

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

спасибо

ответ

1

Прежде всего, вам необходимо разработать объект с его поддержкой атрибутов/свойств. Итак, в вашем случае название и описание являются свойствами вашего объекта SimpleGem. Следующим шагом будет использование конструктора или аксессуаров (getters/seters) для заполнения ваших объектов.

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 

Это дает хорошую отправную точку, и вы можете прочитать больше о объектно-ориентированных принципах в рубине here

UPDATE ли принять вас конструкт подход или аксесс подхода, это действительно ДО вас. Вот пример конструктора подхода:

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. Теперь, когда вы звоните демо = Sample.exec, вы будете иметь возможность получить доступ название и описание атрибутов, как вы хотели:

demo.title 
demo.description 
+0

Если я создаю объект класса для моего драгоценного камня, и я устанавливаю атрибуты после извлечения данных, как может модуль вернуть атрибут из объекта класса gem – OWZY

+0

за вашу помощь @ rb512 и извините за мои вопросы о noob. Я открываю еще Руби. – OWZY

0

я не могу проверить это сейчас, но, возможно, это может помочь вам

# your module 
require 'ostruct' 
... 

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

он не работает, я пробовал: тест = OpenStruct.new (ответ) test.results.movie.title (json skeleton: results -> movie -> title) – OWZY

+0

как я знаю, OpenStruct выполняет то, что вы хотите, но только на одном уровне. это означает, что в вашем случае 'test.result # => {movie => title}'. Поэтому я думаю, что вы должны следовать за ответом @ rb512 и сами строить реальный объект – gotva

+0

okay gotva. Спасибо, – OWZY

Смежные вопросы