class Gillbus::V2::Client

Attributes

access_token[R]
base_url[R]

Public Class Methods

new(base_url:, access_token: nil) click to toggle source
# File lib/gillbus/v2/client.rb, line 6
def initialize(base_url:, access_token: nil)
  @base_url = base_url
  @access_token =
    if access_token.is_a?(Structs::AccessToken)
      access_token
    elsif access_token.is_a?(String)
      Structs::AccessToken.from_token_string(access_token)
    elsif access_token.is_a?(Hash)
      Structs::AccessToken.from_raw_data(access_token)
    end
end

Public Instance Methods

authenticate(username:, password:, lang:, time_zone:) click to toggle source
# File lib/gillbus/v2/client.rb, line 22
def authenticate(username:, password:, lang:, time_zone:)
  params = {
    username: username,
    password: password,
    lang: lang,
    timeZone: time_zone,
  }
  response = call_api(:post, "/v2/login", params,
    auth_required: false,
    response_class: Responses::Authenticate,
  )
  @access_token = response.access_token
  response
end
authenticate!(**args) click to toggle source
# File lib/gillbus/v2/client.rb, line 37
def authenticate!(**args)
  response = authenticate(**args)
  unless authenticated?
    raise AuthenticationFailed, response.error_message
  end
end
authenticated?() click to toggle source
# File lib/gillbus/v2/client.rb, line 18
def authenticated?
  !access_token.nil? && !access_token.expired?
end
get_locations(langs: %w[en], limit_for_page: 50, from_datetime: nil) click to toggle source
# File lib/gillbus/v2/client.rb, line 44
def get_locations(langs: %w[en], limit_for_page: 50, from_datetime: nil)
  params = {
    lang_array: langs,
    limit: limit_for_page,
    timestamp: from_datetime&.rfc3339,
  }
  call_api(:get, "/geo/v2/locations", params,
    response_class: Responses::Locations,
  )
end
get_locations_page(pagination_uuid:, page_number:) click to toggle source
# File lib/gillbus/v2/client.rb, line 55
def get_locations_page(pagination_uuid:, page_number:)
  params = {
    page_uuid: pagination_uuid,
    number_page: page_number,
  }
  call_api(:get, "/geo/v2/locations/page", params,
    response_class: Responses::Locations,
  )
end
get_trip_seats(trip_id:, date:, back_date: nil, passengers_count: 1) click to toggle source
# File lib/gillbus/v2/client.rb, line 93
def get_trip_seats(trip_id:, date:, back_date: nil, passengers_count: 1)
  params = {
    date: date,
    back_date: back_date,
    pass_count: passengers_count,
  }
  call_api(:get, "/search/v2/trips/#{trip_id}/seats", params,
    response_class: Responses::TripSeats,
  )
end
search_trips(from_id:, to_id:, date:, back_date: nil, passengers_count: 1, search_mode: "full", limit_for_page: 20) click to toggle source

search_mode:

  • full - искать все рейсы (по умолчанию)

  • direct - искать только прямые рейсы

# File lib/gillbus/v2/client.rb, line 68
def search_trips(from_id:, to_id:, date:, back_date: nil, passengers_count: 1, search_mode: "full", limit_for_page: 20)
  params = {
    from_id: from_id,
    to_id: to_id,
    date: date.iso8601,
    back_date: back_date&.iso8601,
    pass_count: passengers_count,
    search_mode: search_mode,
    limit: limit_for_page,
  }
  call_api(:get, "/search/v2/trips", params,
    response_class: Responses::SearchTrips,
  )
end
search_trips_page(pagination_uuid:, page_number:) click to toggle source
# File lib/gillbus/v2/client.rb, line 83
def search_trips_page(pagination_uuid:, page_number:)
  params = {
    page_uuid: pagination_uuid,
    number_page: page_number,
  }
  call_api(:get, "/search/v2/trips/page", params,
    response_class: Responses::SearchTrips,
  )
end

Private Instance Methods

call_api(http_method, url, params, auth_required: true, response_class: Responses::Base) click to toggle source
# File lib/gillbus/v2/client.rb, line 106
def call_api(http_method, url, params, auth_required: true, response_class: Responses::Base)
  raise AuthenticationRequired if auth_required && !authenticated?

  params.reject! { |k, v| v.nil? }

  http_response =
    begin
      connection.public_send(http_method) do |request|
        request.url url
        params.each do |key, value|
          request.params[key.to_s] = value
        end
        request.headers['accept'] = 'application/json'
        if auth_required
          request.headers['Authorization'] = access_token.auth_header
        end
      end
    rescue Faraday::Error => e
      raise e
    end

  response_class.new(http_response)
end
connection() click to toggle source
# File lib/gillbus/v2/client.rb, line 130
def connection
  @connection ||= Faraday.new(url: base_url) do |faraday|
    faraday.request :url_encoded
    faraday.adapter Faraday.default_adapter
    faraday.options[:params_encoder] = Faraday::FlatParamsEncoder
  end
end