无法弄清楚如何从服务类

时间:2015-12-15 14:46:38

标签: ruby-on-rails

我创建了一个服务类,唯一的工作就是在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

是首选,因此我需要一种新方法,但我不确定如何实现这一目标。

2 个答案:

答案 0 :(得分:1)

你应该这样打电话:

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

您永远不会运行实际提取配置文件信息的方法,只会初始化类。

此外,没有必要,但服务方法通常使用call(而不是run方法)实现一致性。

答案 1 :(得分:0)

你需要做的事情

  1. 您需要在初始化方法中定义该名字
  2. 将firstname添加到access_reader,如下所示,以便从类实例中读取值
  3. 然后在初始化类时调用run方法。
  4. 如下所示

    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