class BookmeterScraper::Agent

Attributes

log_in_user_id[R]

Public Class Methods

new() click to toggle source
# File lib/bookmeter_scraper/agent.rb, line 12
def initialize
  @agent = Mechanize.new do |a|
    a.user_agent_alias = Mechanize::AGENT_ALIASES.keys.reject do |ua_alias|
      %w(Android iPad iPhone Mechanize).include?(ua_alias)
    end.sample
  end
  @log_in_user_id = nil
end

Public Instance Methods

log_in(config) click to toggle source
# File lib/bookmeter_scraper/agent.rb, line 21
def log_in(config)
  raise ArgumentError if config.nil?

  page_after_submitting_form = nil
  @agent.get(BookmeterScraper::LOGIN_URI) do |page|
    page_after_submitting_form = page.form_with(action: '/login') do |form|
      form.field_with(name: 'mail').value     = config.mail
      form.field_with(name: 'password').value = config.password
    end.submit
  end

  if page_after_logging_in? page_after_submitting_form
    mypage = page_after_submitting_form.link_with(text: 'マイページ').click
    @log_in_user_id = extract_user_id(mypage)
  else
    nil
  end
end
logged_in?() click to toggle source
# File lib/bookmeter_scraper/agent.rb, line 40
def logged_in?
  !@log_in_user_id.nil?
end

Private Instance Methods

extract_user_id(page) click to toggle source
# File lib/bookmeter_scraper/agent.rb, line 53
def extract_user_id(page)
  raise ArgumentError if page.nil?

  page.uri.to_s.match(/\/u\/(\d+)$/)[1]
end
page_after_logging_in?(page) click to toggle source
# File lib/bookmeter_scraper/agent.rb, line 47
def page_after_logging_in?(page)
  raise ArgumentError if page.nil?

  page.uri.to_s == BookmeterScraper::ROOT_URI + '/'
end