class Gillbus

FIXME: it's possible I got currency for some fields wrong.

результаты поиска по соседним городам, берется из кеша и содержит меньше данных, чем поездка из выдачи

Constants

VERSION

Attributes

driver[R]

Faraday instance

session_id[RW]

JSESSIONID сессии API gillbus

timezone[RW]

Public Class Methods

make_cookies(session_id) click to toggle source
# File lib/gillbus.rb, line 46
def self.make_cookies(session_id)
  if session_id.include?('|')
    session_id, gclb = session_id.split('|')
    "JSESSIONID=#{session_id}; GCLB=#{gclb}"
  else
    "JSESSIONID=#{session_id}"
  end
end
make_session_id(parsed_cookies) click to toggle source
# File lib/gillbus.rb, line 55
def self.make_session_id(parsed_cookies)
  gclb = parsed_cookies['GCLB'].first
  session_id = parsed_cookies['JSESSIONID'].first
  if gclb.present?
    [session_id, gclb].join('|')
  else
    session_id
  end
end
new(driver:, session_id: nil, timezone: nil) click to toggle source

driver: e.g. Faraday.new(url: 'demo.gillbus.com')

# File lib/gillbus.rb, line 6
def initialize(driver:, session_id: nil, timezone: nil)
  @driver = driver
  @session_id = session_id
  @timezone = timezone
end
register(klass, method_name) click to toggle source
# File lib/gillbus.rb, line 23
def self.register(klass, method_name)
  define_method method_name do |*args|
    request_class = klass::Request
    response_class = klass::Response
    request = request_class.new(*args)
    headers = {}
    headers['Cookie'] = self.class.make_cookies(session_id) if session_id
    headers['Accept-Encoding'] = 'gzip'
    headers['Host'] = driver.host
    request_time_start = Time.now
    http_response = driver.public_send(request.method, request.path, request.params, headers)
    request_time_end = Time.now
    result = response_class.parse_string(http_response.body.force_encoding('utf-8'), timezone: timezone)
    cookie_string = http_response.headers['Set-Cookie']
    if cookie_string
      self.session_id = self.class.make_session_id(CGI::Cookie.parse(cookie_string))
    end
    result.session_id = session_id
    result.request_time = request_time_end - request_time_start
    result
  end
end

Public Instance Methods

login(password:, locale: nil) click to toggle source
# File lib/gillbus.rb, line 18
def login(password:, locale: nil)
  session_login password: password, locale: locale
  self
end