eligible 2.5.0 → 2.6.0
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/.codeclimate.yml +29 -0
- data/.rspec +1 -0
- data/.rubocop.yml +1156 -2
- data/ChangeLog +8 -0
- data/README.md +1 -1
- data/Rakefile +6 -0
- data/lib/eligible.rb +35 -22
- data/lib/eligible/api_resource.rb +10 -0
- data/lib/eligible/claim.rb +13 -10
- data/lib/eligible/coverage.rb +8 -12
- data/lib/eligible/coverage_resource.rb +19 -0
- data/lib/eligible/customer.rb +19 -0
- data/lib/eligible/demographic.rb +5 -7
- data/lib/eligible/eligible_object.rb +1 -2
- data/lib/eligible/enrollment.rb +7 -6
- data/lib/eligible/medicare.rb +5 -7
- data/lib/eligible/original_signature_pdf.rb +29 -0
- data/lib/eligible/payer.rb +16 -0
- data/lib/eligible/payment.rb +1 -2
- data/lib/eligible/ticket.rb +7 -13
- data/lib/eligible/util.rb +14 -10
- data/lib/eligible/version.rb +1 -1
- data/lib/eligible/x12.rb +2 -2
- metadata +8 -3
data/ChangeLog
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Eligible
|
2
2
|
|
3
|
-
[](https://circleci.com/gh/eligible/eligible-ruby)
|
3
|
+
[](https://circleci.com/gh/eligible/eligible-ruby) [](https://codeclimate.com/github/eligible/eligible-ruby)
|
4
4
|
|
5
5
|
Ruby bindings for the [Eligible API](https://eligible.com/rest)
|
6
6
|
|
data/Rakefile
CHANGED
data/lib/eligible.rb
CHANGED
@@ -12,6 +12,7 @@ require 'eligible/util'
|
|
12
12
|
require 'eligible/json'
|
13
13
|
require 'eligible/eligible_object'
|
14
14
|
require 'eligible/api_resource'
|
15
|
+
require 'eligible/coverage_resource'
|
15
16
|
require 'eligible/demographic'
|
16
17
|
require 'eligible/claim'
|
17
18
|
require 'eligible/enrollment'
|
@@ -20,6 +21,9 @@ require 'eligible/payment'
|
|
20
21
|
require 'eligible/x12'
|
21
22
|
require 'eligible/medicare'
|
22
23
|
require 'eligible/ticket'
|
24
|
+
require 'eligible/customer'
|
25
|
+
require 'eligible/original_signature_pdf'
|
26
|
+
require 'eligible/payer'
|
23
27
|
|
24
28
|
# Errors
|
25
29
|
require 'eligible/errors/eligible_error'
|
@@ -28,11 +32,10 @@ require 'eligible/errors/authentication_error'
|
|
28
32
|
require 'eligible/errors/api_error'
|
29
33
|
require 'eligible/errors/invalid_request_error'
|
30
34
|
|
31
|
-
# rubocop:disable Metrics/ModuleLength, Style/ClassVars
|
32
35
|
module Eligible
|
33
36
|
@@api_key = nil
|
34
37
|
@@test = false
|
35
|
-
@@api_version = 1.
|
38
|
+
@@api_version = '1.5'
|
36
39
|
@@api_base = "https://gds.eligibleapi.com/v#{@@api_version}"
|
37
40
|
@@fingerprints = %w(79d62e8a9d59ae687372f8e71345c76d92527fac 4b2c6888ede79d0ee47339dc6fab5a6d0dc3cb0e)
|
38
41
|
|
@@ -81,7 +84,10 @@ module Eligible
|
|
81
84
|
@@fingerprints << digest
|
82
85
|
end
|
83
86
|
|
84
|
-
|
87
|
+
def self.direct_response?(params)
|
88
|
+
params[:format].is_a?(String) && params[:format].downcase == 'x12'
|
89
|
+
end
|
90
|
+
|
85
91
|
def self.request(method, url, api_key, params = {}, headers = {})
|
86
92
|
api_key ||= @@api_key
|
87
93
|
test = self.test
|
@@ -104,7 +110,7 @@ module Eligible
|
|
104
110
|
# POST requests, parameters as json in the body
|
105
111
|
url = api_url(url)
|
106
112
|
case method.to_s.downcase.to_sym
|
107
|
-
when :get, :head
|
113
|
+
when :get, :head, :delete
|
108
114
|
url += "?api_key=#{api_key}"
|
109
115
|
if params && params.count > 0
|
110
116
|
query_string = Util.flatten_params(params).collect { |key, value| "#{key}=#{Util.url_encode(value)}" }.join('&')
|
@@ -113,7 +119,8 @@ module Eligible
|
|
113
119
|
url += "&test=#{test}"
|
114
120
|
payload = nil
|
115
121
|
else
|
116
|
-
|
122
|
+
params.merge!('api_key' => api_key, 'test' => test)
|
123
|
+
payload = params.key?(:file) ? params : Eligible::JSON.dump(params)
|
117
124
|
end
|
118
125
|
|
119
126
|
begin
|
@@ -145,43 +152,44 @@ module Eligible
|
|
145
152
|
|
146
153
|
begin
|
147
154
|
response = execute_request(opts)
|
155
|
+
|
148
156
|
rescue SocketError => e
|
149
157
|
handle_restclient_error(e)
|
158
|
+
|
150
159
|
rescue NoMethodError => e
|
151
160
|
# Work around RestClient bug
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
end
|
158
|
-
# rubocop:disable Lint/AssignmentInCondition, Style/AndOr
|
161
|
+
raise unless e.message =~ /\WRequestFailed\W/
|
162
|
+
|
163
|
+
e = APIConnectionError.new('Unexpected HTTP response code')
|
164
|
+
handle_restclient_error(e)
|
165
|
+
|
159
166
|
rescue RestClient::ExceptionWithResponse => e
|
160
|
-
|
161
|
-
|
167
|
+
err_rcode = e.http_code
|
168
|
+
err_rbody = e.http_body
|
169
|
+
|
170
|
+
if err_rcode && err_rbody
|
171
|
+
handle_api_error(err_rcode, err_rbody)
|
162
172
|
else
|
163
173
|
handle_restclient_error(e)
|
164
174
|
end
|
175
|
+
|
165
176
|
rescue RestClient::Exception, Errno::ECONNREFUSED => e
|
166
177
|
handle_restclient_error(e)
|
167
178
|
end
|
168
179
|
|
169
180
|
rbody = response.body
|
170
181
|
rcode = response.code
|
182
|
+
|
171
183
|
begin
|
172
184
|
# Would use :symbolize_names => true, but apparently there is
|
173
185
|
# some library out there that makes symbolize_names not work.
|
174
|
-
resp =
|
175
|
-
rbody
|
176
|
-
else
|
177
|
-
Eligible::JSON.load(rbody)
|
178
|
-
end
|
186
|
+
resp = direct_response?(params) ? rbody : Eligible::JSON.load(rbody)
|
179
187
|
rescue MultiJson::DecodeError
|
180
188
|
raise APIError.new("Invalid response object from API: #{rbody.inspect} (HTTP response code was #{rcode})", rcode, rbody)
|
181
189
|
end
|
182
190
|
|
183
191
|
resp = Util.symbolize_names(resp)
|
184
|
-
[resp, api_key]
|
192
|
+
return [ resp, api_key ]
|
185
193
|
end
|
186
194
|
|
187
195
|
def self.verify_certificate
|
@@ -208,7 +216,12 @@ module Eligible
|
|
208
216
|
RestClient::Request.execute(opts)
|
209
217
|
end
|
210
218
|
|
211
|
-
|
219
|
+
def self.error_message(error)
|
220
|
+
return error.to_s unless error.is_a?(Hash)
|
221
|
+
result = error[:details] || error[:reject_reason_description] || error
|
222
|
+
return result.to_s
|
223
|
+
end
|
224
|
+
|
212
225
|
def self.handle_api_error(rcode, rbody)
|
213
226
|
begin
|
214
227
|
error_obj = Eligible::JSON.load(rbody)
|
@@ -219,7 +232,7 @@ module Eligible
|
|
219
232
|
raise APIError.new("Invalid response object from API: #{rbody.inspect} (HTTP response code was #{rcode})", rcode, rbody)
|
220
233
|
end
|
221
234
|
|
222
|
-
error_msg = error
|
235
|
+
error_msg = error_message(error)
|
223
236
|
|
224
237
|
case rcode
|
225
238
|
when 400, 404 then
|
@@ -10,5 +10,15 @@ module Eligible
|
|
10
10
|
end
|
11
11
|
"/#{CGI.escape(class_name.downcase)}/"
|
12
12
|
end
|
13
|
+
|
14
|
+
def self.require_param(value, name)
|
15
|
+
fail ArgumentError, "#{name} of the claim is required" if value.nil? || (value.is_a?(String) && value.empty?)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.send_request(method, url, api_key, params, required_param_name = nil)
|
19
|
+
require_param(params[required_param_name], required_param_name) unless required_param_name.nil?
|
20
|
+
response, api_key = Eligible.request(method, url, api_key, params)
|
21
|
+
Util.convert_to_eligible_object(response, api_key)
|
22
|
+
end
|
13
23
|
end
|
14
24
|
end
|
data/lib/eligible/claim.rb
CHANGED
@@ -1,22 +1,25 @@
|
|
1
1
|
module Eligible
|
2
2
|
class Claim < APIResource
|
3
|
-
def self.
|
4
|
-
|
5
|
-
Util.convert_to_eligible_object(response, api_key)
|
3
|
+
def self.ack(params, api_key = nil)
|
4
|
+
send_request(:get, "/claims/#{params[:reference_id]}/acknowledgements.json", api_key, params, :reference_id)
|
6
5
|
end
|
7
6
|
|
8
7
|
def self.post(params, api_key = nil)
|
9
|
-
|
10
|
-
Util.convert_to_eligible_object(response, api_key)
|
8
|
+
send_request(:post, '/claims.json', api_key, params)
|
11
9
|
end
|
12
10
|
|
13
|
-
def self.
|
14
|
-
|
15
|
-
Util.convert_to_eligible_object(response, api_key)
|
11
|
+
def self.acks(params, api_key = nil)
|
12
|
+
send_request(:get, '/claims/acknowledgements.json', api_key, params)
|
16
13
|
end
|
17
14
|
|
18
|
-
def
|
19
|
-
|
15
|
+
def self.payment_report(params, api_key = nil)
|
16
|
+
require_param(params[:reference_id], 'Reference id')
|
17
|
+
url = params.key?(:id) ? "/claims/#{params[:reference_id]}/payment_reports/#{params[:id]}" : "/claims/#{params[:reference_id]}/payment_reports"
|
18
|
+
send_request(:get, url, api_key, params)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.payment_reports(params, api_key = nil)
|
22
|
+
send_request(:get, '/claims/payment_reports.json', api_key, params)
|
20
23
|
end
|
21
24
|
end
|
22
25
|
end
|
data/lib/eligible/coverage.rb
CHANGED
@@ -1,23 +1,19 @@
|
|
1
1
|
module Eligible
|
2
|
-
class Coverage <
|
3
|
-
def self.
|
4
|
-
|
5
|
-
Util.convert_to_eligible_object(response, api_key)
|
2
|
+
class Coverage < CoverageResource
|
3
|
+
def self.get_uri
|
4
|
+
return '/coverage/all.json'
|
6
5
|
end
|
7
6
|
|
8
|
-
def self.
|
9
|
-
|
10
|
-
Util.convert_to_eligible_object(response, api_key)
|
7
|
+
def self.post_uri
|
8
|
+
return '/coverage/all/batch.json'
|
11
9
|
end
|
12
10
|
|
13
|
-
def self.
|
14
|
-
|
15
|
-
Util.convert_to_eligible_object(response, api_key)
|
11
|
+
def self.cost_estimate(params, api_key = nil)
|
12
|
+
send_request(:get, '/coverage/cost_estimates.json', api_key, params)
|
16
13
|
end
|
17
14
|
|
18
15
|
def self.batch_medicare_post(params, api_key = nil)
|
19
|
-
|
20
|
-
Util.convert_to_eligible_object(response, api_key)
|
16
|
+
send_request(:post, '/medicare/coverage/batch.json', api_key, params)
|
21
17
|
end
|
22
18
|
end
|
23
19
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Eligible
|
2
|
+
class CoverageResource < APIResource
|
3
|
+
def self.get(params, api_key = nil)
|
4
|
+
send_request(:get, get_uri, api_key, params)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.batch_post(params, api_key = nil)
|
8
|
+
send_request(:post, post_uri, api_key, params)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.get_uri
|
12
|
+
fail NotImplementedError, "Please implement class method #{self}.get_uri"
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.post_uri
|
16
|
+
fail NotImplementedError, "Please implement class method #{self}.post_uri"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Eligible
|
2
|
+
class Customer < APIResource
|
3
|
+
def self.get(params, api_key = nil)
|
4
|
+
send_request(:get, "/customers/#{params[:customer_id]}.json", api_key, params, :customer_id)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.post(params, api_key = nil)
|
8
|
+
send_request(:post, '/customers.json', api_key, params)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.update(params, api_key = nil)
|
12
|
+
send_request(:put, "/customers/#{params[:customer_id]}.json", api_key, params, :customer_id)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.all(params, api_key = nil)
|
16
|
+
send_request(:get, '/customers.json', api_key, params)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/eligible/demographic.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
module Eligible
|
2
|
-
class Demographic <
|
3
|
-
def self.
|
4
|
-
|
5
|
-
Util.convert_to_eligible_object(response, api_key)
|
2
|
+
class Demographic < CoverageResource
|
3
|
+
def self.get_uri
|
4
|
+
return '/demographic/all.json'
|
6
5
|
end
|
7
6
|
|
8
|
-
def self.
|
9
|
-
|
10
|
-
Util.convert_to_eligible_object(response, api_key)
|
7
|
+
def self.post_uri
|
8
|
+
return '/demographic/all/batch.json'
|
11
9
|
end
|
12
10
|
end
|
13
11
|
end
|
@@ -4,7 +4,7 @@ module Eligible
|
|
4
4
|
|
5
5
|
attr_accessor :api_key
|
6
6
|
attr_accessor :eligible_id
|
7
|
-
|
7
|
+
|
8
8
|
@@permanent_attributes = Set.new([:api_key, :error, :balance, :address, :dob])
|
9
9
|
|
10
10
|
# The default :id method is deprecated and isn't useful to us
|
@@ -26,7 +26,6 @@ module Eligible
|
|
26
26
|
obj
|
27
27
|
end
|
28
28
|
|
29
|
-
# rubocop:disable Metrics/AbcSize
|
30
29
|
def refresh_from(values, api_key, partial = false)
|
31
30
|
@api_key = api_key
|
32
31
|
|
data/lib/eligible/enrollment.rb
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
module Eligible
|
2
2
|
class Enrollment < APIResource
|
3
3
|
def self.get(params, api_key = nil)
|
4
|
-
|
5
|
-
|
4
|
+
send_request(:get, "/enrollment_npis/#{params[:enrollment_npi_id]}.json", api_key, params, :enrollment_npi_id)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.list(params, api_key = nil)
|
8
|
+
send_request(:get, '/enrollment_npis.json', api_key, params)
|
6
9
|
end
|
7
10
|
|
8
11
|
def self.post(params, api_key = nil)
|
9
|
-
|
10
|
-
Util.convert_to_eligible_object(response, api_key)
|
12
|
+
send_request(:post, '/enrollment_npis.json', api_key, params)
|
11
13
|
end
|
12
14
|
|
13
15
|
def self.update(params, api_key = nil)
|
14
|
-
|
15
|
-
Util.convert_to_eligible_object(response, api_key)
|
16
|
+
send_request(:put, "/enrollment_npis/#{params[:enrollment_npi_id]}.json", api_key, params, :enrollment_npi_id)
|
16
17
|
end
|
17
18
|
|
18
19
|
def enrollment_npis
|
data/lib/eligible/medicare.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
module Eligible
|
2
|
-
class Medicare <
|
3
|
-
def self.
|
4
|
-
|
5
|
-
Util.convert_to_eligible_object(response, api_key)
|
2
|
+
class Medicare < CoverageResource
|
3
|
+
def self.get_uri
|
4
|
+
return '/medicare/coverage.json'
|
6
5
|
end
|
7
6
|
|
8
|
-
def self.
|
9
|
-
|
10
|
-
Util.convert_to_eligible_object(response, api_key)
|
7
|
+
def self.post_uri
|
8
|
+
return '/medicare/coverage/batch.json'
|
11
9
|
end
|
12
10
|
end
|
13
11
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Eligible
|
2
|
+
class OriginalSignaturePdf < APIResource
|
3
|
+
def self.get(params, api_key = nil)
|
4
|
+
send_request(:get, "/enrollment_npis/#{params[:enrollment_npi_id]}/original_signature_pdf", api_key, params, :enrollment_npi_id)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.post(params, api_key = nil)
|
8
|
+
send_request(:post, "/enrollment_npis/#{params[:enrollment_npi_id]}/original_signature_pdf", api_key, params, :enrollment_npi_id)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.update(params, api_key = nil)
|
12
|
+
send_request(:put, "/enrollment_npis/#{params[:enrollment_npi_id]}/original_signature_pdf", api_key, params, :enrollment_npi_id)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.delete(params, api_key = nil)
|
16
|
+
send_request(:delete, "/enrollment_npis/#{params[:enrollment_npi_id]}/original_signature_pdf", api_key, params, :enrollment_npi_id)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.download(params, api_key = nil)
|
20
|
+
require_param(params[:enrollment_npi_id], 'Enrollment Npi id')
|
21
|
+
params[:format] = 'x12'
|
22
|
+
response = Eligible.request(:get, "/enrollment_npis/#{params[:enrollment_npi_id]}/original_signature_pdf/download", api_key, params)[0]
|
23
|
+
filename = params[:filename] || '/tmp/original_signature_pdf.pdf'
|
24
|
+
file = File.new(filename, 'w')
|
25
|
+
file.write response
|
26
|
+
file.close
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Eligible
|
2
|
+
class Payer < APIResource
|
3
|
+
def self.list(params, api_key = nil)
|
4
|
+
send_request(:get, '/payers.json', api_key, params)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.get(params, api_key = nil)
|
8
|
+
send_request(:get, "/payers/#{params[:payer_id]}.json", api_key, params, :payer_id)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.search_options(params, api_key = nil)
|
12
|
+
url = params.key?(:payer_id) ? "/payers/#{params[:payer_id]}/search_options" : '/payers/search_options'
|
13
|
+
send_request(:get, url, api_key, params)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/eligible/payment.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
module Eligible
|
2
2
|
class Payment < APIResource
|
3
3
|
def self.get(params, api_key = nil)
|
4
|
-
|
5
|
-
Util.convert_to_eligible_object(response, api_key)
|
4
|
+
send_request(:get, '/payment/status.json', api_key, params)
|
6
5
|
end
|
7
6
|
end
|
8
7
|
end
|
data/lib/eligible/ticket.rb
CHANGED
@@ -1,33 +1,27 @@
|
|
1
1
|
module Eligible
|
2
2
|
class Ticket < APIResource
|
3
3
|
def self.create(params, api_key = nil)
|
4
|
-
|
5
|
-
Util.convert_to_eligible_object(response, api_key)
|
4
|
+
send_request(:post, '/tickets', api_key, params)
|
6
5
|
end
|
7
6
|
|
8
7
|
def self.comments(params, api_key = nil)
|
9
|
-
|
10
|
-
Util.convert_to_eligible_object(response, api_key)
|
8
|
+
send_request(:post, "/tickets/#{params[:id]}/comments", api_key, params, :id)
|
11
9
|
end
|
12
10
|
|
13
|
-
def self.all
|
14
|
-
|
15
|
-
Util.convert_to_eligible_object(response, api_key)
|
11
|
+
def self.all(params, api_key = nil)
|
12
|
+
send_request(:get, '/tickets', api_key, params)
|
16
13
|
end
|
17
14
|
|
18
15
|
def self.get(params, api_key = nil)
|
19
|
-
|
20
|
-
Util.convert_to_eligible_object(response, api_key)
|
16
|
+
send_request(:get, "/tickets/#{params[:id]}", api_key, params, :id)
|
21
17
|
end
|
22
18
|
|
23
19
|
def self.delete(params, api_key = nil)
|
24
|
-
|
25
|
-
Util.convert_to_eligible_object(response, api_key)
|
20
|
+
send_request(:delete, "/tickets/#{params[:id]}", api_key, params, :id)
|
26
21
|
end
|
27
22
|
|
28
23
|
def self.update(params, api_key = nil)
|
29
|
-
|
30
|
-
Util.convert_to_eligible_object(response, api_key)
|
24
|
+
send_request(:put, "/tickets/#{params[:id]}", api_key, params, :id)
|
31
25
|
end
|
32
26
|
end
|
33
27
|
end
|