require 'rubygems' require 'hpricot' require 'net/http' class Requester CookieStore = '.requester-wget-cookies' def initialize opts `touch #{CookieStore}` @opts = opts end def as email, pass, &block if login email, pass puts "logged in." puts "" yield self logout else puts 'login failed.' end end def login email = nil, pass = nil post '/login', 'account[email]' => email, 'account[pass]' => pass end def logout puts "" get '/logout' end def get path puts "GET #{path}" wget path end def post path, post_hash post_data = post_hash.merge('authenticity_token' => auth_token).map {|k,v| "#{k}=#{v}" }.join('&') puts "POST #{path}" wget path, %Q{--post-data="#{post_data}"} end private def wget path, *args Hpricot `wget #{File.join("http://#{@opts[:domain]}", path)} --load-cookies #{CookieStore} --save-cookies #{CookieStore} --keep-session-cookies -O - #{args.join(' ')}` end def auth_token if @auth_token @auth_token # already set elsif (auth_token_input = (get('/login') / :input).detect {|input| input.attributes['name'] == 'authenticity_token' }).nil? puts "Couldn't get auth_token." else @auth_token = auth_token_input.attributes['value'] end end end req = Requester.new :domain => 'corkboard.local' req.as 'ben@hoskings.net', 'sekrit' do puts (req.get('/transfers') / '.transfer_name').map(&:html) end