class MyBcycle::User
Attributes
city[R]
password[R]
username[R]
Public Class Methods
new(city: :austin, username:, password:)
click to toggle source
# File lib/my_bcycle.rb, line 10 def initialize(city: :austin, username:, password:) @city = city @username = username @password = password end
Public Instance Methods
statistics_for(time)
click to toggle source
# File lib/my_bcycle.rb, line 16 def statistics_for(time) return unless session_token response = do_request! Typhoeus::Request.new( "https://portal-den.bcycle.com/1/user/trips", params: { month: time.month, year: time.year, }, headers: { 'Bcycle-Session-Token': session_token }, accept_encoding: "gzip" ) parse_statistics(response.body) end
Private Instance Methods
do_request!(request)
click to toggle source
# File lib/my_bcycle.rb, line 81 def do_request!(request) request.on_complete do |response| next if response.success? if response.timed_out? raise CommunicationProblem, "Timeout" elsif response.code == 0 raise CommunicationProblem, response.return_message.to_s else raise CommunicationProblem, "Got error code #{response.code}" end end request.run end
login_params()
click to toggle source
# File lib/my_bcycle.rb, line 104 def login_params { UserName: username, Password: password, } end
login_request!(cookie_path)
click to toggle source
# File lib/my_bcycle.rb, line 60 def login_request!(cookie_path) login_req = do_request! Typhoeus::Request.new( login_url, method: :post, cookiefile: cookie_path, cookiejar: cookie_path, body: login_params ) if login_req.body =~ /Invalid UserName/i raise InvalidCredentials end end
login_url()
click to toggle source
# File lib/my_bcycle.rb, line 96 def login_url "https://#{city}.bcycle.com/api/Authenticate" end
parse_statistics(body)
click to toggle source
# File lib/my_bcycle.rb, line 32 def parse_statistics(body) JSON.parse(body).map do |entry| k = Time.parse entry["checkOutDate"] v = { miles: entry["miles"], duration: entry["duration"], money_saved: entry["moneySaved"], } [k, v] end.to_h end
retrieve_token()
click to toggle source
# File lib/my_bcycle.rb, line 48 def retrieve_token cookiefile = Tempfile.new("bcycle-cookie") cookie_path = cookiefile.path begin login_request!(cookie_path) token_request!(cookie_path).body[/\A"([a-z0-9\-]{36})"/i, 1] end ensure cookiefile.close cookiefile.unlink end
session_token()
click to toggle source
# File lib/my_bcycle.rb, line 44 def session_token @session_token ||= retrieve_token end
token_request!(cookie_path)
click to toggle source
# File lib/my_bcycle.rb, line 73 def token_request!(cookie_path) do_request! Typhoeus::Request.new( token_url, cookiefile: cookie_path, cookiejar: cookie_path ) end
token_url()
click to toggle source
# File lib/my_bcycle.rb, line 100 def token_url "https://#{city}.bcycle.com/api/sessiontoken/get" end