Class: Cdek::Connection
- Inherits:
-
Object
- Object
- Cdek::Connection
- Defined in:
- lib/cdek/connection.rb
Overview
Низкоуровневый HTTP-коннект к CDEK API.
Отвечает за:
-
получение и кэширование OAuth2 access_token (grant_type=client_credentials);
-
прозрачный ретрай запроса при 401 (один раз, со сбросом токена);
-
сериализацию JSON-тел и маппинг HTTP-статусов в иерархию Cdek::ApiError.
Constant Summary collapse
- JSON_CONTENT_TYPE =
"application/json"- FORM_CONTENT_TYPE =
"application/x-www-form-urlencoded"- TOKEN_PATH =
"/oauth/token"- TOKEN_REFRESH_LEEWAY =
секунд до истечения, после которых обновляем заранее
30- HTTP_METHOD_CLASSES =
{ get: Net::HTTP::Get, post: Net::HTTP::Post, patch: Net::HTTP::Patch, put: Net::HTTP::Put, delete: Net::HTTP::Delete }.freeze
Instance Attribute Summary collapse
-
#configuration ⇒ Object
readonly
Returns the value of attribute configuration.
Instance Method Summary collapse
-
#authenticated_request(method, path, params: nil, body: nil, headers: {}) ⇒ Object
Выполняет авторизованный запрос.
-
#initialize(configuration) ⇒ Connection
constructor
A new instance of Connection.
-
#reset_token! ⇒ Object
Сбрасывает кэшированный токен — следующая операция получит новый.
Constructor Details
#initialize(configuration) ⇒ Connection
Returns a new instance of Connection.
30 31 32 33 34 35 |
# File 'lib/cdek/connection.rb', line 30 def initialize(configuration) @configuration = configuration @token_mutex = Mutex.new @access_token = nil @token_expires_at = nil end |
Instance Attribute Details
#configuration ⇒ Object (readonly)
Returns the value of attribute configuration.
28 29 30 |
# File 'lib/cdek/connection.rb', line 28 def configuration @configuration end |
Instance Method Details
#authenticated_request(method, path, params: nil, body: nil, headers: {}) ⇒ Object
Выполняет авторизованный запрос. Любой ответ 2xx — возвращает распарсенное тело. Любая ошибка — поднимается как Cdek::ApiError или его наследник.
39 40 41 |
# File 'lib/cdek/connection.rb', line 39 def authenticated_request(method, path, params: nil, body: nil, headers: {}) execute_authenticated(method, path, params, body, headers, retried: false) end |
#reset_token! ⇒ Object
Сбрасывает кэшированный токен — следующая операция получит новый.
44 45 46 47 48 49 |
# File 'lib/cdek/connection.rb', line 44 def reset_token! @token_mutex.synchronize do @access_token = nil @token_expires_at = nil end end |