atol 0.4.2 → 0.7.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 +5 -5
- data/.rubocop.yml +10 -0
- data/.rubocop_todo.yml +193 -0
- data/.travis.yml +6 -2
- data/Gemfile +2 -0
- data/Gemfile.lock +21 -16
- data/README.md +99 -21
- data/atol-rb.gemspec +14 -11
- data/lib/atol.rb +4 -4
- data/lib/atol/config.rb +5 -1
- data/lib/atol/errors.rb +11 -27
- data/lib/atol/request.rb +3 -1
- data/lib/atol/request/get_document_state.rb +4 -1
- data/lib/atol/request/get_token.rb +4 -2
- data/lib/atol/request/post_document.rb +4 -2
- data/lib/atol/request/post_document/item/body.rb +36 -12
- data/lib/atol/request/post_document/sell/body.rb +14 -9
- data/lib/atol/transaction.rb +2 -0
- data/lib/atol/transaction/get_document_state.rb +4 -1
- data/lib/atol/transaction/get_token.rb +8 -10
- data/lib/atol/transaction/post_document.rb +4 -1
- data/lib/atol/version.rb +4 -2
- metadata +10 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 75da4c224db9bbd13b7688b43902da591c3ebad3aea5a9fdd0e74b9331de1222
|
|
4
|
+
data.tar.gz: 22d9c1141823538a4fe595dbbefe0d82f33dd3e91635379abd48697729a7160c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ea585b8d278bb75b6f4ae5f2ff358846337ea9ae4994dd4c3359d1edaf83997d29fe702a925d94bf11465543c332a40a346336e62432e083d12ff954859e866f
|
|
7
|
+
data.tar.gz: ed192a02125f15b2d9e4abe6003d89bad567e8a9e997ccd5b42627c527e34bbeff506cc19b84ce9a16c7b0a5399940ff1626b0be6e535d640d7e2de4ade7423e
|
data/.rubocop.yml
ADDED
data/.rubocop_todo.yml
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# This configuration was generated by
|
|
2
|
+
# `rubocop --auto-gen-config`
|
|
3
|
+
# on 2019-10-10 01:05:05 +0300 using RuboCop version 0.52.1.
|
|
4
|
+
# The point is for the user to remove these configuration records
|
|
5
|
+
# one by one as the offenses are removed from the code base.
|
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
|
8
|
+
|
|
9
|
+
# Offense count: 1
|
|
10
|
+
# Cop supports --auto-correct.
|
|
11
|
+
Layout/BlockEndNewline:
|
|
12
|
+
Exclude:
|
|
13
|
+
- 'spec/atol/request/post_document/sell/body_spec.rb'
|
|
14
|
+
|
|
15
|
+
# Offense count: 2
|
|
16
|
+
# Cop supports --auto-correct.
|
|
17
|
+
# Configuration parameters: EnforcedStyle.
|
|
18
|
+
# SupportedStyles: leading, trailing
|
|
19
|
+
Layout/DotPosition:
|
|
20
|
+
Exclude:
|
|
21
|
+
- 'spec/atol/request/get_token_spec.rb'
|
|
22
|
+
|
|
23
|
+
# Offense count: 1
|
|
24
|
+
# Cop supports --auto-correct.
|
|
25
|
+
Layout/EmptyLineAfterMagicComment:
|
|
26
|
+
Exclude:
|
|
27
|
+
- 'Rakefile'
|
|
28
|
+
|
|
29
|
+
# Offense count: 1
|
|
30
|
+
# Cop supports --auto-correct.
|
|
31
|
+
# Configuration parameters: AllowForAlignment, ForceEqualSignAlignment.
|
|
32
|
+
Layout/ExtraSpacing:
|
|
33
|
+
Exclude:
|
|
34
|
+
- 'spec/atol/transaction/post_document_spec.rb'
|
|
35
|
+
|
|
36
|
+
# Offense count: 34
|
|
37
|
+
# Cop supports --auto-correct.
|
|
38
|
+
# Configuration parameters: IndentationWidth.
|
|
39
|
+
# SupportedStyles: special_inside_parentheses, consistent, align_braces
|
|
40
|
+
Layout/FirstHashElementIndentation:
|
|
41
|
+
EnforcedStyle: consistent
|
|
42
|
+
|
|
43
|
+
# Offense count: 1
|
|
44
|
+
# Cop supports --auto-correct.
|
|
45
|
+
Layout/MultilineBlockLayout:
|
|
46
|
+
Exclude:
|
|
47
|
+
- 'spec/atol/request/post_document/sell/body_spec.rb'
|
|
48
|
+
|
|
49
|
+
# Offense count: 3
|
|
50
|
+
# Cop supports --auto-correct.
|
|
51
|
+
# Configuration parameters: AllowForAlignment.
|
|
52
|
+
Layout/SpaceAroundOperators:
|
|
53
|
+
Exclude:
|
|
54
|
+
- 'spec/atol/request/get_token_spec.rb'
|
|
55
|
+
|
|
56
|
+
# Offense count: 2
|
|
57
|
+
# Cop supports --auto-correct.
|
|
58
|
+
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
|
|
59
|
+
# SupportedStyles: space, no_space, compact
|
|
60
|
+
# SupportedStylesForEmptyBraces: space, no_space
|
|
61
|
+
Layout/SpaceInsideHashLiteralBraces:
|
|
62
|
+
Exclude:
|
|
63
|
+
- 'spec/atol/request/get_token_spec.rb'
|
|
64
|
+
|
|
65
|
+
# Offense count: 2
|
|
66
|
+
# Cop supports --auto-correct.
|
|
67
|
+
# Configuration parameters: EnforcedStyle.
|
|
68
|
+
# SupportedStyles: final_newline, final_blank_line
|
|
69
|
+
Layout/TrailingEmptyLines:
|
|
70
|
+
Exclude:
|
|
71
|
+
- 'lib/atol.rb'
|
|
72
|
+
- 'lib/atol/request.rb'
|
|
73
|
+
|
|
74
|
+
# Offense count: 1
|
|
75
|
+
# Cop supports --auto-correct.
|
|
76
|
+
Layout/TrailingWhitespace:
|
|
77
|
+
Exclude:
|
|
78
|
+
- 'lib/atol/request/post_document.rb'
|
|
79
|
+
|
|
80
|
+
# Offense count: 1
|
|
81
|
+
# Cop supports --auto-correct.
|
|
82
|
+
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
|
|
83
|
+
Lint/UnusedBlockArgument:
|
|
84
|
+
Exclude:
|
|
85
|
+
- 'lib/atol/transaction/get_token.rb'
|
|
86
|
+
|
|
87
|
+
# Offense count: 2
|
|
88
|
+
Lint/UselessAssignment:
|
|
89
|
+
Exclude:
|
|
90
|
+
- 'lib/atol/request/post_document/sell/body.rb'
|
|
91
|
+
- 'spec/atol/request/post_document_spec.rb'
|
|
92
|
+
|
|
93
|
+
# Offense count: 6
|
|
94
|
+
Metrics/AbcSize:
|
|
95
|
+
Max: 22
|
|
96
|
+
|
|
97
|
+
# Offense count: 16
|
|
98
|
+
# Configuration parameters: CountComments, ExcludedMethods.
|
|
99
|
+
Metrics/BlockLength:
|
|
100
|
+
Max: 193
|
|
101
|
+
|
|
102
|
+
# Offense count: 1
|
|
103
|
+
Metrics/CyclomaticComplexity:
|
|
104
|
+
Max: 7
|
|
105
|
+
|
|
106
|
+
# Offense count: 1
|
|
107
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
|
108
|
+
# URISchemes: http, https
|
|
109
|
+
Metrics/LineLength:
|
|
110
|
+
Max: 125
|
|
111
|
+
|
|
112
|
+
# Offense count: 6
|
|
113
|
+
# Configuration parameters: CountComments.
|
|
114
|
+
Metrics/MethodLength:
|
|
115
|
+
Max: 20
|
|
116
|
+
|
|
117
|
+
# Offense count: 3
|
|
118
|
+
# Configuration parameters: CountKeywordArgs.
|
|
119
|
+
Metrics/ParameterLists:
|
|
120
|
+
Max: 6
|
|
121
|
+
|
|
122
|
+
# Offense count: 1
|
|
123
|
+
Metrics/PerceivedComplexity:
|
|
124
|
+
Max: 9
|
|
125
|
+
|
|
126
|
+
# Offense count: 1
|
|
127
|
+
# Cop supports --auto-correct.
|
|
128
|
+
Style/BlockComments:
|
|
129
|
+
Exclude:
|
|
130
|
+
- 'spec/spec_helper.rb'
|
|
131
|
+
|
|
132
|
+
# Offense count: 1
|
|
133
|
+
# Cop supports --auto-correct.
|
|
134
|
+
# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, IgnoredMethods.
|
|
135
|
+
# SupportedStyles: line_count_based, semantic, braces_for_chaining
|
|
136
|
+
# ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object
|
|
137
|
+
# FunctionalMethods: let, let!, subject, watch
|
|
138
|
+
# IgnoredMethods: lambda, proc, it
|
|
139
|
+
Style/BlockDelimiters:
|
|
140
|
+
Exclude:
|
|
141
|
+
- 'spec/atol/request/post_document/sell/body_spec.rb'
|
|
142
|
+
|
|
143
|
+
# Offense count: 1
|
|
144
|
+
# Cop supports --auto-correct.
|
|
145
|
+
# Configuration parameters: AutoCorrect, EnforcedStyle.
|
|
146
|
+
# SupportedStyles: nested, compact
|
|
147
|
+
Style/ClassAndModuleChildren:
|
|
148
|
+
Exclude:
|
|
149
|
+
- 'spec/factories/atol/config.rb'
|
|
150
|
+
|
|
151
|
+
# Offense count: 2
|
|
152
|
+
# Configuration parameters: MinBodyLength.
|
|
153
|
+
Style/GuardClause:
|
|
154
|
+
Exclude:
|
|
155
|
+
- 'lib/atol/request/get_token.rb'
|
|
156
|
+
|
|
157
|
+
# Offense count: 1
|
|
158
|
+
# Cop supports --auto-correct.
|
|
159
|
+
# Configuration parameters: EnforcedStyle, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
|
|
160
|
+
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
|
|
161
|
+
Style/HashSyntax:
|
|
162
|
+
Exclude:
|
|
163
|
+
- 'Rakefile'
|
|
164
|
+
|
|
165
|
+
# Offense count: 2
|
|
166
|
+
# Cop supports --auto-correct.
|
|
167
|
+
# Configuration parameters: EnforcedStyle.
|
|
168
|
+
# SupportedStyles: line_count_dependent, lambda, literal
|
|
169
|
+
Style/Lambda:
|
|
170
|
+
Exclude:
|
|
171
|
+
- 'spec/atol/request/post_document_spec.rb'
|
|
172
|
+
|
|
173
|
+
# Offense count: 2
|
|
174
|
+
# Cop supports --auto-correct.
|
|
175
|
+
Style/MutableConstant:
|
|
176
|
+
Exclude:
|
|
177
|
+
- 'lib/atol/request/post_document/item/body.rb'
|
|
178
|
+
|
|
179
|
+
# Offense count: 2
|
|
180
|
+
# Cop supports --auto-correct.
|
|
181
|
+
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
|
|
182
|
+
# SupportedStyles: single_quotes, double_quotes
|
|
183
|
+
Style/StringLiterals:
|
|
184
|
+
Exclude:
|
|
185
|
+
- 'spec/atol/request/get_document_state_spec.rb'
|
|
186
|
+
- 'spec/atol/request/get_token_spec.rb'
|
|
187
|
+
|
|
188
|
+
# Offense count: 2
|
|
189
|
+
# Cop supports --auto-correct.
|
|
190
|
+
# Configuration parameters: MinSize, WordRegex.
|
|
191
|
+
# SupportedStyles: percent, brackets
|
|
192
|
+
Style/WordArray:
|
|
193
|
+
EnforcedStyle: brackets
|
data/.travis.yml
CHANGED
|
@@ -2,7 +2,11 @@ sudo: false
|
|
|
2
2
|
language: ruby
|
|
3
3
|
rvm:
|
|
4
4
|
- 2.5.0
|
|
5
|
-
before_install:
|
|
5
|
+
before_install:
|
|
6
|
+
- gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
|
|
7
|
+
- gem install -v 1.16.4 bundler --no-rdoc --no-ri
|
|
8
|
+
- bundle install
|
|
6
9
|
cache: bundler
|
|
7
10
|
script:
|
|
8
|
-
-
|
|
11
|
+
- rubocop
|
|
12
|
+
- rspec
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
atol (0.
|
|
4
|
+
atol (0.7.1)
|
|
5
5
|
anyway_config (~> 1.0)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
@@ -10,7 +10,7 @@ GEM
|
|
|
10
10
|
addressable (2.5.2)
|
|
11
11
|
public_suffix (>= 2.0.2, < 4.0)
|
|
12
12
|
anyway_config (1.1.3)
|
|
13
|
-
ast (2.
|
|
13
|
+
ast (2.4.1)
|
|
14
14
|
coveralls (0.8.21)
|
|
15
15
|
json (>= 1.8, < 3)
|
|
16
16
|
simplecov (~> 0.14.1)
|
|
@@ -23,13 +23,14 @@ GEM
|
|
|
23
23
|
docile (1.1.5)
|
|
24
24
|
hashdiff (0.3.7)
|
|
25
25
|
json (2.1.0)
|
|
26
|
-
parallel (1.
|
|
27
|
-
parser (2.
|
|
28
|
-
ast (~> 2.
|
|
29
|
-
powerpack (0.1.1)
|
|
26
|
+
parallel (1.19.2)
|
|
27
|
+
parser (2.7.1.4)
|
|
28
|
+
ast (~> 2.4.1)
|
|
30
29
|
public_suffix (3.0.1)
|
|
31
30
|
rainbow (3.0.0)
|
|
32
|
-
rake (
|
|
31
|
+
rake (13.0.1)
|
|
32
|
+
regexp_parser (1.7.1)
|
|
33
|
+
rexml (3.2.4)
|
|
33
34
|
rspec (3.7.0)
|
|
34
35
|
rspec-core (~> 3.7.0)
|
|
35
36
|
rspec-expectations (~> 3.7.0)
|
|
@@ -43,14 +44,18 @@ GEM
|
|
|
43
44
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
44
45
|
rspec-support (~> 3.7.0)
|
|
45
46
|
rspec-support (3.7.0)
|
|
46
|
-
rubocop (0.
|
|
47
|
+
rubocop (0.90.0)
|
|
47
48
|
parallel (~> 1.10)
|
|
48
|
-
parser (>= 2.
|
|
49
|
-
powerpack (~> 0.1)
|
|
49
|
+
parser (>= 2.7.1.1)
|
|
50
50
|
rainbow (>= 2.2.2, < 4.0)
|
|
51
|
+
regexp_parser (>= 1.7)
|
|
52
|
+
rexml
|
|
53
|
+
rubocop-ast (>= 0.3.0, < 1.0)
|
|
51
54
|
ruby-progressbar (~> 1.7)
|
|
52
|
-
unicode-display_width (
|
|
53
|
-
|
|
55
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
|
56
|
+
rubocop-ast (0.4.0)
|
|
57
|
+
parser (>= 2.7.1.4)
|
|
58
|
+
ruby-progressbar (1.10.1)
|
|
54
59
|
safe_yaml (1.0.4)
|
|
55
60
|
simplecov (0.14.1)
|
|
56
61
|
docile (~> 1.1.0)
|
|
@@ -61,7 +66,7 @@ GEM
|
|
|
61
66
|
tins (~> 1.0)
|
|
62
67
|
thor (0.19.4)
|
|
63
68
|
tins (1.16.3)
|
|
64
|
-
unicode-display_width (1.
|
|
69
|
+
unicode-display_width (1.7.0)
|
|
65
70
|
webmock (3.2.1)
|
|
66
71
|
addressable (>= 2.3.6)
|
|
67
72
|
crack (>= 0.3.2)
|
|
@@ -74,10 +79,10 @@ DEPENDENCIES
|
|
|
74
79
|
atol!
|
|
75
80
|
bundler (~> 1.15)
|
|
76
81
|
coveralls
|
|
77
|
-
rake (~>
|
|
82
|
+
rake (~> 13.0)
|
|
78
83
|
rspec (~> 3.0)
|
|
79
|
-
rubocop (~> 0.
|
|
84
|
+
rubocop (~> 0.90)
|
|
80
85
|
webmock (~> 3.0)
|
|
81
86
|
|
|
82
87
|
BUNDLED WITH
|
|
83
|
-
1.
|
|
88
|
+
1.17.3
|
data/README.md
CHANGED
|
@@ -30,9 +30,11 @@ $ bundle install
|
|
|
30
30
|
|
|
31
31
|
Для обращения к сервису необходимы данные учетной записи.
|
|
32
32
|
|
|
33
|
-
При инициализации приложение попытается найти необходимые параметры в константе ENV
|
|
33
|
+
При инициализации приложение попытается найти необходимые параметры в константе `ENV`.
|
|
34
34
|
|
|
35
|
-
Для корректной
|
|
35
|
+
Для корректной работы потребуются следующие переменные окружения.
|
|
36
|
+
|
|
37
|
+
**Все переменные являются обязательными**.
|
|
36
38
|
|
|
37
39
|
```bash
|
|
38
40
|
# .env
|
|
@@ -41,27 +43,77 @@ ATOL_LOGIN=example-login
|
|
|
41
43
|
ATOL_PASSWORD=example-password
|
|
42
44
|
ATOL_PAYMENT_ADDRESS="г. Москва, ул. Ленина, д.1 к.2"
|
|
43
45
|
ATOL_GROUP_CODE=example-group-code
|
|
46
|
+
ATOL_DEFAULT_SNO=esn
|
|
47
|
+
ATOL_DEFAULT_TAX=vat18
|
|
48
|
+
ATOL_CALLBACK_URL=https://www.example.com/callback_path
|
|
49
|
+
ATOL_COMPANY_EMAIL=example@email.com
|
|
50
|
+
ATOL_DEFAULT_PAYMENT_TYPE=1
|
|
44
51
|
```
|
|
45
52
|
|
|
46
|
-
|
|
53
|
+
Значения `ATOL_INN`, `ATOL_LOGIN`, `ATOL_PASSWORD`, `ATOL_PAYMENT_ADDRESS` и `ATOL_GROUP_CODE` вы получаете при регистрации в сервисе.
|
|
54
|
+
|
|
55
|
+
`ATOL_DEFAULT_SNO` - система налогообложения. Возможные значения:
|
|
56
|
+
1) "osn" – общая СН;
|
|
57
|
+
2) "usn_income" – упрощенная СН (доходы);
|
|
58
|
+
3) "usn_income_outcome" – упрощенная СН (доходы минус расходы);
|
|
59
|
+
4) "envd" – единый налог на вмененный доход;
|
|
60
|
+
5) "esn" – единый сельскохозяйственный налог;
|
|
61
|
+
6) "patent" – патентная СН.
|
|
62
|
+
|
|
63
|
+
`ATOL_DEFAULT_TAX` - номер налога в ККТ. Возможные значения:
|
|
64
|
+
1) "none" – без НДС;
|
|
65
|
+
2) "vat0" – НДС по ставке 0%;
|
|
66
|
+
3) "vat10" – НДС чека по ставке 10%;
|
|
67
|
+
4) "vat18" – НДС чека по ставке 18%;
|
|
68
|
+
5) "vat110" – НДС чека по расчетной ставке 10/110;
|
|
69
|
+
6) "vat118" – НДС чека по расчетной ставке 18/118.
|
|
70
|
+
|
|
71
|
+
`ATOL_CALLBACK_URL` - адрес, по которому сервис будет отправлять информацию после создания чека.
|
|
72
|
+
|
|
73
|
+
`ATOL_DEFAULT_PAYMENT_TYPE` - вид оплаты. Возможные значения:
|
|
74
|
+
1) "1" – электронный;
|
|
75
|
+
2) "2" – "9" – расширенные типы оплаты. Для каждого фискального типа оплаты можно указать расширенный тип оплаты.
|
|
47
76
|
|
|
77
|
+
`ATOL_COMPANY_EMAIL` - адрес электронной почты вашей компании.
|
|
78
|
+
|
|
79
|
+
### Конфигурация в инициализаторе
|
|
80
|
+
|
|
81
|
+
Для Rails-приложений так же можно создать файл инициализации и задать параметры непосредственно в коде:
|
|
48
82
|
|
|
49
83
|
```ruby
|
|
50
84
|
# config/initializers/atol.rb
|
|
51
85
|
|
|
52
86
|
Rails.application.config.after_initialize do
|
|
53
87
|
Atol.config.tap do |config|
|
|
54
|
-
config.inn
|
|
55
|
-
config.login
|
|
56
|
-
config.password
|
|
57
|
-
config.payment_address
|
|
58
|
-
config.group_code
|
|
88
|
+
config.inn = '123456789010'
|
|
89
|
+
config.login = 'example-login'
|
|
90
|
+
config.password = 'example-password'
|
|
91
|
+
config.payment_address = 'г. Москва, ул. Ленина, д.1 к.2'
|
|
92
|
+
config.group_code = 'example-group-code'
|
|
93
|
+
config.default_sno = 'esn'
|
|
94
|
+
config.default_tax = 'vat18'
|
|
95
|
+
config.callback_url = 'https://www.example.com/callback_path'
|
|
96
|
+
config.company_email = 'example@email.com'
|
|
97
|
+
config.default_payment_type = '1'
|
|
59
98
|
end
|
|
60
99
|
end
|
|
61
100
|
```
|
|
62
101
|
|
|
63
102
|
Для объектов конфигурации используется класс унаследованный от класса из гема [anyway-config](https://github.com/palkan/anyway_config). Другие способы задания конфигурации можно найти в его документации.
|
|
64
103
|
|
|
104
|
+
### Использование тестового окружения АТОЛ
|
|
105
|
+
|
|
106
|
+
АТОЛ предоставляет тестовую среду для отработки интеграции. Данные для авторизации в тестовой среде можно найти в [библиотеке документации АТОЛ Онлайн](https://online.atol.ru/lib/), пункт ["Параметры тестовой среды"](https://online.atol.ru/files/ffd/test_sreda.txt)
|
|
107
|
+
|
|
108
|
+
URL тестовой среды необходимо указывать в конфигурации. При использовании переменных окружения вам необходимо задать переменную `ATOL_API_URL`.
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# .env
|
|
112
|
+
ATOL_API_URL=https://testonline.atol.ru/possystem/v4
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
> _Внимание! При создании чеков в тестовой среде АТОЛ будет отправлять письма на электронную почту покупателя._
|
|
116
|
+
|
|
65
117
|
#### Прокси
|
|
66
118
|
|
|
67
119
|
Объект конфигурации позволяет задать прокси для http-запросов:
|
|
@@ -106,12 +158,32 @@ body = Atol::Request::PostDocument::Sell::Body.new(
|
|
|
106
158
|
|
|
107
159
|
Для создания `items` можно использовать класс `Atol::Request::PostDocument::Item::Body`.
|
|
108
160
|
|
|
109
|
-
Его конструктор принимает обязательные аргументы `name`, `price` и опциональный `quantity` (по умолчанию 1).
|
|
161
|
+
Его конструктор принимает обязательные аргументы `name`, `price`, `payment_method`, `payment_object` и опциональный `quantity` (по умолчанию 1).
|
|
162
|
+
|
|
163
|
+
Допустимые значения `payment_method`:
|
|
164
|
+
```ruby
|
|
165
|
+
[
|
|
166
|
+
'full_prepayment', 'prepayment', 'advance', 'full_payment',
|
|
167
|
+
'partial_payment', 'credit', 'credit_payment'
|
|
168
|
+
]
|
|
169
|
+
```
|
|
170
|
+
Допустимые значения `payment_object`:
|
|
171
|
+
```ruby
|
|
172
|
+
[
|
|
173
|
+
'commodity', 'excise', 'job', 'service', 'gambling_bet', 'gambling_prize',
|
|
174
|
+
'lottery', 'lottery_prize', 'intellectual_activity', 'payment','agent_commission',
|
|
175
|
+
'composite', 'another'
|
|
176
|
+
]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Например:
|
|
110
180
|
|
|
111
181
|
```ruby
|
|
112
182
|
item = Atol::Request::PostDocument::Item::Body.new(
|
|
113
183
|
name: 'product name',
|
|
114
184
|
price: 100,
|
|
185
|
+
payment_method: 'full_payment',
|
|
186
|
+
payment_object: 'service',
|
|
115
187
|
quantity: 2
|
|
116
188
|
).to_h
|
|
117
189
|
```
|
|
@@ -126,15 +198,21 @@ body = Atol::Request::PostDocument::Sell::Body.new(
|
|
|
126
198
|
Atol::Request::PostDocument::Item::Body.new(
|
|
127
199
|
name: 'number 9',
|
|
128
200
|
price: 50,
|
|
201
|
+
payment_method: 'full_payment',
|
|
202
|
+
payment_object: 'service',
|
|
129
203
|
quantity: 2
|
|
130
204
|
).to_h,
|
|
131
205
|
Atol::Request::PostDocument::Item::Body.new(
|
|
132
206
|
name: 'number 9 large',
|
|
133
|
-
price: 100
|
|
207
|
+
price: 100,
|
|
208
|
+
payment_method: 'full_payment',
|
|
209
|
+
payment_object: 'service'
|
|
134
210
|
).to_h,
|
|
135
211
|
Atol::Request::PostDocument::Item::Body.new(
|
|
136
212
|
name: 'number 6',
|
|
137
|
-
price: 60
|
|
213
|
+
price: 60,
|
|
214
|
+
payment_method: 'full_payment',
|
|
215
|
+
payment_object: 'service'
|
|
138
216
|
).to_h
|
|
139
217
|
]
|
|
140
218
|
).to_json
|
|
@@ -143,28 +221,28 @@ body = Atol::Request::PostDocument::Sell::Body.new(
|
|
|
143
221
|
Результат:
|
|
144
222
|
```json
|
|
145
223
|
|
|
146
|
-
{
|
|
147
|
-
"receipt":{
|
|
148
|
-
"attributes":{
|
|
224
|
+
{
|
|
225
|
+
"receipt":{
|
|
226
|
+
"attributes":{
|
|
149
227
|
"sno":"usn_income_outcome",
|
|
150
228
|
"email":"example@example.com"
|
|
151
229
|
},
|
|
152
|
-
"items":[
|
|
153
|
-
{
|
|
230
|
+
"items":[
|
|
231
|
+
{
|
|
154
232
|
"name":"number 9",
|
|
155
233
|
"price":50.0,
|
|
156
234
|
"quantity":2.0,
|
|
157
235
|
"sum":100.0,
|
|
158
236
|
"tax":"none"
|
|
159
237
|
},
|
|
160
|
-
{
|
|
238
|
+
{
|
|
161
239
|
"name":"number 9 large",
|
|
162
240
|
"price":100.0,
|
|
163
241
|
"quantity":1.0,
|
|
164
242
|
"sum":100.0,
|
|
165
243
|
"tax":"none"
|
|
166
244
|
},
|
|
167
|
-
{
|
|
245
|
+
{
|
|
168
246
|
"name":"number 6",
|
|
169
247
|
"price":60.0,
|
|
170
248
|
"quantity":1.0,
|
|
@@ -172,15 +250,15 @@ body = Atol::Request::PostDocument::Sell::Body.new(
|
|
|
172
250
|
"tax":"none"
|
|
173
251
|
}
|
|
174
252
|
],
|
|
175
|
-
"payments":[
|
|
176
|
-
{
|
|
253
|
+
"payments":[
|
|
254
|
+
{
|
|
177
255
|
"sum":260.0,
|
|
178
256
|
"type":1
|
|
179
257
|
}
|
|
180
258
|
],
|
|
181
259
|
"total":260.0
|
|
182
260
|
},
|
|
183
|
-
"service":{
|
|
261
|
+
"service":{
|
|
184
262
|
"inn":"123456789010",
|
|
185
263
|
"payment_address":"г. Москва, ул. Ленина, д.1 к.2"
|
|
186
264
|
},
|
data/atol-rb.gemspec
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
|
2
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
5
|
require 'atol/version'
|
|
4
6
|
|
|
5
7
|
Gem::Specification.new do |spec|
|
|
6
|
-
spec.name
|
|
7
|
-
spec.version
|
|
8
|
-
spec.authors
|
|
9
|
-
spec.email
|
|
8
|
+
spec.name = 'atol'
|
|
9
|
+
spec.version = Atol::Version::LIB
|
|
10
|
+
spec.authors = ['GeorgeGorbanev']
|
|
11
|
+
spec.email = ['GeorgeGorbanev@gmail.com']
|
|
10
12
|
|
|
11
|
-
spec.summary
|
|
12
|
-
spec.homepage
|
|
13
|
-
spec.license
|
|
13
|
+
spec.summary = 'ATOL KaaS client for Ruby'
|
|
14
|
+
spec.homepage = 'https://github.com/sputnik8/atol-rb'
|
|
15
|
+
spec.license = 'MIT'
|
|
16
|
+
spec.required_ruby_version = '>= 2.5.0'
|
|
14
17
|
|
|
15
|
-
spec.files
|
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
16
19
|
f.match(%r{^(test|spec|features)/})
|
|
17
20
|
end
|
|
18
21
|
|
|
@@ -23,8 +26,8 @@ Gem::Specification.new do |spec|
|
|
|
23
26
|
spec.add_dependency 'anyway_config', '~> 1.0'
|
|
24
27
|
|
|
25
28
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
|
26
|
-
spec.add_development_dependency 'rake', '~>
|
|
29
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
|
27
30
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
28
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
|
31
|
+
spec.add_development_dependency 'rubocop', '~> 0.90'
|
|
29
32
|
spec.add_development_dependency 'webmock', '~> 3.0'
|
|
30
33
|
end
|
data/lib/atol.rb
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'atol/version'
|
|
2
4
|
require 'atol/config'
|
|
3
5
|
require 'atol/request'
|
|
4
6
|
require 'atol/transaction'
|
|
5
7
|
|
|
6
8
|
module Atol
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
TIMESTAMP_FORMAT = '%d.%m.%Y %H:%M:%S'.freeze
|
|
9
|
+
ENCODING = 'utf-8'
|
|
10
|
+
TIMESTAMP_FORMAT = '%d.%m.%Y %H:%M:%S'
|
|
10
11
|
|
|
11
12
|
class << self
|
|
12
13
|
attr_writer :config
|
|
@@ -16,4 +17,3 @@ module Atol
|
|
|
16
17
|
end
|
|
17
18
|
end
|
|
18
19
|
end
|
|
19
|
-
|
data/lib/atol/config.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'anyway'
|
|
2
4
|
require 'net/http'
|
|
5
|
+
require 'atol/version'
|
|
3
6
|
|
|
4
7
|
module Atol
|
|
5
8
|
class Config < Anyway::Config
|
|
@@ -14,6 +17,7 @@ module Atol
|
|
|
14
17
|
:company_email,
|
|
15
18
|
req_tries_number: 3,
|
|
16
19
|
default_payment_type: 1,
|
|
17
|
-
http_client: Net::HTTP
|
|
20
|
+
http_client: Net::HTTP,
|
|
21
|
+
api_url: "https://online.atol.ru/possystem/#{Atol::Version::API}"
|
|
18
22
|
end
|
|
19
23
|
end
|
data/lib/atol/errors.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Atol
|
|
2
4
|
class MissingConfigError < StandardError; end
|
|
3
5
|
class AuthBadRequestError < StandardError; end
|
|
@@ -5,46 +7,28 @@ module Atol
|
|
|
5
7
|
class ConfigExpectedError < StandardError; end
|
|
6
8
|
class UnknownOperationError < StandardError; end
|
|
7
9
|
class BadJSONError < StandardError; end
|
|
8
|
-
class IncomingBadRequestError < StandardError; end
|
|
9
10
|
class IncomingOperationNotSupportError < StandardError; end
|
|
10
11
|
class IncomingMissingTokenError < StandardError; end
|
|
11
|
-
class IncomingNotExistTokenError < StandardError; end
|
|
12
12
|
class IncomingExpiredTokenError < StandardError; end
|
|
13
13
|
class IncomingExistExternalIdError < StandardError; end
|
|
14
14
|
class GroupCodeToTokenError < StandardError; end
|
|
15
|
-
class IsNullExternalIdError < StandardError; end
|
|
16
15
|
class EmptyClientContactError < StandardError; end
|
|
17
16
|
class EmptySellItemsError < StandardError; end
|
|
18
|
-
class IncomingQueueTimeoutError < StandardError; end
|
|
19
17
|
class IncomingValidationError < StandardError; end
|
|
20
|
-
class IncomingQueueError < StandardError; end
|
|
21
|
-
class StateBadRequestError < StandardError; end
|
|
22
|
-
class StateMissingTokenError < StandardError; end
|
|
23
|
-
class StateNotExistTokenError < StandardError; end
|
|
24
|
-
class StateExpiredTokenError < StandardError; end
|
|
25
18
|
class StateMissingUuidError < StandardError; end
|
|
26
19
|
class StateNotFoundError < StandardError; end
|
|
27
20
|
class ZeroItemQuantityError < StandardError; end
|
|
28
21
|
|
|
29
22
|
ERRORS = Hash[
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
10 => IncomingExistExternalIdError,
|
|
40
|
-
11 => StateBadRequestError,
|
|
41
|
-
12 => StateMissingTokenError,
|
|
42
|
-
13 => StateNotExistTokenError,
|
|
43
|
-
14 => StateExpiredTokenError,
|
|
44
|
-
15 => StateMissingUuidError,
|
|
45
|
-
16 => StateNotFoundError,
|
|
46
|
-
22 => GroupCodeToTokenError,
|
|
47
|
-
23 => IsNullExternalIdError,
|
|
23
|
+
0 => BadJSONError,
|
|
24
|
+
10 => IncomingMissingTokenError,
|
|
25
|
+
11 => IncomingExpiredTokenError,
|
|
26
|
+
20 => GroupCodeToTokenError,
|
|
27
|
+
30 => StateMissingUuidError,
|
|
28
|
+
31 => IncomingOperationNotSupportError,
|
|
29
|
+
32 => IncomingValidationError,
|
|
30
|
+
33 => IncomingExistExternalIdError,
|
|
31
|
+
34 => StateNotFoundError,
|
|
48
32
|
-3804 => ZeroItemQuantityError
|
|
49
33
|
].freeze
|
|
50
34
|
end
|
data/lib/atol/request.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'atol'
|
|
2
4
|
require 'atol/errors'
|
|
3
5
|
require 'net/http'
|
|
@@ -9,13 +11,14 @@ module Atol
|
|
|
9
11
|
@config = config || Atol.config
|
|
10
12
|
raise(Atol::ConfigExpectedError) unless @config.is_a?(Atol::Config)
|
|
11
13
|
raise(Atol::MissingConfigError, 'group_code missing') if @config.group_code.nil?
|
|
14
|
+
|
|
12
15
|
@token = token
|
|
13
16
|
@uuid = uuid
|
|
14
17
|
end
|
|
15
18
|
|
|
16
19
|
def call
|
|
17
20
|
http_client = @config.http_client
|
|
18
|
-
uri = URI("#{
|
|
21
|
+
uri = URI("#{@config.api_url}/#{@config.group_code}/report/#{@uuid}")
|
|
19
22
|
http = http_client.new(uri.host, uri.port)
|
|
20
23
|
http.use_ssl = true
|
|
21
24
|
http.get(uri.request_uri, 'Token' => @token)
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'atol'
|
|
2
4
|
require 'atol/errors'
|
|
3
5
|
|
|
4
6
|
module Atol
|
|
5
7
|
module Request
|
|
6
8
|
class GetToken
|
|
7
|
-
PATH = '/getToken'
|
|
9
|
+
PATH = '/getToken'
|
|
8
10
|
|
|
9
11
|
def initialize(config: nil)
|
|
10
12
|
@config = config || Atol.config
|
|
@@ -26,7 +28,7 @@ module Atol
|
|
|
26
28
|
end
|
|
27
29
|
|
|
28
30
|
def call
|
|
29
|
-
uri = URI(
|
|
31
|
+
uri = URI(@config.api_url + PATH)
|
|
30
32
|
uri.query = URI.encode_www_form(login: @login, pass: @password)
|
|
31
33
|
|
|
32
34
|
http = @http_client.new(uri.host, uri.port)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'atol'
|
|
2
4
|
require 'atol/errors'
|
|
3
5
|
require 'atol/request/post_document/item/body'
|
|
@@ -25,7 +27,7 @@ module Atol
|
|
|
25
27
|
|
|
26
28
|
def call
|
|
27
29
|
http_client = @config.http_client
|
|
28
|
-
uri = URI("#{
|
|
30
|
+
uri = URI("#{@config.api_url}/#{@config.group_code}/#{@operation}")
|
|
29
31
|
req_headers = HEADERS.merge('Token' => @token)
|
|
30
32
|
req = http_client::Post.new(uri, req_headers)
|
|
31
33
|
req.body = @body
|
|
@@ -35,7 +37,7 @@ module Atol
|
|
|
35
37
|
res = http_client.start(uri.hostname, uri.port, use_ssl: true) do |http|
|
|
36
38
|
http.request(req)
|
|
37
39
|
end
|
|
38
|
-
|
|
40
|
+
|
|
39
41
|
@res_logger.call(res) if @res_logger.respond_to?(:call)
|
|
40
42
|
|
|
41
43
|
res
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'atol/errors'
|
|
2
4
|
|
|
3
5
|
module Atol
|
|
@@ -5,20 +7,40 @@ module Atol
|
|
|
5
7
|
class PostDocument
|
|
6
8
|
module Item
|
|
7
9
|
class Body
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
BadPaymentMethodError = Class.new(StandardError)
|
|
11
|
+
BadPaymentObjectError = Class.new(StandardError)
|
|
12
|
+
|
|
13
|
+
PAYMENT_METHODS = [
|
|
14
|
+
'full_prepayment', 'prepayment', 'advance', 'full_payment',
|
|
15
|
+
'partial_payment', 'credit', 'credit_payment'
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
PAYMENT_OBJECTS = [
|
|
19
|
+
'commodity', 'excise', 'job', 'service', 'gambling_bet', 'gambling_prize',
|
|
20
|
+
'lottery', 'lottery_prize', 'intellectual_activity', 'payment', 'agent_commission',
|
|
21
|
+
'composite', 'another'
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
attr_accessor :config, :name, :price, :quantity, :payment_method, :payment_object
|
|
25
|
+
|
|
26
|
+
def initialize(config: nil, name:, price:, quantity: 1, payment_method:, payment_object:)
|
|
27
|
+
raise Atol::ZeroItemQuantityError if quantity.to_f.zero?
|
|
28
|
+
raise BadPaymentMethodError unless PAYMENT_METHODS.include?(payment_method.to_s)
|
|
29
|
+
raise BadPaymentObjectError unless PAYMENT_OBJECTS.include?(payment_object.to_s)
|
|
10
30
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
31
|
+
self.config = config || Atol.config
|
|
32
|
+
self.name = name
|
|
33
|
+
self.price = price.to_f
|
|
34
|
+
self.quantity = quantity.to_f
|
|
35
|
+
self.payment_method = payment_method.to_s
|
|
36
|
+
self.payment_object = payment_object.to_s
|
|
15
37
|
end
|
|
16
38
|
|
|
17
39
|
def to_h
|
|
18
40
|
body.clone
|
|
19
41
|
end
|
|
20
42
|
|
|
21
|
-
def to_json
|
|
43
|
+
def to_json(*_args)
|
|
22
44
|
body.to_json
|
|
23
45
|
end
|
|
24
46
|
|
|
@@ -26,11 +48,13 @@ module Atol
|
|
|
26
48
|
|
|
27
49
|
def body
|
|
28
50
|
@body ||= {
|
|
29
|
-
name:
|
|
30
|
-
price:
|
|
31
|
-
quantity:
|
|
32
|
-
sum: (
|
|
33
|
-
tax:
|
|
51
|
+
name: name,
|
|
52
|
+
price: price,
|
|
53
|
+
quantity: quantity,
|
|
54
|
+
sum: (price * quantity).round(2),
|
|
55
|
+
tax: config.default_tax,
|
|
56
|
+
payment_method: payment_method,
|
|
57
|
+
payment_object: payment_object
|
|
34
58
|
}
|
|
35
59
|
end
|
|
36
60
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'atol/errors'
|
|
2
4
|
|
|
3
5
|
module Atol
|
|
@@ -20,24 +22,23 @@ module Atol
|
|
|
20
22
|
body.clone
|
|
21
23
|
end
|
|
22
24
|
|
|
23
|
-
def to_json
|
|
25
|
+
def to_json(*_args)
|
|
24
26
|
body.to_json
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
private
|
|
28
30
|
|
|
29
31
|
def body
|
|
30
|
-
|
|
32
|
+
body_template.tap do |result|
|
|
33
|
+
receipt = result[:receipt]
|
|
34
|
+
client = receipt[:client]
|
|
31
35
|
result[:external_id] = @external_id
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
client[:email] = @email unless @email.empty?
|
|
37
|
+
client[:phone] = @phone unless @phone.empty?
|
|
34
38
|
result[:service][:callback_url] = @config.callback_url if @config.callback_url
|
|
35
39
|
|
|
36
|
-
total =
|
|
37
|
-
|
|
38
|
-
result[:receipt][:total] = total
|
|
39
|
-
result[:receipt][:payments][0][:sum] = total
|
|
40
|
-
result[:receipt][:items] = @items
|
|
40
|
+
receipt[:total] = receipt[:payments][0][:sum] = total
|
|
41
|
+
receipt[:items] = @items
|
|
41
42
|
end
|
|
42
43
|
end
|
|
43
44
|
|
|
@@ -63,6 +64,10 @@ module Atol
|
|
|
63
64
|
timestamp: Time.now.strftime(Atol::TIMESTAMP_FORMAT)
|
|
64
65
|
}
|
|
65
66
|
end
|
|
67
|
+
|
|
68
|
+
def total
|
|
69
|
+
@total ||= @items.inject(0) { |sum, item| sum += item[:sum] }
|
|
70
|
+
end
|
|
66
71
|
end
|
|
67
72
|
end
|
|
68
73
|
end
|
data/lib/atol/transaction.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'atol/request/get_document_state'
|
|
2
4
|
require 'atol/errors'
|
|
3
5
|
|
|
@@ -7,13 +9,14 @@ module Atol
|
|
|
7
9
|
def initialize(uuid:, token:, config: nil)
|
|
8
10
|
@config = config || Atol.config
|
|
9
11
|
raise(Atol::ConfigExpectedError) unless @config.is_a?(Atol::Config)
|
|
12
|
+
|
|
10
13
|
@params = { uuid: uuid, token: token, config: @config }
|
|
11
14
|
end
|
|
12
15
|
|
|
13
16
|
def call
|
|
14
17
|
request = Atol::Request::GetDocumentState.new(@params)
|
|
15
18
|
response = request.call
|
|
16
|
-
encoded_body = response.body.force_encoding(Atol::ENCODING)
|
|
19
|
+
encoded_body = response.body.dup.force_encoding(Atol::ENCODING)
|
|
17
20
|
json = JSON.parse(encoded_body)
|
|
18
21
|
|
|
19
22
|
if response.code == '200' && json['error'].nil?
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'atol/request/get_token'
|
|
2
4
|
require 'atol/errors'
|
|
3
5
|
|
|
@@ -10,28 +12,24 @@ module Atol
|
|
|
10
12
|
end
|
|
11
13
|
|
|
12
14
|
def call
|
|
13
|
-
@config.req_tries_number.times do
|
|
15
|
+
@config.req_tries_number.times do
|
|
14
16
|
request = Atol::Request::GetToken.new(config: @config)
|
|
15
17
|
response = request.call
|
|
16
|
-
encoded_body = response.body.
|
|
18
|
+
encoded_body = response.body.dup.force_encoding(Atol::ENCODING)
|
|
17
19
|
json = JSON.parse(encoded_body)
|
|
18
20
|
|
|
19
21
|
case response.code
|
|
20
22
|
when '200'
|
|
21
23
|
return json['token']
|
|
22
24
|
when '400'
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
when 17
|
|
27
|
-
raise Atol::AuthBadRequestError
|
|
28
|
-
end
|
|
25
|
+
raise Atol::AuthBadRequestError
|
|
26
|
+
when '401'
|
|
27
|
+
raise Atol::AuthUserOrPasswordError
|
|
29
28
|
when '500'
|
|
30
29
|
next
|
|
31
30
|
end
|
|
31
|
+
raise "#{response.code} #{response.body}"
|
|
32
32
|
end
|
|
33
|
-
|
|
34
|
-
raise "#{response.code} #{response.body}"
|
|
35
33
|
end
|
|
36
34
|
end
|
|
37
35
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'atol/request/post_document'
|
|
2
4
|
require 'atol/errors'
|
|
3
5
|
|
|
@@ -7,6 +9,7 @@ module Atol
|
|
|
7
9
|
def initialize(operation:, token:, body:, config: nil, req_logger: nil, res_logger: nil)
|
|
8
10
|
@config = config || Atol.config
|
|
9
11
|
raise(Atol::ConfigExpectedError) unless @config.is_a?(Atol::Config)
|
|
12
|
+
|
|
10
13
|
@params = {
|
|
11
14
|
operation: operation,
|
|
12
15
|
token: token,
|
|
@@ -20,7 +23,7 @@ module Atol
|
|
|
20
23
|
def call
|
|
21
24
|
request = Atol::Request::PostDocument.new(@params)
|
|
22
25
|
response = request.call
|
|
23
|
-
encoded_body = response.body.force_encoding(Atol::ENCODING)
|
|
26
|
+
encoded_body = response.body.dup.force_encoding(Atol::ENCODING)
|
|
24
27
|
json = JSON.parse(encoded_body)
|
|
25
28
|
|
|
26
29
|
if response.code == '200' && json['error'].nil?
|
data/lib/atol/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: atol
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- GeorgeGorbanev
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-09-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: anyway_config
|
|
@@ -44,14 +44,14 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '13.0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
54
|
+
version: '13.0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: rspec
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -72,14 +72,14 @@ dependencies:
|
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0.
|
|
75
|
+
version: '0.90'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0.
|
|
82
|
+
version: '0.90'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: webmock
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -103,6 +103,8 @@ extra_rdoc_files: []
|
|
|
103
103
|
files:
|
|
104
104
|
- ".gitignore"
|
|
105
105
|
- ".rspec"
|
|
106
|
+
- ".rubocop.yml"
|
|
107
|
+
- ".rubocop_todo.yml"
|
|
106
108
|
- ".travis.yml"
|
|
107
109
|
- Gemfile
|
|
108
110
|
- Gemfile.lock
|
|
@@ -136,15 +138,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
136
138
|
requirements:
|
|
137
139
|
- - ">="
|
|
138
140
|
- !ruby/object:Gem::Version
|
|
139
|
-
version:
|
|
141
|
+
version: 2.5.0
|
|
140
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
143
|
requirements:
|
|
142
144
|
- - ">="
|
|
143
145
|
- !ruby/object:Gem::Version
|
|
144
146
|
version: '0'
|
|
145
147
|
requirements: []
|
|
146
|
-
|
|
147
|
-
rubygems_version: 2.6.14
|
|
148
|
+
rubygems_version: 3.0.3
|
|
148
149
|
signing_key:
|
|
149
150
|
specification_version: 4
|
|
150
151
|
summary: ATOL KaaS client for Ruby
|