Sha256: 4bee1603fcdeaef37f46685cfe0a637dafde797bc3f947731ac2b3ad532b090a

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

require 'mechanize'
require 'wod/helpers'
require 'wod/version'

module Wod
  class DevCenterPage
    attr_reader :page
    
    def initialize page
      @page = page
    end
    
    def logged_in?
      (page.title =~ /sign in/i) == nil && (page.search("span").find {|s| s.text == "Log in"}) == nil
    end
    
    def search arg
      @page.search arg
    end
    
    def form arg
      @page.form arg
    end
  end

  class Client
    include Wod::Helpers
  
    attr_reader :name
  
    def initialize username, password
      @username = username
      @password = password
    end
  
    def cookies_file
      "#{home_directory}/.wod/cookie_jar"
    end
    
    def create_agent
      agent = Mechanize.new
      agent.cookie_jar.load cookies_file if File.exists?(cookies_file)
      agent
    end
  
    def agent
      @agent ||= create_agent
    end
    
    def login_and_reopen url
      page = DevCenterPage.new agent.get("https://developer.apple.com/devcenter/ios/index.action")

      unless page.logged_in?
        puts "Creating session"
        login_page = page.page.links.find { |l| l.text == 'Log in'}.click

        f = login_page.form("appleConnectForm")
        f.theAccountName = @username
        f.theAccountPW = @password
        f.submit
      end
      
      page = DevCenterPage.new agent.get url
      raise InvalidCredentials unless page.logged_in?
      agent.cookie_jar.save_as cookies_file
      page
    end

    def get url
      page = DevCenterPage.new agent.get(url)
      page = login_and_reopen(url) unless page.logged_in?
      page
    end
    
    def logged_in?
      page = get "https://developer.apple.com/devcenter/ios/index.action"
      page.logged_in?
    end
  
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wod-0.0.1 lib/wod/client.rb