zatca 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dfcfffb30bc80671008a9f4d85bc6300f7bed524f02919a35314be134f6ced61
4
- data.tar.gz: b5fdeac07afe47aabcb05284283a4197ddaf55262961d34dd953a7e9d74f6487
3
+ metadata.gz: aaa15fcf4e0f8bc1ecdd57277871998c22eb1310294aec57ca297324f8ac2e18
4
+ data.tar.gz: 27e35dae1b305d98573e81e6edcc06eb57013ea145a50614d80889245c302989
5
5
  SHA512:
6
- metadata.gz: 9905e39f50b48661abc536d803254b99dbb7aa4c8a200e3b2c80b9292080aa5d5fa64f419ccf2d5e9c368691ce068cfab96a6373dcc42e9fa9dfc037b3639128
7
- data.tar.gz: f3b19d710fce67255bd151bdd1913e900419fddf7343b547a88eb86ebc21b8aaecc40537c1b6a0e58ce0f79b4002667780a3768b95a7042c03b87faca2268038
6
+ metadata.gz: 1d1fc81fd4799d919c0df244327cdffd74cb30aa62b6d906d4b8e422bfe4dd831577d87e55672e403151563055e2ad99be28d482936d19524951c64df586991a
7
+ data.tar.gz: 41db16f2a9dde6111a5fd0d6459e0d3c4910d3ca20cc77a7220b62f3b5dc08b7841130c7e3c334b598e914297e20ec9a7038a1a6e9416ef4f958e058229dcc14
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # zatca
2
- ![](https://img.shields.io/gem/v/zatca) ![](https://img.shields.io/github/workflow/status/mrsool/zatca/Ruby)
2
+ ![](https://img.shields.io/gem/v/zatca) ![](https://img.shields.io/github/actions/workflow/status/mrsool/zatca/test.yml?branch=main)
3
3
 
4
4
  A Ruby library for generating QR Codes and e-invoices according to the standard created by ZATCA in Saudi Arabia.
5
5
 
@@ -31,7 +31,7 @@ tags = {
31
31
  invoice_total: "115",
32
32
  }
33
33
 
34
- ZATCA.render_qr_code(tags)
34
+ ZATCA.render_qr_code(tags: tags)
35
35
  # => data:image/png;base64,...
36
36
  # Hint (Try pasting the above into your web browser's address bar)
37
37
  ```
@@ -49,7 +49,7 @@ tags = ZATCA::Tags.new({
49
49
  invoice_total: "115",
50
50
  })
51
51
 
52
- generator = ZATCA::QRCodeGenerator.new(tags)
52
+ generator = ZATCA::QRCodeGenerator.new(tags: tags)
53
53
  generator.render(size: 512)
54
54
  ```
55
55
 
data/lib/zatca/client.rb CHANGED
@@ -4,6 +4,8 @@ require "json"
4
4
  # This wraps the API described here:
5
5
  # https://sandbox.zatca.gov.sa/IntegrationSandbox
6
6
  class ZATCA::Client
7
+ attr_accessor :before_submitting_request, :before_parsing_response
8
+
7
9
  # API URLs are not present in developer portal, they can only be found in a PDF
8
10
  # called Fatoora Portal User Manual, here:
9
11
  # https://zatca.gov.sa/en/E-Invoicing/Introduction/Guidelines/Documents/Fatoora%20portal%20user%20manual.pdf
@@ -20,15 +22,28 @@ class ZATCA::Client
20
22
  DEFAULT_API_VERSION = "V2".freeze
21
23
  LANGUAGES = %w[ar en].freeze
22
24
 
23
- def initialize(username:, password:, language: "ar", version: DEFAULT_API_VERSION, environment: :production)
25
+ def initialize(
26
+ username:,
27
+ password:,
28
+ language: "ar",
29
+ version: DEFAULT_API_VERSION,
30
+ environment: :production,
31
+ verbose: false,
32
+ before_submitting_request: nil,
33
+ before_parsing_response: nil
34
+ )
24
35
  raise "Invalid language: #{language}, Please use one of: #{LANGUAGES}" unless LANGUAGES.include?(language)
25
36
 
26
37
  @username = username
27
38
  @password = password
28
39
  @language = language
29
40
  @version = version
41
+ @verbose = verbose
30
42
 
31
43
  @base_url = ENVIRONMENTS_TO_URLS_MAP[environment.to_sym] || PRODUCTION_BASE_URL
44
+
45
+ @before_submitting_request = before_submitting_request
46
+ @before_parsing_response = before_parsing_response
32
47
  end
33
48
 
34
49
  # Reporting API
@@ -132,6 +147,9 @@ class ZATCA::Client
132
147
  url = "#{@base_url}/#{path}"
133
148
  headers = default_headers.merge(headers)
134
149
 
150
+ before_submitting_request&.call(method, url, body, headers)
151
+ log("Requesting #{method} #{url} with\n\nbody: #{body}\n\nheaders: #{headers}\n")
152
+
135
153
  client = if authenticated
136
154
  authenticated_request_cilent
137
155
  else
@@ -139,14 +157,27 @@ class ZATCA::Client
139
157
  end
140
158
 
141
159
  response = client.send(method, url, json: body, headers: headers)
160
+ before_parsing_response&.call(response)
161
+ log("Raw response: #{response}")
162
+
163
+ if response.instance_of?(HTTPX::ErrorResponse)
164
+ return {
165
+ message: response.error&.message,
166
+ details: response.to_s
167
+ }
168
+ end
142
169
 
143
170
  response_body = response.body.to_s
144
171
 
145
- if response.headers["Content-Type"] == "application/json"
172
+ parsed_body = if response.headers["Content-Type"] == "application/json"
146
173
  parse_json_or_return_string(response_body)
147
174
  else
148
175
  response_body
149
176
  end
177
+
178
+ log("Response body: #{parsed_body}")
179
+
180
+ parsed_body
150
181
  end
151
182
 
152
183
  def authenticated_request_cilent
@@ -170,4 +201,11 @@ class ZATCA::Client
170
201
  rescue JSON::ParserError
171
202
  json
172
203
  end
204
+
205
+ def log(message)
206
+ return unless @verbose
207
+ message = "\n\n---------------------\n\n#{message}\n\n"
208
+
209
+ puts message
210
+ end
173
211
  end
data/lib/zatca/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ZATCA
4
- VERSION = "1.0.1"
4
+ VERSION = "1.1.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zatca
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Omar Bahareth
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-06 00:00:00.000000000 Z
11
+ date: 2023-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zeitwerk