eligible 2.3 → 2.4.1

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.
data/lib/eligible/json.rb CHANGED
@@ -1,21 +1,11 @@
1
1
  module Eligible
2
2
  module JSON
3
- if MultiJson.respond_to?(:dump)
4
- def self.dump(*args)
5
- MultiJson.dump(*args)
6
- end
7
-
8
- def self.load(*args)
9
- MultiJson.load(*args)
10
- end
11
- else
12
- def self.dump(*args)
13
- MultiJson.encode(*args)
14
- end
3
+ def self.dump(*args)
4
+ MultiJson.dump(*args)
5
+ end
15
6
 
16
- def self.load(*args)
17
- MultiJson.decode(*args)
18
- end
7
+ def self.load(*args)
8
+ MultiJson.load(*args)
19
9
  end
20
10
  end
21
11
  end
@@ -0,0 +1,19 @@
1
+ module Eligible
2
+ class Medicare < APIResource
3
+
4
+ class << self
5
+
6
+ def get(params, api_key=nil)
7
+ response, api_key = Eligible.request(:get, '/medicare/coverage.json', api_key, params)
8
+ Util.convert_to_eligible_object(response, api_key)
9
+ end
10
+
11
+ def batch_post(params, api_key=nil)
12
+ response, api_key = Eligible.request(:post, '/medicare/coverage/batch.json', api_key, params)
13
+ Util.convert_to_eligible_object(response, api_key)
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
@@ -1,16 +1,19 @@
1
1
  module Eligible
2
2
  class Payment < APIResource
3
3
 
4
- def self.get(params, api_key=nil)
5
- response, api_key = Eligible.request(:get, "/payment/status/#{params[:reference_id]}.json", api_key, params)
6
- Util.convert_to_eligible_object(response, api_key)
7
- end
4
+ class << self
5
+
6
+ def get(params, api_key=nil)
7
+ response, api_key = Eligible.request(:get, "/payment/status/#{params[:reference_id]}.json", api_key, params)
8
+ Util.convert_to_eligible_object(response, api_key)
9
+ end
10
+
11
+ def all(api_key=nil)
12
+ response, api_key = Eligible.request(:get, '/payment/status.json', api_key, {})
13
+ Util.convert_to_eligible_object(response, api_key)
14
+ end
8
15
 
9
- def self.all(api_key=nil)
10
- response, api_key = Eligible.request(:get, "/payment/status.json", api_key, {})
11
- Util.convert_to_eligible_object(response, api_key)
12
16
  end
13
17
 
14
18
  end
15
-
16
19
  end
@@ -0,0 +1,40 @@
1
+ module Eligible
2
+ class Ticket < APIResource
3
+
4
+ class << self
5
+
6
+ def create(params, api_key=nil)
7
+ response, api_key = Eligible.request(:post, '/tickets', api_key, params)
8
+ Util.convert_to_eligible_object(response, api_key)
9
+ end
10
+
11
+ def comments(params, api_key=nil)
12
+ response, api_key = Eligible.request(:post, "/tickets/#{params[:id]}/comments", api_key, params)
13
+ Util.convert_to_eligible_object(response, api_key)
14
+ end
15
+
16
+ def all
17
+ response, api_key = Eligible.request(:get, '/tickets', api_key)
18
+ Util.convert_to_eligible_object(response, api_key)
19
+ end
20
+
21
+ def get(params, api_key=nil)
22
+ response, api_key = Eligible.request(:get, "/tickets/#{params[:id]}", api_key, params)
23
+ Util.convert_to_eligible_object(response, api_key)
24
+ end
25
+
26
+ def delete(params, api_key=nil)
27
+ response, api_key = Eligible.request(:delete, "/tickets/#{params[:id]}", api_key, params)
28
+ Util.convert_to_eligible_object(response, api_key)
29
+ end
30
+
31
+ def update(params, api_key=nil)
32
+ response, api_key = Eligible.request(:put, "/tickets/#{params[:id]}", api_key, params)
33
+ Util.convert_to_eligible_object(response, api_key)
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
40
+
data/lib/eligible/util.rb CHANGED
@@ -1,75 +1,47 @@
1
1
  module Eligible
