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.
@@ -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 = raw_post(sub_url, data)
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
- else
71
- raise "Unknown code from OD: #{res.status} #{res.reason_phrase} #{res.body}"
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 = raw_post 'validateDocument', data
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 "documents/#{inn}/status/#{document_id}"
125
+ ReceiptResult.from_hash(get_entity("documents/#{inn}/status/#{document_id}"))
118
126
  end
119
127
 
120
128
  def post_correction(data)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OrangeData
4
4
 
5
- VERSION = "0.0.2"
5
+ VERSION = "0.0.3"
6
6
 
7
7
  end
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.2
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-23 00:00:00.000000000 Z
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