eligible 3.0.0 → 3.1.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -0
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +101 -11
  5. data/Gemfile +4 -0
  6. data/Gemfile.lock +13 -6
  7. data/README.md +51 -54
  8. data/eligible.gemspec +2 -1
  9. data/lib/eligible/api_resource.rb +27 -6
  10. data/lib/eligible/calculator_deploy_url.rb +2 -2
  11. data/lib/eligible/claim.rb +10 -10
  12. data/lib/eligible/coverage.rb +8 -4
  13. data/lib/eligible/coverage_resource.rb +4 -4
  14. data/lib/eligible/customer.rb +8 -8
  15. data/lib/eligible/encryptor.rb +1 -1
  16. data/lib/eligible/enrollment.rb +8 -8
  17. data/lib/eligible/errors/eligible_error.rb +2 -1
  18. data/lib/eligible/icd.rb +6 -6
  19. data/lib/eligible/lockbox.rb +6 -6
  20. data/lib/eligible/oauth_token.rb +9 -0
  21. data/lib/eligible/ocr.rb +2 -2
  22. data/lib/eligible/original_signature_pdf.rb +12 -10
  23. data/lib/eligible/payer.rb +6 -6
  24. data/lib/eligible/payer_mapping.rb +37 -0
  25. data/lib/eligible/payment.rb +4 -4
  26. data/lib/eligible/preauth_resource.rb +4 -4
  27. data/lib/eligible/precert.rb +2 -2
  28. data/lib/eligible/provider_model.rb +2 -2
  29. data/lib/eligible/public_key.rb +8 -8
  30. data/lib/eligible/received_pdf.rb +6 -4
  31. data/lib/eligible/risk_assessment.rb +6 -6
  32. data/lib/eligible/session_token.rb +4 -4
  33. data/lib/eligible/ticket.rb +12 -12
  34. data/lib/eligible/util.rb +2 -2
  35. data/lib/eligible/v1_0/action.rb +9 -0
  36. data/lib/eligible/v1_0/attribute.rb +9 -0
  37. data/lib/eligible/v1_0/balance_capture.rb +21 -0
  38. data/lib/eligible/v1_0/charge.rb +13 -0
  39. data/lib/eligible/v1_0/claim.rb +25 -0
  40. data/lib/eligible/v1_0/claim_service_line.rb +9 -0
  41. data/lib/eligible/v1_0/contract.rb +9 -0
  42. data/lib/eligible/v1_0/device.rb +9 -0
  43. data/lib/eligible/v1_0/discount.rb +9 -0
  44. data/lib/eligible/v1_0/enrollment.rb +17 -0
  45. data/lib/eligible/v1_0/estimate.rb +29 -0
  46. data/lib/eligible/v1_0/estimate_service_line.rb +17 -0
  47. data/lib/eligible/v1_0/fee.rb +21 -0
  48. data/lib/eligible/v1_0/fee_refund.rb +29 -0
  49. data/lib/eligible/v1_0/file.rb +17 -0
  50. data/lib/eligible/v1_0/file_link.rb +13 -0
  51. data/lib/eligible/v1_0/insurance_company.rb +21 -0
  52. data/lib/eligible/v1_0/insurance_company_alias.rb +9 -0
  53. data/lib/eligible/v1_0/insurance_policy.rb +9 -0
  54. data/lib/eligible/v1_0/patient_question.rb +9 -0
  55. data/lib/eligible/v1_0/patient_questionnaire.rb +9 -0
  56. data/lib/eligible/v1_0/patient_record.rb +9 -0
  57. data/lib/eligible/v1_0/patient_statement.rb +59 -0
  58. data/lib/eligible/v1_0/patient_statement_service_line.rb +13 -0
  59. data/lib/eligible/v1_0/payment_report.rb +21 -0
  60. data/lib/eligible/v1_0/product.rb +9 -0
  61. data/lib/eligible/v1_0/provider.rb +9 -0
  62. data/lib/eligible/v1_0/refund.rb +21 -0
  63. data/lib/eligible/v1_0/remark.rb +21 -0
  64. data/lib/eligible/v1_0/rest_api_base.rb +44 -0
  65. data/lib/eligible/v1_0/rule.rb +13 -0
  66. data/lib/eligible/v1_0/session.rb +21 -0
  67. data/lib/eligible/v1_0/transaction.rb +21 -0
  68. data/lib/eligible/v1_0/treatment.rb +9 -0
  69. data/lib/eligible/v1_0/value_list.rb +9 -0
  70. data/lib/eligible/v1_0/value_list_item.rb +9 -0
  71. data/lib/eligible/v1_0/verification.rb +17 -0
  72. data/lib/eligible/version.rb +1 -1
  73. data/lib/eligible/visit_type.rb +4 -4
  74. data/lib/eligible/x12.rb +2 -2
  75. data/lib/eligible.rb +150 -38
  76. metadata +47 -8