2
2
  module Util
3
- def self.objects_to_ids(h)
4
- case h
5
- when APIResource
6
- h.id
7
- when Hash
8
- res = {}
9
- h.each { |k, v| res[k] = objects_to_ids(v) unless v.nil? }
10
- res
11
- when Array
12
- h.map { |v| objects_to_ids(v) }
13
- else
14
- h
15
- end
16
- end
17
-
18
3
  def self.convert_to_eligible_object(resp, api_key)
19
4
  types = {
20
- 'plan' => Plan,
21
- 'service' => Service,
22
- 'demographic' => Demographic,
23
- 'claim' => Claim,
24
- 'coverage' => Coverage,
25
- 'enrollment' => Enrollment
5
+ 'demographic' => Demographic,
6
+ 'claim' => Claim,
7
+ 'coverage' => Coverage,
8
+ 'enrollment' => Enrollment
26
9
  }
27
10
  case resp
28
- when Array
29
- if resp[0] && resp[0][:enrollment_npi]
30
- Enrollment.construct_from({ :enrollments => resp }, api_key)
11
+ when Array
12
+ if resp[0] && resp[0][:enrollment_npi]
13
+ Enrollment.construct_from({:enrollments => resp}, api_key)
14
+ else
15
+ resp.map { |i| convert_to_eligible_object(i, api_key) }
16
+ end
17
+ when Hash
18
+ if resp[:enrollment_request]
19
+ klass = Enrollment
20
+ elsif resp[:demographics]
21
+ klass = Coverage
22
+ elsif resp[:subscriber] && resp[:dependent]
23
+ klass = Demographic
24
+ end
25
+ klass ||= EligibleObject
26
+ klass.construct_from(resp, api_key)
31
27
  else
32
- resp.map { |i| convert_to_eligible_object(i, api_key) }
33
- end
34
- when Hash
35
- # Try converting to a known object class. If none available, fall back to generic APIResource
36
- if resp[:mapping_version] && klass_name = resp[:mapping_version].match(/^[^\/]*/)[0]
37
- klass = types[klass_name]
38
- elsif resp[:enrollment_request]
39
- klass = Enrollment
40
- elsif resp[:demographics]
41
- klass = Coverage
42
- end
43
- klass ||= EligibleObject
44
- klass.construct_from(resp, api_key)
45
- else
46
- resp
47
- end
48
- end
49
-
50
- def self.file_readable(file)
51
- begin
52
- File.open(file) { |f| }
53
- rescue
54
- false
55
- else
56
- true
28
+ resp
57
29
  end
58
30
  end
59
31
 
60
32
  def self.symbolize_names(object)
61
33
  case object
62
- when Hash
63
- new = {}
64
- object.each do |key, value|
65
- key = (key.to_sym rescue key) || key
66
- new[key] = symbolize_names(value)
67
- end
68
- new
69
- when Array
70
- object.map { |value| symbolize_names(value) }
71
- else
72
- object
34
+ when Hash
35
+ new = {}
36
+ object.each do |key, value|
37
+ key = (key.to_sym rescue key) || key
38
+ new[key] = symbolize_names(value)
39
+ end
40
+ new
41
+ when Array
42
+ object.map { |value| symbolize_names(value) }
43
+ else
44
+ object
73
45
  end
74
46
  end
75
47
 
@@ -1,3 +1,3 @@
1
1
  module Eligible
2
- VERSION = '2.3'
2
+ VERSION = '2.4.1'
3
3
  end
data/lib/eligible/x12.rb CHANGED
@@ -2,18 +2,9 @@ module Eligible
2
2
  class X12 < APIResource
3
3
 
4
4
  def self.post(params, api_key=nil)
5
- require 'net/http'
6
- require 'net/https'
7
- require 'uri'
8
- uri = URI.parse("https://gds.eligibleapi.com")
9
-
10
- post_args = "x12=#{params}&api_key=#{Eligible.api_key}&test=#{Eligible.test}"
11
- http = Net::HTTP.new(uri.host, uri.port)
12
- http.use_ssl = true
13
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
14
- path = "/v1.1/x12"
15
- response = http.post(path, post_args)
16
- Util.convert_to_eligible_object(response, Eligible.api_key)
5
+ response, api_key = Eligible.request(:post, '/x12', api_key, params)
6
+ Util.convert_to_eligible_object(response, api_key)
17
7
  end
