eligible 2.3 → 2.4.1

Sign up to get free protection for your applications and to get access to all the features.
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