class Dinero::Bank::Base
Attributes
login_url[R]
password[R]
security_questions[R]
timeout[R]
username[R]
Public Class Methods
new(options)
click to toggle source
# File lib/dinero/banks.rb, line 9 def initialize options opts = default_options.merge options @username = opts[:username] @password = opts[:password] @login_url = opts[:login_url] @security_questions = opts[:security_questions] || [] @timeout = opts[:timeout] || DEFAULT_TIMEOUT @authenticated = false validate! end
Public Instance Methods
accounts_summary_document()
click to toggle source
# File lib/dinero/banks.rb, line 62 def accounts_summary_document return @accounts_summary_document if @accounts_summary_document goto_accounts_summary_page @accounts_summary_document = Nokogiri::HTML connection.page_source end
after_successful_login()
click to toggle source
# File lib/dinero/banks.rb, line 69 def after_successful_login # NOP end
authenticated?()
click to toggle source
# File lib/dinero/banks.rb, line 54 def authenticated? !!@authenticated end
class_name()
click to toggle source
# File lib/dinero/banks.rb, line 73 def class_name self.class.to_s.downcase.gsub("dinero::bank::", '') end
connection()
click to toggle source
# File lib/dinero/banks.rb, line 50 def connection @connection ||= establish_connection end
default_options()
click to toggle source
# File lib/dinero/banks.rb, line 27 def default_options {} end
establish_connection()
click to toggle source
# File lib/dinero/banks.rb, line 39 def establish_connection capabilities = Selenium::WebDriver::Remote::Capabilities.phantomjs( 'phantomjs.page.settings.userAgent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:50.0) Gecko/20100101 Firefox/50.0', 'service_args' => ['--ignore-ssl-errors=true', '--ssl-protocol=any'] ) driver = Selenium::WebDriver.for :phantomjs, :desired_capabilities => capabilities driver.manage.window.size = Selenium::WebDriver::Dimension.new(1640, 768) driver end
find_answer(question)
click to toggle source
# File lib/dinero/banks.rb, line 31 def find_answer question if q = security_questions.detect{ |qa| qa["question"] == question } return q["answer"] else raise "Unknown security question: #{question.inspect}" end end
goto_login_page()
click to toggle source
# File lib/dinero/banks.rb, line 96 def goto_login_page connection.navigate.to login_url snap "#{class_name}_login_page.png" end
login!()
click to toggle source
# File lib/dinero/banks.rb, line 101 def login! return if authenticated? screenshot_on_error do goto_login_page post_credentials! wait.until { on_accounts_summary_page? } after_successful_login @authenticated = true end end
screenshot_on_error(name = nil) { || ... }
click to toggle source
# File lib/dinero/banks.rb, line 82 def screenshot_on_error name = nil begin yield rescue unless name class_name, method_name = caller.first.match(/(\w+)\.rb\:\d+\:in\s\`([^\']+)/).captures name = "#{class_name}_#{method_name.gsub(/\W/, '')}" end snap "#{name}_error" unless @captured_error @captured_error = true raise end end
snap(filename)
click to toggle source
# File lib/dinero/banks.rb, line 77 def snap filename filename = filename + '.png' unless filename =~ /\.png$/ connection.save_screenshot "log/#{filename}" end
validate!()
click to toggle source
# File lib/dinero/banks.rb, line 21 def validate! raise "Must supply :username" if @username.to_s.empty? raise "Must supply :password" if @password.to_s.empty? raise "Must have a :login_url" if @login_url.to_s.empty? end
wait()
click to toggle source
# File lib/dinero/banks.rb, line 58 def wait @wait ||= Selenium::WebDriver::Wait.new(:timeout => timeout) end