Class: Atol::Request::PostDocument

Inherits:
Object
  • Object
show all
Defined in:
lib/atol/request/post_document.rb,
lib/atol/request/post_document/item/body.rb,
lib/atol/request/post_document/sell/body.rb

Defined Under Namespace

Modules: Item, Sell

Constant Summary collapse

OPERATIONS =
i[sell sell_refund sell_correction buy buy_refund buy_correction].freeze
HEADERS =
{ 'Content-Type' => 'application/json; charset=utf-8' }.freeze

Instance Method Summary collapse

Constructor Details

#initialize(operation:, token:, body:, config: nil, req_logger: nil, res_logger: nil) ⇒ PostDocument

Returns a new instance of PostDocument.



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/atol/request/post_document.rb', line 14

def initialize(operation:, token:, body:, config: nil, req_logger: nil, res_logger: nil)
  @config = config || Atol.config

  raise(Atol::ConfigExpectedError) unless @config.is_a?(Atol::Config)
  raise(Atol::MissingConfigError, 'group_code missing') if @config.group_code.empty?
  raise(Atol::UnknownOperationError, operation.to_s) unless OPERATIONS.include?(operation.to_sym)

  @operation = operation
  @token = token
  @body = body
  @req_logger = req_logger
  @res_logger = res_logger
end

Instance Method Details

#callObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/atol/request/post_document.rb', line 28

def call
  http_client = @config.http_client
  uri = URI("#{@config.api_url}/#{@config.group_code}/#{@operation}")
  req_headers = HEADERS.merge('Token' => @token)
  req = http_client::Post.new(uri, req_headers)
  req.body = @body

  @req_logger.call(req) if @req_logger.respond_to?(:call)

  res = http_client.start(uri.hostname, uri.port, use_ssl: true) do |http|
    http.request(req)
  end

  @res_logger.call(res) if @res_logger.respond_to?(:call)

  res
end