Я очень новичок в рубине и рельсах. Я пытаюсь вывести всю проанализированную информацию whois в вывод json. У меня есть следующее:
class WhoisController < ApplicationController
def index
c = Whois::Client.new
record = c.lookup("google.com")
parser = record.parser
created = parser.created_on
msg = {:created => created}
render :json => msg
end
end
Выход:
{"created":"1997-09-15T00:00:00.000-07:00"}
Тем не менее, синтаксический анализатор имеет НАМНОГО больше доступной информации .... не зная всех доступных полей, как мне сбросить все ключи/значения в json?
Я пытался:
class WhoisController < ApplicationController
def index
c = Whois::Client.new
record = c.lookup("google.com")
parser = record.parser
msg = {:whois => parser}
render :json => msg
end
end
Но в итоге получаю:
SystemStackError in WhoisController#index
РЕДАКТИРОВАТЬ:
Я также пробовал:
parser.attributes.each do |attr_name, attr_value|
puts attr_name
end
Но в итоге получаю другую ошибку:
undefined method `attributes' for #<Whois::Parser:0x00007fc030d74018>
И Python, и Go (путем отражения) могут это сделать. Каков способ Ruby для достижения этого?
РЕДАКТИРОВАТЬ:
class WhoisController < ApplicationController
def index
c = Whois::Client.new
record = c.lookup("google.com")
parser = record.parser
msg = {}
for x_prop in Whois::Parser::PROPERTIES
msg[x_prop] = parser.send(x_prop)
end
render :json => msg
end
end
Это работает ТОЛЬКО если все свойства существуют в парсере. Однако некоторые доменные имена не обладают всеми свойствами, что приведет к следующему:
Unable to find a parser for property `registrant_contacts'
Затем я пытаюсь установить его, только если это свойство существует:
msg = {}
for x_prop in Whois::Parser::PROPERTIES
parser.has_attribute?(:x_prop)
msg[x_prop] = parser.send(x_prop)
end
render :json => msg
Я получаю другую ошибку:
undefined method `has_attribute?'
РЕДАКТИРОВАТЬ № 3:
Я также пробовал:
msg = {}
for prop in Whois::Parser::PROPERTIES
msg[prop] = parser.send(prop) if parser.respond_to?(prop)
end
render :json => msg
Это по-прежнему не работает, если свойство отсутствует в синтаксическом анализаторе. ;(