8
+
18
9
  end
19
10
  end
@@ -13,22 +13,19 @@ class TestEligible < Test::Unit::TestCase
13
13
  end
14
14
  end
15
15
 
16
- context' "General API"' do
16
+ context '"General API"' do
17
17
  setup do
18
- Eligible.api_key = 'TEST'
19
- @mock = mock
20
- Eligible.mock_rest_client = @mock
18
+ Eligible.mock_rest_client = @mock = mock
21
19
  end
22
20
 
23
21
  teardown do
24
- Eligible.mock_rest_client = nil
25
- Eligible.api_key = nil
22
+ Eligible.mock_rest_client = Eligible.api_key = nil
26
23
  end
27
24
 
28
25
  should 'not specifying api credentials should raise an exception' do
29
26
  Eligible.api_key = nil
30
27
  assert_raises Eligible::AuthenticationError do
31
- Eligible::Plan.get({})
28
+ Eligible::Coverage.get({})
32
29
  end
33
30
  end
34
31
 
@@ -37,147 +34,11 @@ class TestEligible < Test::Unit::TestCase
37
34
  response = test_response(test_invalid_api_key_error, 401)
38
35
  assert_raises Eligible::AuthenticationError do
39
36
  @mock.expects(:get).once.raises(RestClient::ExceptionWithResponse.new(response, 401))
40
- Eligible::Plan.get({})
37
+ Eligible::Coverage.get({})
41
38
  end
42
39
  end
43
40
  end
44
41
 
