class MyEpisodes::Client

Public Class Methods

create(username, password, agent=Mechanize.new) click to toggle source
# File lib/my_episodes/client.rb, line 5
def self.create(username, password, agent=Mechanize.new)
  client = self.new(agent)
  client.login(username, password)
  client
end
new(agent=Mechanize.new) click to toggle source
# File lib/my_episodes/client.rb, line 11
def initialize(agent=Mechanize.new)
  @agent = agent
  @page = nil
end

Public Instance Methods

login(username, password) click to toggle source
# File lib/my_episodes/client.rb, line 16
def login(username, password)
  unless @page
    page = @agent.get(login_url)
    form = page.form_with(action: 'login.php', method: 'POST')
    form.username = username
    form.password = password
    form.u = life_wasted
    @page = form.submit(form.buttons.first)
    ensure_logged_in
  end
end
logout() click to toggle source
# File lib/my_episodes/client.rb, line 32
def logout
  if @page
    @page.link_with(text: /Logout/).click
    @page = nil
  end
end
shows() click to toggle source
# File lib/my_episodes/client.rb, line 28
def shows
  @shows ||= Shows.new(parser).create(shows_links).to_a
end

Private Instance Methods

ensure_logged_in() click to toggle source
# File lib/my_episodes/client.rb, line 66
def ensure_logged_in
  if still_on_login_page? && login_warning?
    @page = nil
    raise AuthenticationError, 'wrong username / password'
  end
end
life_wasted() click to toggle source
# File lib/my_episodes/client.rb, line 53
def life_wasted
  @life_wasted ||= 'life_wasted.php'
end
login_url() click to toggle source
# File lib/my_episodes/client.rb, line 49
def login_url
  @login_url ||= 'http://www.myepisodes.com/login.php'
end
login_warning?() click to toggle source
# File lib/my_episodes/client.rb, line 61
def login_warning?
  warning_text = @page.search('#divContainer div.warning').text.strip
  warning_text && warning_text.match(/wrong username.+password/i)
end
parser() click to toggle source
# File lib/my_episodes/client.rb, line 41
def parser
  @parser ||= TableParser.new
end
still_on_login_page?() click to toggle source
# File lib/my_episodes/client.rb, line 57
def still_on_login_page?
  @page.title && @page.title.match(/: Login Page/i)
end