cpro-client 0.2.3 → 0.2.4

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: 1d6e3e9d0a4d4ff1848daa453f05afde782c62d4f17ee335981c7ff326cc9036
4
- data.tar.gz: a9f2e83538efb36298ee64fd3df20ba04de571511c447ca4388e64295fa755f9
3
+ metadata.gz: eed2218b6135210909bb231938a2adf3d8f9b432a19468576b232ffd2f352d7a
4
+ data.tar.gz: 95739510c05be2fdc248b2f001e4b53e08b3487162dbb29f50bc26606d929e06
5
5
  SHA512:
6
- metadata.gz: ad2b85661fc6009da13f5a44d284799d4149c9013ddc278a3350afd594c44ab830f7f010c1c0d8da3217da3af0fb259a08e22da568d876af09cf6665071c255b
7
- data.tar.gz: 23f10b4ec03ac82f59a7e7be4dc7592e202ab05ee84beb1756c963055ef3c53b19a246006d8aa8f3920a7941723b4cdb86127de9be1597a358337b7f835932ca
6
+ metadata.gz: 7208819c95be0220d40498c3d09c5df5479619c652c6103aac41903ce1cac6054f47b53a7c87638fd7b474e99581a61b6924ab1d0f17b633bb18a72d431e8a94
7
+ data.tar.gz: 4c292e8c13863bdff0fe54ab567e42880c4d25e5d928ca70fb6c1a83284198912cc14b5dd787f0733763e181a7923f08ab7768a0ee5007b5b4e52b3719c4b7f0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cpro-client (0.2.3)
4
+ cpro-client (0.2.4)
5
5
  faraday (>= 0.9, < 3.0)
6
6
 
7
7
  GEM
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cpro
4
+ # Situe une valeur d'adressage dans la hiérarchie de l'annuaire : SIREN → SIRET → service.
5
+ # Quatre formes sont acceptées — SIREN, SIRET, SIRET_SERVICE et SIREN_SIRET_SERVICE.
6
+ #
7
+ # Le service ne se lit jamais par découpage sur « _ » : il en contient lui-même
8
+ # (SERVICE_PUBLIQUE_1_71915767420316) et peut être purement numérique ("2026"). Il se lit comme
9
+ # tout ce qui suit le SIRET.
10
+ class Adressage
11
+ PREFIXE_SIREN = /\A(\d{9})_(?=\d{14})/.freeze
12
+ SIRET = /\A(\d{14})/.freeze
13
+ SIREN_SEUL = /\A(\d{9})\z/.freeze
14
+
15
+ attr_reader :siren, :siret, :service
16
+
17
+ def self.parse(valeur)
18
+ texte = valeur.to_s.strip
19
+ raise ArgumentError, "valeur d'adressage vide" if texte.empty?
20
+
21
+ prefixe = texte[PREFIXE_SIREN, 1]
22
+ reste = prefixe ? texte[10..] : texte
23
+ depuis_siret(prefixe, reste) || depuis_siren(reste) ||
24
+ raise(ArgumentError, "valeur d'adressage illisible : #{valeur.inspect} " \
25
+ "(attendus : SIREN, SIRET, SIRET_SERVICE ou SIREN_SIRET_SERVICE)")
26
+ end
27
+
28
+ def self.depuis_siret(prefixe, reste)
29
+ siret = reste[SIRET, 1]
30
+ return nil if siret.nil?
31
+
32
+ raise ArgumentError, "SIREN #{prefixe} incohérent avec le SIRET #{siret}" if prefixe && prefixe != siret[0, 9]
33
+
34
+ new(siren: siret[0, 9], siret: siret, service: reste[14..].to_s.sub(/\A_/, ""))
35
+ end
36
+ private_class_method :depuis_siret
37
+
38
+ def self.depuis_siren(reste)
39
+ siren = reste[SIREN_SEUL, 1]
40
+ siren && new(siren: siren, siret: nil, service: nil)
41
+ end
42
+ private_class_method :depuis_siren
43
+
44
+ def initialize(siren:, siret: nil, service: nil)
45
+ @siren = siren
46
+ @siret = siret
47
+ @service = service.nil? || service.empty? ? nil : service
48
+ end
49
+
50
+ # Du plus précis au plus général : la valeur elle-même, puis ses parents successifs. C'est
51
+ # l'ordre dans lequel une adresse active est cherchée.
52
+ def paliers
53
+ [
54
+ (self.class.new(siren: siren, siret: siret, service: service) if service),
55
+ (self.class.new(siren: siren, siret: siret) if siret),
56
+ self.class.new(siren: siren)
57
+ ].compact
58
+ end
59
+
60
+ # Une ligne d'annuaire correspond à ce palier si elle décrit le même niveau de précision.
61
+ def correspond?(ligne)
62
+ ligne.siret == siret && ligne.identifiant_routage.to_s.empty? == service.nil? &&
63
+ (service.nil? || ligne.identifiant_routage == service)
64
+ end
65
+
66
+ def to_s
67
+ [siret ? "#{siren}_#{siret}" : siren, service].compact.join("_")
68
+ end
69
+ end
70
+ 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.3"
4
+ VERSION = "0.2.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cpro-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hôtentic
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-09-03 00:00:00.000000000 Z
11
+ date: 2026-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -53,6 +53,7 @@ files:
53
53
  - lib/cpro-client.rb
54
54
  - lib/cpro.rb
55
55
  - lib/cpro/account.rb
56
+ - lib/cpro/adressage.rb
56
57
  - lib/cpro/archive.rb
57
58
  - lib/cpro/auth/token.rb
58
59
  - lib/cpro/auth/token_provider.rb