data/lib/eligible.rb CHANGED
@@ -25,8 +25,10 @@ require 'eligible/ticket'
25
25
  require 'eligible/customer'
26
26
  require 'eligible/ocr'
27
27
  require 'eligible/original_signature_pdf'
28
+ require 'eligible/oauth_token'
28
29
  require 'eligible/received_pdf'
29
30
  require 'eligible/payer'
31
+ require 'eligible/payer_mapping'
30
32
  require 'eligible/preauth_resource'
31
33
  require 'eligible/precert'
32
34
  require 'eligible/referral'
@@ -39,6 +41,45 @@ require 'eligible/calculator_deploy_url'
39
41
  require 'eligible/risk_assessment'
40
42
  require 'eligible/icd'
41
43
 
44
+ # New REST API Endpoints
45
+ require 'eligible/v1_0/rest_api_base'
46
+ require 'eligible/v1_0/action'
47
+ require 'eligible/v1_0/attribute'
48
+ require 'eligible/v1_0/balance_capture'
49
+ require 'eligible/v1_0/charge'
50
+ require 'eligible/v1_0/claim'
51
+ require 'eligible/v1_0/claim_service_line'
52
+ require 'eligible/v1_0/contract'
53
+ require 'eligible/v1_0/device'
54
+ require 'eligible/v1_0/discount'
55
+ require 'eligible/v1_0/enrollment'
56
+ require 'eligible/v1_0/estimate'
57
+ require 'eligible/v1_0/estimate_service_line'
58
+ require 'eligible/v1_0/fee'
59
+ require 'eligible/v1_0/fee_refund'
60
+ require 'eligible/v1_0/file'
61
+ require 'eligible/v1_0/file_link'
62
+ require 'eligible/v1_0/insurance_company'
63
+ require 'eligible/v1_0/insurance_company_alias'
64
+ require 'eligible/v1_0/insurance_policy'
65
+ require 'eligible/v1_0/patient_record'
66
+ require 'eligible/v1_0/patient_statement'
67
+ require 'eligible/v1_0/patient_statement_service_line'
68
+ require 'eligible/v1_0/payment_report'
69
+ require 'eligible/v1_0/patient_question'
70
+ require 'eligible/v1_0/patient_questionnaire'
71
+ require 'eligible/v1_0/product'
72
+ require 'eligible/v1_0/provider'
73
+ require 'eligible/v1_0/refund'
74
+ require 'eligible/v1_0/remark'
75
+ require 'eligible/v1_0/rule'
76
+ require 'eligible/v1_0/session'
77
+ require 'eligible/v1_0/transaction'
78
+ require 'eligible/v1_0/treatment'
79
+ require 'eligible/v1_0/value_list'
80
+ require 'eligible/v1_0/value_list_item'
81
+ require 'eligible/v1_0/verification'
82
+
42
83
  # Errors
43
84
  require 'eligible/errors/eligible_error'
44
85
  require 'eligible/errors/api_connection_error'
@@ -51,14 +92,35 @@ module Eligible
51
92
  @@test = false
52
93
  @@api_version = '1.5'
53
94
  @@api_base = "https://gds.eligibleapi.com/v#{@@api_version}"