45
- context 'Plan' do
46
- setup do
47
- Eligible.api_key = 'TEST'
48
- @mock = mock
49
- Eligible.mock_rest_client = @mock
50
- end
51
-
52
- teardown do
53
- Eligible.mock_rest_client = nil
54
- Eligible.api_key = nil
55
- end
56
-
57
- should 'return an error if no params are supplied' do
58
- params = {}
59
- response = test_response(test_plan_missing_params)
60
- @mock.expects(:get).returns(response)
61
- plan = Eligible::Plan.get(params)
62
- assert_not_nil plan.error
63
- end
64
-
65
- should 'return plan information if valid params are supplied' do
66
- params = {
67
- :payer_name => "Aetna",
68
- :payer_id => "000001",
69
- :provider_last_name => "Last",
70
- :provider_first_name => "First",
71
- :provider_npi => "1028384219",
72
- :member_id => "W120923801",
73
- :member_last_name => "Austen",
74
- :member_first_name => "Jane",
75
- :member_dob => "1955-12-14"
76
- }
77
- response = test_response(test_plan)
78
- @mock.expects(:get).returns(response)
79
- plan = Eligible::Plan.get(params)
80
- assert_nil plan.error
81
- assert_not_nil plan.all
82
- end
83
-
84
- should 'return the right subsets of the data when requested' do
85
- params = {
86
- :payer_name => "Aetna",
87
- :payer_id => "000001",
88
- :provider_last_name => "Last",
89
- :provider_first_name => "First",
90
- :provider_npi => "1028384219",
91
- :member_id => "W120923801",
92
- :member_last_name => "Austen",
93
- :member_first_name => "Jane",
94
- :member_dob => "1955-12-14"
95
- }
96
- response = test_response(test_plan)
97
- @mock.expects(:get).returns(response)
98
- plan = Eligible::Plan.get(params)
99
-
100
- assert_not_nil plan.all[:primary_insurance]
101
- assert_not_nil plan.status[:coverage_status]
102
- assert_nil plan.status[:deductible_in_network]
103
- assert_not_nil plan.deductible[:deductible_in_network]
104
- assert_nil plan.deductible[:balance]
105
- assert_not_nil plan.dates[:primary_insurance][:plan_begins]
106
- assert_nil plan.dates[:deductible_in_network]
107
- assert_not_nil plan.balance[:balance]
108
- assert_nil plan.balance[:deductible_in_network]
109
- assert_not_nil plan.stop_loss[:stop_loss_in_network]
110
- assert_nil plan.stop_loss[:deductible_in_network]
111
- end
112
- end
113
-
114
- context 'Service' do
115
- setup do
116
- Eligible.api_key = 'TEST'
117
- @mock = mock
118
- Eligible.mock_rest_client = @mock
119
- end
120
-
121
- teardown do
122
- Eligible.mock_rest_client = nil
123
- Eligible.api_key = nil
124
- end
125
-
126
- should 'return an error if no params are supplied' do
127
- params = {}
128
- response = test_response(test_service_missing_params)
129
- @mock.expects(:get).returns(response)
130
- service = Eligible::Service.get(params)
131
- assert_not_nil service.error
132
- end
133
-
134
- should 'return eligibility information if valid params are supplied' do
135
- params = {
136
- :payer_name => "Aetna",
137
- :payer_id => "000001",
138
- :provider_last_name => "Last",
139
- :provider_first_name => "First",
140
- :provider_npi => "1028384219",
141
- :member_id => "W120923801",
142
- :member_last_name => "Austen",
143
- :member_first_name => "Jane",
144
- :member_dob => "1955-12-14"
145
- }
146
- response = test_response(test_service)
147
- @mock.expects(:get).returns(response)
148
- service = Eligible::Service.get(params)
149
- assert_nil service.error
150
- assert_not_nil service.all
151
- end
152
-
153
- should 'return the right subsets of the data when requested' do
154
- params = {
155
- :payer_name => "Aetna",
156
- :payer_id => "000001",
157
- :provider_last_name => "Last",
158
- :provider_first_name => "First",
159
- :provider_npi => "1028384219",
160
- :member_id => "W120923801",
161
- :member_last_name => "Austen",
162
- :member_first_name => "Jane",
163
- :member_dob => "1955-12-14"
164
- }
165
- response = test_response(test_service)
166
- @mock.expects(:get).returns(response)
167
- service = Eligible::Service.get(params)
168
-
169
- assert_not_nil service.all[:service_begins]
170
- assert_not_nil service.visits[:visits_in_network]
171
- assert_nil service.visits[:copayment_in_network]
172
- assert_not_nil service.copayment[:copayment_in_network]
173
- assert_nil service.copayment[:visits_in_network]
174
- assert_not_nil service.coinsurance[:coinsurance_in_network]
175
- assert_nil service.coinsurance[:visits_in_network]
176
- assert_not_nil service.deductible[:deductible_in_network]
177
- assert_nil service.deductible[:visits_in_network]
178
- end
179
- end
180
-
181
42
  context 'Demographic' do
182
43
  setup do
183
44
  Eligible.api_key = 'TEST'
@@ -201,7 +62,7 @@ class TestEligible < Test::Unit::TestCase
201
62
  should 'return demographic information if valid params are supplied' do
