Class: Cpro::Enveloppe

Inherits:
Object
  • Object
show all
Defined in:
lib/cpro/enveloppe.rb

Constant Summary collapse

CODES_INTERFACE =

Codes interfaces acceptés par POST /flux. Le dépôt de CDV emprunte le même endpoint que la facture : émettre un statut, c'est déposer un flux.

{
  ubl: "FSO3110A",
  facturx: "FSO3117A",
  ereporting: "FSO6000A",
  cdv: "FSO3300A"
}.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(content:, name:, code_interface:) ⇒ Enveloppe

Returns a new instance of Enveloppe.

Raises:

  • (ArgumentError)


30
31
32
33
34
35
36
37
# File 'lib/cpro/enveloppe.rb', line 30

def initialize(content:, name:, code_interface:)
  raise ArgumentError, "le contenu du flux est vide" if content.nil? || content.empty?
  raise ArgumentError, "un nom de fichier est requis" if name.nil? || name.to_s.empty?

  @content = content
  @name = name.to_s
  @code_interface = resolve_code_interface(code_interface)
end

Instance Attribute Details

#code_interfaceObject (readonly)

Returns the value of attribute code_interface.



17
18
19
# File 'lib/cpro/enveloppe.rb', line 17

def code_interface
  @code_interface
end

#contentObject (readonly)

Returns the value of attribute content.



17
18
19
# File 'lib/cpro/enveloppe.rb', line 17

def content
  @content
end

#nameObject (readonly)

Returns the value of attribute name.



17
18
19
# File 'lib/cpro/enveloppe.rb', line 17

def name
  @name
end

Class Method Details

.from(source, code_interface:, name: nil) ⇒ Object



19
20
21
22
23
24
25
26
27
28
# File 'lib/cpro/enveloppe.rb', line 19

def self.from(source, code_interface:, name: nil)
  if source.respond_to?(:read)
    resolved = name || (File.basename(source.path) if source.respond_to?(:path))
    new(content: source.read, name: resolved, code_interface: code_interface)
  else
    path = source.to_s
    new(content: File.binread(path), name: name || File.basename(path),
        code_interface: code_interface)
  end
end

Instance Method Details

#archiveObject



47
48
49
# File 'lib/cpro/enveloppe.rb', line 47

def archive
  @archive ||= Archive.gzip([{ name: name, content: content }])
end

#checksumObject

Le swagger Dépôt flux G2B définit le checksum comme le sha256 « du fichier encodé », donc de la chaîne base64 et non des octets de l'archive. Confirmé en sandbox : un flux dont le checksum est calculé ainsi ressort RECEVABLE.



58
59
60
# File 'lib/cpro/enveloppe.rb', line 58

def checksum
  @checksum ||= Digest::SHA256.hexdigest(fichier_flux)
end

#fichier_fluxObject



51
52
53
# File 'lib/cpro/enveloppe.rb', line 51

def fichier_flux
  @fichier_flux ||= Base64.strict_encode64(archive)
end

#payloadObject



39
40
41
42
43
44
45
# File 'lib/cpro/enveloppe.rb', line 39

def payload
  {
    "codeInterface" => code_interface,
    "fichierFlux" => fichier_flux,
    "checksum" => checksum
  }
end