cpro-client 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2bf1dbeeee478ffe838e25c8a2f7e08322fdd537a95fbe65aade589a212a9ce9
4
- data.tar.gz: 60059eb5e04f2bc331bd8e17d17e891a24e4dfafa66c0fcfd3c4400f7f6d25cf
3
+ metadata.gz: 40f1e1557770b6ee03af92e419c95e19071d2b4a53848db46cdd76e409802eb6
4
+ data.tar.gz: 2f75110a47a4954f8151fe5d5cd85daa17e4d3e8b924512a96eab899865faf41
5
5
  SHA512:
6
- metadata.gz: a420acaad23efa1b36a692ea7e29c74ea3039b3fab7b25e97c033e39b1e0e91d2eae2905fdf98dadf84bc61fd5d47e42e3ec5335c7c36246f1b7ee7311d77f05
7
- data.tar.gz: 7e8ab7879a739be73e5b27cedbd8d57a47486c96ae7c8bb99e3abfad37743e8200115e6c5b561f5b851e42ae107b6bc06da44c09fe5a101705ab9d49d070110b
6
+ metadata.gz: 7e479ee8731fcd352635ade84a00ffc1a22901ce9d986d4ee47b26a65bc4313a746fbc40b6e7917191aab6002d2b95e0409b230cebae81e9ff952253479ff0e4
7
+ data.tar.gz: 9a75779dfefdd3a2b1e1ff5f156cc051969554cb7ac557bdc24c2c677ac0697d5f754f57274b38374ac27969b2af7011385d62f3a672f2cac518844c55fdf416
data/CHANGELOG.md CHANGED
@@ -1,6 +1,26 @@
1
1
  ## [Unreleased]
2
2
 
3
3
 
4
+ ## [0.2.1] - 2026-08-28
5
+
6
+ ### Modifié
7
+ - La contrainte sur Faraday passe de `~> 2.0` à `>= 0.9, < 3.0`. La gem s'installe désormais dans
8
+ une application verrouillée sur Faraday 0.9 par une autre dépendance, sans cesser de fonctionner
9
+ avec Faraday 2. Suite vérifiée sur 0.9.2, 1.10.4 et 2.8.1.
10
+ - Les middlewares JSON sont portés par la gem (`Cpro::Middleware::EncodeJson` et `ParseJson`)
11
+ plutôt qu'empruntés à Faraday, qui ne les embarque qu'à partir de la 1.0 — avant, ils venaient
12
+ de la gem `faraday_middleware`. La dépendance d'exécution reste Faraday seul.
13
+ - `Cpro::Middleware::RaiseError` reçoit `on_complete` de l'objet réponse au lieu de l'hériter de sa
14
+ classe de base : c'est la seule forme commune à Faraday 0.9 et à Faraday 2, dont les classes de
15
+ base diffèrent. `reason_phrase`, absent avant la 1.0, n'est lu que s'il existe.
16
+
17
+ ### Retiré
18
+ - `Cpro::Middleware::Authentication::ACCOUNT_HEADER`, remplacé par `Cpro::Account::HEADER`. Le
19
+ compte technique n'est plus transmis par le contexte de requête Faraday — introduit en 1.0 —
20
+ mais posé en en-tête par `Cpro::Resources::Base`. Aucun changement pour l'appelant :
21
+ `with_account` reste le point d'entrée.
22
+
23
+
4
24
  ## [0.2.0] - 2026-08-27
5
25
 