54
- @@fingerprints = %w(1fe04161ed657b55ac29a0c48da4cf246f8e657b
55
- 1a1b7d4faa43ecdeab40cc8d203583624d5917f4
56
- b4225ee59dc7ede4d68e7b2c75c6e6ac79649416
95
+ @@fingerprints = %w(b4225ee59dc7ede4d68e7b2c75c6e6ac79649416
57
96
  75132c1ab844500c6ad1f26b49c11d36933ce868
58
- a1cd762a9f4be0f3b6bdd6300e52c6ce8d7d67f5)
97
+ 1c3fe254bded256ea30d0a235bb9881b82701082
98
+ a1cd762a9f4be0f3b6bdd6300e52c6ce8d7d67f5
99
+ 36d6b6f98a2b9bcdf4321d1978553e23cf044b53
100
+ d93b7697100fe978ae0f78fbf2a2443cc1958ca3
101
+ 896ce24f7a83eb656c040985fdb50ce39f90b813)
102
+ @@eligible_account = nil
103
+ @@eligible_account_id = nil
104
+
105
+ def self.api_url(url = '', rest_api_version = nil)
106
+ api_base = rest_api_version ? @@api_base.gsub(/v(\d).(\d)/, "v#{rest_api_version}") : @@api_base
107
+ api_base + url.to_s
108
+ end
59
109
 
60
- def self.api_url(url = '')
61
- @@api_base + url.to_s
110
+ def self.eligible_account
111
+ @@eligible_account
112
+ end
113
+
114
+ def self.eligible_account_id
115
+ @@eligible_account_id
116
+ end
117
+
118
+ def self.eligible_account=(eligible_account)
119
+ @@eligible_account = eligible_account
120
+ end
121
+
122
+ def self.eligible_account_id=(eligible_account_id)
123
+ @@eligible_account_id = eligible_account_id
62
124
  end
63
125
 
64
126
  def self.api_key
@@ -114,12 +176,18 @@ module Eligible
114
176
  Util.key?(params, :api_key)
115
177
  end
116
178
 
179
+ def self.rest_api_version?(params)
180
+ Util.key?(params, :rest_api_version)
181
+ end
182
+
117
183
  def self.request(method, url, api_key, params = {}, headers = {})
118
184
  session_token = Util.value(params, :session_token)
119
185
  api_key ||= @@api_key unless session_token
120
186
  test = self.test
121
187
  api_key = Util.value(params, :api_key) if api_key?(params)
122
188
  test = Util.value(params, :test) if test_key?(params)
189
+ rest_api_version = Util.value(params, :rest_api_version) if rest_api_version?(params)
190
+ basic_auth = true if rest_api_version?(params)
123
191
 
124
192
  fail AuthenticationError, 'No API key provided. (HINT: set your API key using "Eligible.api_key = <API-KEY>".' unless api_key || session_token
125
193
 
@@ -133,39 +201,13 @@ module Eligible
133
201
  uname: uname
134
202
  }
135
203
 
136
- # GET requests, parameters on the query string
137
- # POST requests, parameters as json in the body
138
- url = api_url(url)
139
- case method.to_s.downcase.to_sym
140
- when :get, :head, :delete
141
- url += "?api_key=#{api_key}"
142
- if params && params.count > 0
143
- query_string = Util.flatten_params(params).collect { |key, value| "#{key}=#{Util.url_encode(value)}" }.join('&')
144
- url += "&#{query_string}"
145
- end
146
- url += "&test=#{test}"
147
- payload = nil
148
- else
149
- params.merge!('api_key' => api_key, 'test' => test)
150
- payload = Util.key?(params, :file) ? params : Eligible::JSON.dump(params)
151
- end
152
-
153
- begin
154
- headers = { x_eligible_debuginfo: Eligible::JSON.dump(debug_info) }.merge(headers)
155
- rescue => e
156
- headers = {
157
- x_eligible_client_raw_user_agent: debug_info.inspect,
158
- error: "#{e} (#{e.class})"
159
- }.merge(headers)
160
- end
161
-
162
- headers = {
163
- user_agent: "eligible-ruby/#{Eligible::VERSION}",
164
- authorization: "Bearer #{api_key}",
165
- content_type: 'application/json'
166
- }.merge(headers)
204
+ # Set request URL and Payload based on new and old endpoints version
205
+ url, payload = generate_request_url_and_payload(
206
+ method, url, params, **{ test: test, rest_api_version: rest_api_version, api_key: api_key, basic_auth: basic_auth },
207
+ )
167
208
 
