Changelog
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Added
- Project skeleton: gemspec, Zeitwerk bootstrap,
Ovh::Clientfactory over theovh-apitransport (env/datacenter-drivenbase_url,#apiaccessor), RSpec suite, RuboCop, CI. Ovh::Client::Signature: OVH request signing as a Faraday middleware —$1$+ SHA1 ofapplication_secret + consumer_key + METHOD + url + body + timestamp, signing the final URL and serialized body byte-for-byte.- Public-endpoint skipping by path and method (
Signature#on_request):POST /auth/credential(consumer-key bootstrap) sends onlyX-Ovh-Application;/auth/timestays unsigned and never triggers lazy sync; every other path is fully signed. Regexes anchored to the version-prefixed path. - Middleware order wires
Faraday::Retry::MiddlewarebeforeSignature, so each retry attempt re-signs with a fresh timestamp. Ovh::Client::Clock: clock-skew handling.synchronize_time!measures the offset via an unsignedGET /auth/time;auto_sync_timesyncs lazily before the first signed request. State guarded by a reentrantMonitorfor cross-thread visibility.Ovh::Client.request_consumer_key: the consumer-key bootstrap flow (class method, runs before a consumer key exists), pluscurrent_credential.Ovh::Client.log_filters: regex/replacement pairs scrubbing theX-Ovh-*credential headers from a caller-supplied logger placed downstream of signing.- Errors surface as
ovh-api'sOvh::Api::ApiError; the wrapper defines no errors of its own.