eligible 3.0.3 → 3.1.0.beta1

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.
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 +98 -17
  5. data/Gemfile +4 -0
  6. data/Gemfile.lock +15 -10
  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 -40
  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,16 +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(484b841263be5ad39ac7cadd77ac61d84add5acd
55
- ad10dbfd536a0d054b02a7d30c11aa1eb5dbfb41
56
- 1fe04161ed657b55ac29a0c48da4cf246f8e657b
57
- 1a1b7d4faa43ecdeab40cc8d203583624d5917f4
58
- b4225ee59dc7ede4d68e7b2c75c6e6ac79649416
95
+ @@fingerprints = %w(b4225ee59dc7ede4d68e7b2c75c6e6ac79649416
59
96
  75132c1ab844500c6ad1f26b49c11d36933ce868
60
- 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
61
109
 
62
- def self.api_url(url = '')
63
- @@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
64
124
  end
65
125
 
66
126
  def self.api_key
@@ -116,12 +176,18 @@ module Eligible
116
176
  Util.key?(params, :api_key)
117
177
  end
118
178
 
179
+ def self.rest_api_version?(params)
180
+ Util.key?(params, :rest_api_version)
181
+ end
182
+
119
183
  def self.request(method, url, api_key, params = {}, headers = {})
120
184
  session_token = Util.value(params, :session_token)
121
185
  api_key ||= @@api_key unless session_token
122
186
  test = self.test
123
187
  api_key = Util.value(params, :api_key) if api_key?(params)
124
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)
125
191
 
126
192
  fail AuthenticationError, 'No API key provided. (HINT: set your API key using "Eligible.api_key = <API-KEY>".' unless api_key || session_token
127
193
 
@@ -135,39 +201,13 @@ module Eligible
135
201
  uname: uname
136
202
  }
137
203
 
138
- # GET requests, parameters on the query string
139
- # POST requests, parameters as json in the body
140
- url = api_url(url)
141
- case method.to_s.downcase.to_sym
142
- when :get, :head, :delete
143
- url += "?api_key=#{api_key}"
144
- if params && params.count > 0
145
- query_string = Util.flatten_params(params).collect { |key, value| "#{key}=#{Util.url_encode(value)}" }.join('&')
146
- url += "&#{query_string}"
147
- end
148
- url += "&test=#{test}"
149
- payload = nil
150
- else
151
- params.merge!('api_key' => api_key, 'test' => test)
152
- payload = Util.key?(params, :file) ? params : Eligible::JSON.dump(params)
153
- end
154
-
155
- begin
156
- headers = { x_eligible_debuginfo: Eligible::JSON.dump(debug_info) }.merge(headers)
157
- rescue => e
158
- headers = {
159
- x_eligible_client_raw_user_agent: debug_info.inspect,
160
- error: "#{e} (#{e.class})"
161
- }.merge(headers)
162
- end
163
-
164
- headers = {
165
- user_agent: "eligible-ruby/#{Eligible::VERSION}",
166
- authorization: "Bearer #{api_key}",
167
- content_type: 'application/json'
168
- }.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
+ )
169
208
 
170
- 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 })
171
211
 
172
212
  opts = {
173
213
  method: method,
@@ -222,6 +262,76 @@ module Eligible
222
262
  return [ resp, api_key ]
223
263
  end
224
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
+
225
335
  def self.verify_certificate
226
336
  lambda do |preverify_ok, certificate_store|
227
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.3
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: 2026-01-17 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.4.10
217
+ rubygems_version: 3.3.8
179
218
  signing_key:
180
219
  specification_version: 4
181
220
  summary: Ruby wrapper for the Eligible API