168
- headers[:eligible_version] = api_version if api_version
209
+ # Set request Headers and Authorization based on new and old endpoints version
210
+ headers = generate_request_headers(headers, debug_info, basic_auth, **{ api_key: api_key, session_token: session_token })
169
211
 
170
212
  opts = {
171
213
  method: method,
@@ -220,6 +262,76 @@ module Eligible
220
262
  return [ resp, api_key ]
221
263
  end
222
264
 
265
+ def self.generate_request_url_and_payload(method, url, params, options)
266
+ # GET requests, parameters on the query string
267
+ # POST requests, parameters as json in the body
268
+ url = api_url(url, options[:rest_api_version])
269
+ # Used rest_api_version param only to identify new REST API version, and is not required to make calls for new REST api endpoints
270
+ params.delete(:rest_api_version)
271
+ case method.to_s.downcase.to_sym
272
+ when :get, :head, :delete
273
+ url = fetch_url_with_query_string(params, url, **options)
274
+ payload = nil
275
+ else
276
+ payload = request_payload(options, **params)
277
+ end
278
+
279
+ [url, payload]
280
+ end
281
+
282
+ def self.fetch_url_with_query_string(params, url, options)
283
+ url += options_query_string(options)
284
+ return url unless params || params.count == 0
285
+
286
+ query_string = params_query_string(params)
287
+ url += options[:basic_auth] ? "?#{query_string}" : "&#{query_string}"
288
+ url
289
+ end
290
+
291
+ def self.options_query_string(options)
292
+ options[:basic_auth] ? '' : "?test=#{options[:test]}&api_key=#{options[:api_key]}"
293
+ end
294
+
295
+ def self.params_query_string(params)
296
+ Util.flatten_params(params).collect { |key, value| "#{key}=#{Util.url_encode(value)}" }.join('&')
297
+ end
298
+
299
+ def self.request_payload(options, params)
300
+ params.merge!('test' => options[:test], 'api_key' => options[:api_key]) unless options[:basic_auth]
301
+ Util.key?(params, :file) ? params : Eligible::JSON.dump(params)
302
+ end
303
+
304
+ def self.generate_request_headers(headers, debug_info, basic_auth, auth_options)
305
+ begin
306
+ headers = { x_eligible_debuginfo: Eligible::JSON.dump(debug_info) }.merge(headers)
307
+ rescue => e
308
+ headers = {
309
+ x_eligible_client_raw_user_agent: debug_info.inspect,
310
+ error: "#{e} (#{e.class})"
311
+ }.merge(headers)
312
+ end
313
+
314
+ headers = {
315
+ user_agent: "eligible-ruby/#{Eligible::VERSION}",
316
+ content_type: 'application/json'
317
+ }.merge(headers)
318
+
319
+ headers[:authorization] = authorization_header(basic_auth, **auth_options)
320
+ headers[:eligible_version] = api_version if api_version
321
+ headers[:eligible_account] = eligible_account if eligible_account
322
+ headers[:eligible_account_id] = eligible_account_id if eligible_account_id
323
+ headers
324
+ end
325
+
326
+ def self.authorization_header(basic_auth, auth_options)
327
+ # Using Bearer scheme for Session Token Auth for new REST API endpoints (v1.0)
328
+ return "Bearer #{auth_options[:session_token]}" if basic_auth && auth_options[:session_token]
329
+
330
+ # Using Basic Auth for new REST API endpoints (v1.0)
331
+ basic_auth_token = Base64.strict_encode64("#{auth_options[:api_key]}:")
332
+ "Basic #{basic_auth_token}" if basic_auth
333
+ end
334
+
223
335
  def self.verify_certificate
224
336
  lambda do |preverify_ok, certificate_store|
225
337
  return true if test == 'true'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eligible
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katelyn Gleaon
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-01-18 00:00:00.000000000 Z
13
+ date: 2022-09-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client
@@ -74,14 +74,14 @@ dependencies:
74
74
  requirements:
75
75
  - - "~>"
76
76
  - !ruby/object:Gem::Version
77
- version: 0.5.1x
77
+ version: 0.5.1
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - "~>"
83
83
  - !ruby/object:Gem::Version
84
- version: 0.5.1x
84
+ version: 0.5.1
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: simplecov
87
87
  requirement: !ruby/object:Gem::Requirement
@@ -139,9 +139,11 @@ files:
139
139
  - lib/eligible/json.rb
140
140
  - lib/eligible/lockbox.rb
141
141
  - lib/eligible/medicare.rb
142
+ - lib/eligible/oauth_token.rb
142
143
  - lib/eligible/ocr.rb
143
144
  - lib/eligible/original_signature_pdf.rb
144
145
  - lib/eligible/payer.rb
146
+ - lib/eligible/payer_mapping.rb
145
147
  - lib/eligible/payment.rb
146
148
  - lib/eligible/preauth_resource.rb
147
149
  - lib/eligible/precert.rb
@@ -153,6 +155,43 @@ files:
153
155
  - lib/eligible/session_token.rb
154
156
  - lib/eligible/ticket.rb
155
157
  - lib/eligible/util.rb
158
+ - lib/eligible/v1_0/action.rb
159
+ - lib/eligible/v1_0/attribute.rb
160
+ - lib/eligible/v1_0/balance_capture.rb
161
+ - lib/eligible/v1_0/charge.rb
162
+ - lib/eligible/v1_0/claim.rb
163
+ - lib/eligible/v1_0/claim_service_line.rb
164
+ - lib/eligible/v1_0/contract.rb
165
+ - lib/eligible/v1_0/device.rb
166
+ - lib/eligible/v1_0/discount.rb
167
+ - lib/eligible/v1_0/enrollment.rb
168
+ - lib/eligible/v1_0/estimate.rb
169
+ - lib/eligible/v1_0/estimate_service_line.rb
170
+ - lib/eligible/v1_0/fee.rb
171
+ - lib/eligible/v1_0/fee_refund.rb
172
+ - lib/eligible/v1_0/file.rb
173
+ - lib/eligible/v1_0/file_link.rb
174
+ - lib/eligible/v1_0/insurance_company.rb
175
+ - lib/eligible/v1_0/insurance_company_alias.rb
176
+ - lib/eligible/v1_0/insurance_policy.rb
177
+ - lib/eligible/v1_0/patient_question.rb
178
+ - lib/eligible/v1_0/patient_questionnaire.rb
179
+ - lib/eligible/v1_0/patient_record.rb
180
+ - lib/eligible/v1_0/patient_statement.rb
181
+ - lib/eligible/v1_0/patient_statement_service_line.rb
182
+ - lib/eligible/v1_0/payment_report.rb
183
+ - lib/eligible/v1_0/product.rb
184
+ - lib/eligible/v1_0/provider.rb
185
+ - lib/eligible/v1_0/refund.rb
186
+ - lib/eligible/v1_0/remark.rb
187
+ - lib/eligible/v1_0/rest_api_base.rb
188
+ - lib/eligible/v1_0/rule.rb
189
+ - lib/eligible/v1_0/session.rb
190
+ - lib/eligible/v1_0/transaction.rb
191
+ - lib/eligible/v1_0/treatment.rb
192
+ - lib/eligible/v1_0/value_list.rb
193
+ - lib/eligible/v1_0/value_list_item.rb
194
+ - lib/eligible/v1_0/verification.rb
156
195
  - lib/eligible/version.rb
157
196
  - lib/eligible/visit_type.rb
158
197
  - lib/eligible/x12.rb
@@ -168,14 +207,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
207
  requirements:
169
208
  - - ">="
170
209
  - !ruby/object:Gem::Version
171
- version: '0'
210
+ version: 3.1.0
172
211
  required_rubygems_version: !ruby/object:Gem::Requirement
173
212
  requirements:
174
- - - ">="
213
+ - - ">"
175
214
  - !ruby/object:Gem::Version
176
- version: '0'
215
+ version: 1.3.1
177
216
  requirements: []
178
- rubygems_version: 3.3.3
217
+ rubygems_version: 3.3.8
179
218
  signing_key:
180
219
  specification_version: 4
181
220
  summary: Ruby wrapper for the Eligible API