202
63
  params = {
203
64
  :payer_name => "Aetna",
204
- :payer_id => "000001",
65
+ :payer_id => "000001",
205
66
  :provider_last_name => "Last",
206
67
  :provider_first_name => "First",
207
68
  :provider_npi => "1028384219",
@@ -214,34 +75,7 @@ class TestEligible < Test::Unit::TestCase
214
75
  @mock.expects(:get).returns(response)
215
76
  demographic = Eligible::Demographic.get(params)
216
77
  assert_nil demographic.error
217
- assert_not_nil demographic.all
218
- end
219
-
220
- should 'return the right subsets of the data when requested' do
221
- params = {
222
- :payer_name => "Aetna",
223
- :payer_id => "000001",
224
- :provider_last_name => "Last",
225
- :provider_first_name => "First",
226
- :provider_npi => "1028384219",
227
- :member_id => "W120923801",
228
- :member_last_name => "Austen",
229
- :member_first_name => "Jane",
230
- :member_dob => "1955-12-14"
231
- }
232
- response = test_response(test_demographic)
233
- @mock.expects(:get).returns(response)
234
- demographic = Eligible::Demographic.get(params)
235
-
236
- assert_not_nil demographic.all[:timestamp]
237
- assert_not_nil demographic.zip[:zip]
238
- assert_nil demographic.zip[:group_id]
239
- assert_not_nil demographic.employer[:group_id]
240
- assert_nil demographic.employer[:zip]
241
- assert_not_nil demographic.address[:address]
242
- assert_nil demographic.address[:group_id]
243
- assert_not_nil demographic.dob[:dob]
244
- assert_nil demographic.dob[:address]
78
+ assert_not_nil demographic.to_hash
245
79
  end
246
80
  end
247
81
 
@@ -266,7 +100,7 @@ class TestEligible < Test::Unit::TestCase
266
100
  end
267
101
 
268
102
  should 'post a claim' do
269
- params = {"api_key"=>"asdfsdfsd21132ddsfsdfd", "billing_provider"=>{"taxonomy_code"=>"332B00000X", "practice_name"=>"Jane Austen Practice", "npi"=>"1922222222", "address"=>{"street_line_1"=>"419 Fulton", "street_line_2"=>"", "city"=>"San Francisco", "state"=>"CA", "zip"=>"94102"}, "tin"=>"43291023", "insurance_provider_id"=>"129873210"}, "pay_to_provider"=>{"address"=>{"street_line_1"=>"", "street_line_2"=>"", "city"=>"", "state"=>"", "zip"=>""}}, "subscriber"=>{"last_name"=>"Franklin", "first_name"=>"Benjamin", "member_id"=>"W2832032427", "group_id"=>"455716", "group_name"=>"none", "dob"=>"1734-05-04", "gender"=>"M", "address"=>{"street_line_1"=>"435 Sugar Lane", "street_line_2"=>"", "city"=>"Sweet", "state"=>"OH", "zip"=>"436233127"}}, "payer"=>{"name"=>"AETNA", "id"=>"60054", "address"=>{"street_line_1"=>"Po Box 981106", "street_line_2"=>"", "city"=>"El Paso", "state"=>"TX", "zip"=>"799981222"}}, "dependent"=>{"relationship"=>"", "last_name"=>"", "first_name"=>"", "dob"=>"", "gender"=>"", "address"=>{"street_line_1"=>"", "street_line_2"=>"", "city"=>"", "state"=>"", "zip"=>""}}, "claim"=>{"total_charge_amount"=>"275", "claim_frequency"=>"1", "patient_signature_on_file"=>"Y", "provider_plan_participation"=>"A", "direct_payment_authorized"=>"Y", "release_of_information"=>"I", "service_lines"=>[{"line_number"=>"1", "service_start"=>"2013-03-07", "service_end"=>"2013-03-07", "authorization_code"=>"", "place_of_service"=>"11", "charge_amount"=>"275", "product_service"=>"99213", "qualifier"=>"HC", "description"=>"", "modifier_1"=>"", "diagnosis_1"=>"32723"}]}}
103
+ params = { "api_key" => "asdfsdfsd21132ddsfsdfd", "billing_provider" => { "taxonomy_code" => "332B00000X", "practice_name" => "Jane Austen Practice", "npi" => "1922222222", "address" => { "street_line_1" => "419 Fulton", "street_line_2" => "", "city" => "San Francisco", "state" => "CA", "zip" => "94102" }, "tin" => "43291023", "insurance_provider_id" => "129873210" }, "pay_to_provider" => { "address" => { "street_line_1" => "", "street_line_2" => "", "city" => "", "state" => "", "zip" => "" } }, "subscriber" => { "last_name" => "Franklin", "first_name" => "Benjamin", "member_id" => "W2832032427", "group_id" => "455716", "group_name" => "none", "dob" => "1734-05-04", "gender" => "M", "address" => { "street_line_1" => "435 Sugar Lane", "street_line_2" => "", "city" => "Sweet", "state" => "OH", "zip" => "436233127" } }, "payer" => { "name" => "AETNA", "id" => "60054", "address" => { "street_line_1" => "Po Box 981106", "street_line_2" => "", "city" => "El Paso", "state" => "TX", "zip" => "799981222" } }, "dependent" => { "relationship" => "", "last_name" => "", "first_name" => "", "dob" => "", "gender" => "", "address" => { "street_line_1" => "", "street_line_2" => "", "city" => "", "state" => "", "zip" => "" } }, "claim" => { "total_charge_amount" => "275", "claim_frequency" => "1", "patient_signature_on_file" => "Y", "provider_plan_participation" => "A", "direct_payment_authorized" => "Y", "release_of_information" => "I", "service_lines" => [{ "line_number" => "1", "service_start" => "2013-03-07", "service_end" => "2013-03-07", "authorization_code" => "", "place_of_service" => "11", "charge_amount" => "275", "product_service" => "99213", "qualifier" => "HC", "description" => "", "modifier_1" => "", "diagnosis_1" => "32723" }] } }
270
104
  response = test_response(test_post_claim)
271
105
  end
272
106
  end
@@ -294,7 +128,7 @@ class TestEligible < Test::Unit::TestCase
294
128
  should 'return coverage information if valid params are supplied' do
295
129
  params = {
296
130
  :payer_name => "Aetna",
297
- :payer_id => "000001",
131
+ :payer_id => "000001",
298
132
  :provider_last_name => "Last",
299
133
  :provider_first_name => "First",
300
134
  :provider_npi => "1028384219",
@@ -307,7 +141,7 @@ class TestEligible < Test::Unit::TestCase
307
141
  @mock.expects(:get).returns(response)
308
142
  coverage = Eligible::Coverage.get(params)
309
143
 
310
- assert_not_nil coverage.all[:eligible_id]
144
+ assert_not_nil coverage.to_hash[:eligible_id]
311
145
  end
312
146
  end
313
147
 
@@ -324,13 +158,13 @@ class TestEligible < Test::Unit::TestCase
324
158
  end
325
159
 
326
160
  should 'post an enrollment request' do
327
- params = {"service_provider_list"=>[{"facility_name"=>"Quality", "provider_name"=>"Jane Austen", "tax_id"=>"12345678", "address"=>"125 Snow Shoe Road", "city"=>"Sacramento", "state"=>"CA", "zip"=>"94107", "ptan"=>"54321", "npi"=>"987654321"}, {"facility_name"=>"Aetna", "provider_name"=>"Jack Austen", "tax_id"=>"12345678", "address"=>"985 Snow Shoe Road", "city"=>"Menlo Park", "state"=>"CA", "zip"=>"94107", "ptan"=>"54321", "npi"=>"987654321"}], "payer_ids"=>["00431", "00282"]}
161
+ params = { "service_provider_list" => [{ "facility_name" => "Quality", "provider_name" => "Jane Austen", "tax_id" => "12345678", "address" => "125 Snow Shoe Road", "city" => "Sacramento", "state" => "CA", "zip" => "94107", "ptan" => "54321", "npi" => "987654321" }, { "facility_name" => "Aetna", "provider_name" => "Jack Austen", "tax_id" => "12345678", "address" => "985 Snow Shoe Road", "city" => "Menlo Park", "state" => "CA", "zip" => "94107", "ptan" => "54321", "npi" => "987654321" }], "payer_ids" => ["00431", "00282"] }
328
162
  response = test_response(test_post_enrollment)
329
163
 
330
164
  @mock.expects(:post).returns(response)
331
165
  enrollment = Eligible::Enrollment.post(params)
332
166
 
333
- assert_not_nil enrollment.all[:enrollment_request]
167
+ assert_not_nil enrollment.to_hash[:enrollment_request]
334
168
  end
335
169
 
336
170
  should 'get the status of an enrollment request' do
@@ -338,7 +172,7 @@ class TestEligible < Test::Unit::TestCase
338
172
  response = test_response(test_get_enrollment)
339
173
  @mock.expects(:get).returns(response)
340
174
  enrollment = Eligible::Enrollment.get(params)
341
- assert_not_nil enrollment.all[:enrollments]
175
+ assert_not_nil enrollment.to_hash[:enrollments]
342
176
  end
343
177
  end
344
178
  end