2015-12-15 4 views
0

Я создал класс службы, где единственное задание - получить имя человека в LinkedIn. Для этого я использую Mechanize.Не удалось выяснить, как получить данные из класса сервиса

class LinkedinProfile 

    attr_reader :page 

    def initialize(url) 
    @page = url 
    end 

    def run 
    agent = Mechanize.new 
    agent.log = Mechanize.new 'mech.log' 
    agent.user_agent_alias = 'Mac Safari' 
    linkedin_page = agent.get(@page) 

    first_name ||= linkedin_page.at(".fn").text.split(" ", 2)[0].strip if linkedin_page.at(".fn") 
    end 


end 

Мое предположение заключается в том, что ruby ​​возвращает последнюю строку, но я ошибаюсь в этом случае. Я пытаюсь найти способ, чтобы восстановить его после того, как я бегу

liprofile = LinkedinProfile.new('url') 

по существу что-то вроде

liprofile.first_name 

является предпочтительным, таким образом, я был бы нужен новый метод, но я не уверен в как добиться этого.

ответ

0

Пару вещей, которые вы должны сделать

  1. Вам нужно определить, что ПгвЬЫат в методе инициализации
  2. Добавить ПгвЬЫат в access_reader, как показано ниже, чтобы прочитать значения из экземпляров класса
  3. Затем вызовите метод запуска, когда класс инициализируется.

, как показано ниже

class LinkedinProfile 
    attr_reader :page, :first_name 

def initialize(url) 
    @page = url 
    @first_name = nil 
    self.run 
end 

def run 
    agent = Mechanize.new 
    agent.log = Mechanize.new 'mech.log' 
    agent.user_agent_alias = 'Mac Safari' 
    linkedin_page = agent.get(@page) 

    first_name ||= linkedin_page.at(".fn").text.split(" ", 2)[0].strip if linkedin_page.at(".fn") 
    end 
end 
1

вы должны назвать как это вместо:

liprofile = LinkedinProfile.new('url').run 

Вы никогда не работает метод, который на самом деле вытягивает информацию о профиле, только инициализации класса.

Кроме того, это необязательно, но методы обслуживания часто реализуются с помощью метода call (а не run в вашем случае) для согласованности.

+0

услуги часто реализуются с 'perform', а не' 'call' или run' :) –

+0

@AndreyDeineko, я никогда не видел, прежде чем выполнять, - я думаю, до тех пор, как вы поддерживать внутреннюю согласованность, это не имеет значения. Вы можете назвать свой метод #do_it! если вы действительно хотели: P – dax

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