6
26
  ### Corrigé
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cpro-client (0.2.0)
5
- faraday (~> 2.0)
4
+ cpro-client (0.2.1)
5
+ faraday (>= 0.9, < 3.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -16,6 +16,11 @@ Scénario couvert :
16
16
  gem "cpro-client"
17
17
  ```
18
18
 
19
+ Faraday est la seule dépendance d'exécution, de la version 0.9 à la version 2 incluse — la gem
20
+ porte elle-même les middlewares JSON, que Faraday n'embarque qu'à partir de la 1.0. La suite est
21
+ vérifiée sur 0.9.2, 1.10.4 et 2.8.1 ; le développement se fait sur la plus récente, et l'on teste
22
+ un plancher avec `gem "faraday", "0.9.2"` ajouté au `Gemfile` avant `bundle install`.
23
+
19
24
  ## Configuration
20
25
 
21
26
  Les identifiants PISTE identifient l'application et sont stables :
data/cpro-client.gemspec CHANGED
@@ -28,5 +28,5 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ["lib"]
30
30
 
31
- spec.add_dependency "faraday", "~> 2.0"
31
+ spec.add_dependency "faraday", ">= 0.9", "< 3.0"
32
32
  end
data/lib/cpro/account.rb CHANGED
@@ -4,6 +4,8 @@ require "base64"
4
4
 
5
5
  module Cpro
6
6
  class Account
7
+ HEADER = "cpro-account"
8
+
7
9
  attr_reader :login
8
10
 
9
11
  def initialize(login:, password:)
@@ -48,7 +48,7 @@ module Cpro
48
48
  @connection ||= Faraday.new do |faraday|
49
49
  faraday.request :url_encoded
50
50
  faraday.use Middleware::RaiseError
51
- faraday.response :json, content_type: /\bjson$/
51
+ faraday.use Middleware::ParseJson
52
52
  faraday.options.timeout = configuration.timeout
53
53
  faraday.options.open_timeout = configuration.open_timeout
54
54
  faraday.adapter configuration.adapter
@@ -5,10 +5,10 @@ module Cpro
5
5
  # Middlewares ordering matters here
6
6
  def self.build(configuration, token_provider, base_path)
7
7
  Faraday.new(url: "#{configuration.api_host}#{base_path}/") do |faraday|
8
- faraday.request :json
8
+ faraday.use Middleware::EncodeJson
9
9
  faraday.use Middleware::Authentication, token_provider: token_provider
10
10
  faraday.use Middleware::RaiseError
11
- faraday.response :json, content_type: /\bjson$/
11
+ faraday.use Middleware::ParseJson
12
12
  faraday.response :logger, configuration.logger if configuration.logger
13
13
  faraday.options.timeout = configuration.timeout
14
14
  faraday.options.open_timeout = configuration.open_timeout
@@ -2,12 +2,10 @@
2
2
 
3
3
  module Cpro
4
4
  module Middleware
5
- # Injecte les deux niveaux d'authentification Chorus Pro : le jeton OAuth2 PISTE, commun à
6
- # l'application, et le compte technique `cpro-account`, porté par requête via le contexte
7
- # Faraday puisqu'il peut changer d'un appel à l'autre.
5
+ # Porte le jeton OAuth2 PISTE, commun à l'application, et rejoue une fois l'appel refusé en
6
+ # 401. Le compte technique, lui, est posé par Resources::Base : il change d'un appel à l'autre
7
+ # et Faraday n'offre pas de contexte de requête avant la 1.0.
8
8
  class Authentication < Faraday::Middleware
9
- ACCOUNT_HEADER = "cpro-account"
10
-
11
9
  def initialize(app, token_provider:)
12
10
  super(app)
13
11
  @token_provider = token_provider
@@ -43,8 +41,6 @@ module Cpro
43
41
 
44
42
  def apply(env)
45
43
  env.request_headers["Authorization"] = "Bearer #{@token_provider.token.value}"
46
- account = env.request.context && env.request.context[:account]
47
- env.request_headers[ACCOUNT_HEADER] = account.header_value if account
48
44
  end
49
45
  end
50
46
  end
@@ -16,7 +16,16 @@ module Cpro
16
16
 
17
17
  CORRELATION_HEADER = "x-correlationid"
18
18
 
19
- def on_complete(env)
19
+ # Appelé sur l'objet réponse : Faraday 0.9 tient `on_complete` de
20
+ # Faraday::Response::Middleware, que Faraday 2 a supprimé, et Faraday 2 le tient de
21
+ # Faraday::Middleware, que Faraday 0.9 n'en dote pas. La réponse, elle, l'expose partout.
22
+ def call(env)
23
+ @app.call(env).on_complete { |response| verifier(response) }
24
+ end
25
+
26
+ private
27
+
28
+ def verifier(env)
20
29
  return if env.status < 400
21
30
 
22
31
  raise error_class(env.status).new(
@@ -27,14 +36,13 @@ module Cpro
27
36
  )
28
37
  end
29
38
 
30
- private
31
-
32
39
  def error_class(status)
33
40
  ERRORS[status] || (status >= 500 ? ServerError : ApiError)
34
41
  end
35
42
 
43
+ # `reason_phrase` n'existe pas avant Faraday 1.0.
36
44
  def message_for(env)
37
- detail = detail_for(env.body) || env.reason_phrase
45
+ detail = detail_for(env.body) || (env.reason_phrase if env.respond_to?(:reason_phrase))
38
46
  [env.status, detail].compact.join(" ")
39
47
  end
40
48
 
@@ -23,10 +23,11 @@ module Cpro
23
23
  # Le swagger Annuaire ne déclare pas cpro-account, mais l'API le rejette en 400 sans lui,
24
24
  # healthcheck compris : toutes les ressources G2B l'exigent (vérifié en sandbox).
25
25
  def request(method, path, params: nil, body: nil)
26
+ account = required_account
26
27
  response = connection.public_send(method) do |request|
27
28
  request.url(path, params || {})
28
29
  request.body = body unless body.nil?
29
- request.options.context = { account: required_account }
30
+ request.headers[Account::HEADER] = account.header_value
30
31
  end
31
32
  response.body
32
33
  end
data/lib/cpro/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cpro
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
data/lib/cpro.rb CHANGED
@@ -8,6 +8,7 @@ require_relative "cpro/configuration"
8
8
  require_relative "cpro/account"
9
9
  require_relative "cpro/auth/token"
10
10
  require_relative "cpro/auth/token_provider"
11
+ require_relative "cpro/middleware/json"
11
12
  require_relative "cpro/middleware/authentication"
12
13
  require_relative "cpro/middleware/raise_error"
13
14
  require_relative "cpro/connection"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cpro-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hôtentic
@@ -14,16 +14,22 @@ dependencies:
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '0.9'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '0.9'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: '2.0'
32
+ version: '3.0'
27
33
  description: 'Client Ruby des API G2B de Chorus Pro (PPF) : authentification OAuth2
28
34
  PISTE, consultation de l''annuaire par SIRET ou SIREN, et dépôt de factures Factur-X.'
29
35
  email: