orangedata 0.0.2 → 0.0.3
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 +4 -4
- data/Gemfile.lock +12 -1
- data/README.md +39 -42
- data/lib/orange_data/credentials.rb +57 -30
- data/lib/orange_data/receipt.rb +294 -48
- data/lib/orange_data/schema_definitions.yml +776 -0
- data/lib/orange_data/transport.rb +20 -12
- data/lib/orange_data/version.rb +1 -1
- data/lib/orange_data.rb +1 -9
- data/orangedata.gemspec +2 -0
- metadata +31 -2
@@ -55,21 +55,31 @@ module OrangeData
|
|
55
55
|
transport.post(method, data)
|
56
56
|
end
|
57
57
|
|
58
|
+
def post_request(method, data)
|
59
|
+
raw_post(method, data).tap{|resp|
|
60
|
+
if resp.status == 401
|
61
|
+
# TODO: better exceptions
|
62
|
+
raise 'Unauthorized'
|
63
|
+
end
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
58
67
|
def post_entity(sub_url, data)
|
59
|
-
res =
|
68
|
+
res = post_request(sub_url, data)
|
60
69
|
|
61
70
|
case res.status
|
62
71
|
when 201
|
63
72
|
return true
|
64
|
-
when 401
|
65
|
-
raise 'Unauthorized'
|
66
73
|
when 409
|
67
74
|
raise "Conflict"
|
68
75
|
when 400
|
69
|
-
raise "Invalid doc: #{res.body}"
|
70
|
-
|
71
|
-
|
76
|
+
raise "Invalid doc: #{res.body["errors"] || res.body}"
|
77
|
+
when 503
|
78
|
+
if res.headers['Retry-After']
|
79
|
+
raise "Document queue full, retry in #{res.headers['Retry-After']}"
|
80
|
+
end
|
72
81
|
end
|
82
|
+
raise "Unknown code from OD: #{res.status} #{res.reason_phrase} #{res.body}"
|
73
83
|
end
|
74
84
|
|
75
85
|
def get_entity(sub_url)
|
@@ -79,7 +89,7 @@ module OrangeData
|
|
79
89
|
when 200
|
80
90
|
return res.body
|
81
91
|
when 400
|
82
|
-
raise "Cannot get doc: #{res.body}"
|
92
|
+
raise "Cannot get doc: #{res.body["errors"] || res.body}"
|
83
93
|
when 401
|
84
94
|
raise 'Unauthorized'
|
85
95
|
end
|
@@ -95,15 +105,13 @@ module OrangeData
|
|
95
105
|
end
|
96
106
|
|
97
107
|
def post_document_validate(data)
|
98
|
-
res =
|
108
|
+
res = post_request 'validateDocument', data
|
99
109
|
|
100
110
|
case res.status
|
101
111
|
when 200
|
102
112
|
return true
|
103
113
|
when 400
|
104
|
-
return res.body
|
105
|
-
when 401
|
106
|
-
raise 'Unauthorized'
|
114
|
+
return res.body["errors"]
|
107
115
|
else
|
108
116
|
raise "Unexpected response: #{res.status} #{res.reason_phrase}"
|
109
117
|
end
|
@@ -114,7 +122,7 @@ module OrangeData
|
|
114
122
|
end
|
115
123
|
|
116
124
|
def get_document(inn, document_id)
|
117
|
-
get_entity
|
125
|
+
ReceiptResult.from_hash(get_entity("documents/#{inn}/status/#{document_id}"))
|
118
126
|
end
|
119
127
|
|
120
128
|
def post_correction(data)
|
data/lib/orange_data/version.rb
CHANGED
data/lib/orange_data.rb
CHANGED
@@ -3,19 +3,11 @@
|
|
3
3
|
require "orange_data/version"
|
4
4
|
require "orange_data/credentials"
|
5
5
|
require "orange_data/transport"
|
6
|
+
require "orange_data/receipt"
|
6
7
|
|
7
8
|
# top-level namespace
|
8
9
|
module OrangeData
|
9
10
|
|
10
|
-
# QR: t=20180518T220500&s=975.88&fn=8710000101125654&i=99456&fp=1250448795&n=1
|
11
|
-
#
|
12
11
|
|
13
|
-
# - t=<date/time - дата и время осуществления расчета в формате ГГГГММДДТЧЧММ>
|
14
|
-
# - s=<сумма расчета в рублях и копейках, разделенных точкой>
|
15
|
-
# - fn=<заводской номер фискального накопителя>
|
16
|
-
# - i=<порядковый номер фискального документа, нулями не дополняется>
|
17
|
-
# - fp=<фискальный признак документа, нулями не дополняется>
|
18
|
-
# - n=<признак расчета>.
|
19
|
-
# Пример строки QR-кода: t=20150720T1638&s=9999999.00&fn=000110000105&i=12345678&fp=123456&n=2
|
20
12
|
|
21
13
|
end
|
data/orangedata.gemspec
CHANGED
@@ -29,8 +29,10 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_dependency "faraday_middleware"
|
30
30
|
|
31
31
|
spec.add_development_dependency "bundler", "~> 1.16"
|
32
|
+
spec.add_development_dependency "json-schema", "~> 2.8"
|
32
33
|
spec.add_development_dependency "rake", "~> 10.0"
|
33
34
|
spec.add_development_dependency "rspec"
|
34
35
|
spec.add_development_dependency "rubocop"
|
36
|
+
spec.add_development_dependency "simplecov"
|
35
37
|
spec.add_development_dependency "webmock"
|
36
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: orangedata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vasily Fedoseyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.16'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json-schema
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.8'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +108,20 @@ dependencies:
|
|
94
108
|
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: webmock
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,6 +158,7 @@ files:
|
|
130
158
|
- lib/orange_data/credentials.rb
|
131
159
|
- lib/orange_data/credentials_test.yml
|
132
160
|
- lib/orange_data/receipt.rb
|
161
|
+
- lib/orange_data/schema_definitions.yml
|
133
162
|
- lib/orange_data/transport.rb
|
134
163
|
- lib/orange_data/version.rb
|
135
164
|
- lib/orangedata.rb
|