pokitdok-ruby 0.7.1 → 0.7.2
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/Gemfile +1 -0
- data/Gemfile.lock +69 -51
- data/LICENSE.txt +1 -1
- data/VERSION +1 -1
- data/lib/pokitdok.rb +333 -97
- data/pokitdok-ruby.gemspec +9 -4
- data/spec/pokitdok_spec.rb +145 -37
- data/vcr_cassettes/activities.yml +30 -230
- data/vcr_cassettes/auth.yml +7 -7
- data/vcr_cassettes/authorizations.yml +11 -11
- data/vcr_cassettes/cash_prices.yml +13 -13
- data/vcr_cassettes/claims.yml +35 -34
- data/vcr_cassettes/claims_status.yml +12 -12
- data/vcr_cassettes/eligibility.yml +93 -70
- data/vcr_cassettes/enrollment.yml +40 -40
- data/vcr_cassettes/files.yml +57 -2
- data/vcr_cassettes/insurance_prices.yml +13 -13
- data/vcr_cassettes/payers.yml +463 -632
- data/vcr_cassettes/plans.yml +10 -10
- data/vcr_cassettes/plans_no_args.yml +10 -10
- data/vcr_cassettes/providers.yml +9 -9
- data/vcr_cassettes/referrals.yml +12 -12
- data/vcr_cassettes/scheduling.yml +182 -0
- data/vcr_cassettes/scheduling_scoped.yml +223 -0
- data/vcr_cassettes/trading_partners_get.yml +11 -12
- data/vcr_cassettes/trading_partners_index.yml +351 -420
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8d295a4e720cbc16c0760e1bd39f0458d2dbff0
|
4
|
+
data.tar.gz: 35fd84a68b5c6dd2e9e17d0e3afc3c02668679ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d167b436927487759778b7a40f43595ea29f06386389ad9f721a76e8f50bdff1cc53f99e6b663c844d2c916e9d76443af5fa02144fc28778590c60e797499133
|
7
|
+
data.tar.gz: 07387fa5e0f1959879ec98219c709b49073808dc7483eacfd5fe576aa616aa26e20fee638c14a90562dcfee2c5bb72df9bfa86c3c737aba5c1b8a9979ed86f7e
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
addressable (2.3.
|
5
|
-
ansi (1.
|
4
|
+
addressable (2.3.8)
|
5
|
+
ansi (1.5.0)
|
6
6
|
ast (2.0.0)
|
7
7
|
astrolabe (1.3.0)
|
8
8
|
parser (>= 2.2.0.pre.3, < 3.0)
|
@@ -10,45 +10,53 @@ GEM
|
|
10
10
|
celluloid (0.16.0)
|
11
11
|
timers (~> 4.0.0)
|
12
12
|
coderay (1.1.0)
|
13
|
-
coveralls (0.
|
14
|
-
|
15
|
-
rest-client
|
16
|
-
simplecov (
|
17
|
-
term-ansicolor
|
18
|
-
thor
|
13
|
+
coveralls (0.8.1)
|
14
|
+
json (~> 1.8)
|
15
|
+
rest-client (>= 1.6.8, < 2)
|
16
|
+
simplecov (~> 0.10.0)
|
17
|
+
term-ansicolor (~> 1.3)
|
18
|
+
thor (~> 0.19.1)
|
19
19
|
crack (0.4.2)
|
20
20
|
safe_yaml (~> 1.0.0)
|
21
21
|
descendants_tracker (0.0.4)
|
22
22
|
thread_safe (~> 0.3, >= 0.3.1)
|
23
23
|
docile (1.1.5)
|
24
|
-
|
24
|
+
domain_name (0.5.24)
|
25
|
+
unf (>= 0.0.5, < 1.0.0)
|
26
|
+
faraday (0.9.1)
|
25
27
|
multipart-post (>= 1.2, < 3)
|
26
|
-
ffi (1.9.
|
28
|
+
ffi (1.9.8)
|
27
29
|
formatador (0.2.5)
|
28
|
-
git (1.2.
|
29
|
-
github_api (0.12.
|
30
|
+
git (1.2.9.1)
|
31
|
+
github_api (0.12.3)
|
30
32
|
addressable (~> 2.3)
|
31
33
|
descendants_tracker (~> 0.0.4)
|
32
34
|
faraday (~> 0.8, < 0.10)
|
33
|
-
hashie (>= 3.
|
35
|
+
hashie (>= 3.3)
|
34
36
|
multi_json (>= 1.7.5, < 2.0)
|
35
37
|
nokogiri (~> 1.6.3)
|
36
38
|
oauth2
|
37
|
-
guard (2.
|
39
|
+
guard (2.12.5)
|
38
40
|
formatador (>= 0.2.4)
|
39
41
|
listen (~> 2.7)
|
40
42
|
lumberjack (~> 1.0)
|
43
|
+
nenv (~> 0.1)
|
44
|
+
notiffany (~> 0.0)
|
41
45
|
pry (>= 0.9.12)
|
46
|
+
shellany (~> 0.0)
|
42
47
|
thor (>= 0.18.1)
|
43
|
-
guard-
|
44
|
-
|
48
|
+
guard-compat (1.2.1)
|
49
|
+
guard-minitest (2.4.4)
|
50
|
+
guard-compat (~> 1.2)
|
45
51
|
minitest (>= 3.0)
|
46
|
-
guard-rubocop (1.
|
52
|
+
guard-rubocop (1.2.0)
|
47
53
|
guard (~> 2.0)
|
48
54
|
rubocop (~> 0.20)
|
49
|
-
hashie (3.
|
50
|
-
highline (1.
|
55
|
+
hashie (3.4.1)
|
56
|
+
highline (1.7.2)
|
51
57
|
hitimes (1.2.2)
|
58
|
+
http-cookie (1.0.2)
|
59
|
+
domain_name (~> 0.5)
|
52
60
|
jeweler (2.0.1)
|
53
61
|
builder
|
54
62
|
bundler (>= 1.0)
|
@@ -58,80 +66,89 @@ GEM
|
|
58
66
|
nokogiri (>= 1.5.10)
|
59
67
|
rake
|
60
68
|
rdoc
|
61
|
-
json (1.8.
|
62
|
-
jwt (1.
|
63
|
-
listen (2.
|
64
|
-
celluloid (
|
69
|
+
json (1.8.2)
|
70
|
+
jwt (1.5.0)
|
71
|
+
listen (2.10.0)
|
72
|
+
celluloid (~> 0.16.0)
|
65
73
|
rb-fsevent (>= 0.9.3)
|
66
74
|
rb-inotify (>= 0.9)
|
67
75
|
lumberjack (1.0.9)
|
68
76
|
metaclass (0.0.4)
|
69
77
|
method_source (0.8.2)
|
70
|
-
mime-types (2.
|
71
|
-
mini_portile (0.6.
|
72
|
-
minitest (5.
|
73
|
-
minitest-reporters (1.0.
|
78
|
+
mime-types (2.5)
|
79
|
+
mini_portile (0.6.2)
|
80
|
+
minitest (5.6.1)
|
81
|
+
minitest-reporters (1.0.16)
|
74
82
|
ansi
|
75
83
|
builder
|
76
84
|
minitest (>= 5.0)
|
77
85
|
ruby-progressbar
|
78
86
|
mocha (1.1.0)
|
79
87
|
metaclass (~> 0.0.1)
|
80
|
-
multi_json (1.
|
88
|
+
multi_json (1.11.0)
|
81
89
|
multi_xml (0.5.5)
|
82
90
|
multipart-post (2.0.0)
|
83
|
-
|
84
|
-
|
85
|
-
|
91
|
+
nenv (0.2.0)
|
92
|
+
netrc (0.10.3)
|
93
|
+
nokogiri (1.6.6.2)
|
94
|
+
mini_portile (~> 0.6.0)
|
95
|
+
notiffany (0.0.6)
|
96
|
+
nenv (~> 0.1)
|
97
|
+
shellany (~> 0.0)
|
86
98
|
oauth2 (0.9.4)
|
87
99
|
faraday (>= 0.8, < 0.10)
|
88
100
|
jwt (~> 1.0)
|
89
101
|
multi_json (~> 1.3)
|
90
102
|
multi_xml (~> 0.5)
|
91
103
|
rack (~> 1.2)
|
92
|
-
parser (2.2.
|
104
|
+
parser (2.2.2.3)
|
93
105
|
ast (>= 1.1, < 3.0)
|
94
|
-
|
95
|
-
powerpack (0.0.9)
|
106
|
+
powerpack (0.1.1)
|
96
107
|
pry (0.10.1)
|
97
108
|
coderay (~> 1.1.0)
|
98
109
|
method_source (~> 0.8.1)
|
99
110
|
slop (~> 3.4)
|
100
|
-
rack (1.
|
111
|
+
rack (1.6.1)
|
101
112
|
rainbow (2.0.0)
|
102
|
-
rake (10.
|
103
|
-
rb-fsevent (0.9.
|
113
|
+
rake (10.4.2)
|
114
|
+
rb-fsevent (0.9.5)
|
104
115
|
rb-inotify (0.9.5)
|
105
116
|
ffi (>= 0.5.0)
|
106
|
-
rdoc (4.
|
117
|
+
rdoc (4.2.0)
|
107
118
|
json (~> 1.4)
|
108
|
-
rest-client (1.
|
119
|
+
rest-client (1.8.0)
|
120
|
+
http-cookie (>= 1.0.2, < 2.0)
|
109
121
|
mime-types (>= 1.16, < 3.0)
|
110
122
|
netrc (~> 0.7)
|
111
|
-
rubocop (0.
|
123
|
+
rubocop (0.31.0)
|
112
124
|
astrolabe (~> 1.3)
|
113
|
-
parser (>= 2.2.
|
114
|
-
powerpack (~> 0.
|
125
|
+
parser (>= 2.2.2.1, < 3.0)
|
126
|
+
powerpack (~> 0.1)
|
115
127
|
rainbow (>= 1.99.1, < 3.0)
|
116
128
|
ruby-progressbar (~> 1.4)
|
117
|
-
ruby-progressbar (1.
|
129
|
+
ruby-progressbar (1.7.5)
|
118
130
|
safe_yaml (1.0.4)
|
119
|
-
|
131
|
+
shellany (0.0.1)
|
132
|
+
simplecov (0.10.0)
|
120
133
|
docile (~> 1.1.0)
|
121
|
-
|
122
|
-
simplecov-html (~> 0.
|
123
|
-
simplecov-html (0.
|
134
|
+
json (~> 1.8)
|
135
|
+
simplecov-html (~> 0.10.0)
|
136
|
+
simplecov-html (0.10.0)
|
124
137
|
slop (3.6.0)
|
125
138
|
term-ansicolor (1.3.0)
|
126
139
|
tins (~> 1.0)
|
127
|
-
terminal-notifier
|
140
|
+
terminal-notifier (1.6.3)
|
141
|
+
terminal-notifier-guard (1.6.4)
|
128
142
|
thor (0.19.1)
|
129
|
-
thread_safe (0.3.
|
143
|
+
thread_safe (0.3.5)
|
130
144
|
timers (4.0.1)
|
131
145
|
hitimes
|
132
|
-
tins (1.
|
146
|
+
tins (1.5.1)
|
147
|
+
unf (0.1.4)
|
148
|
+
unf_ext
|
149
|
+
unf_ext (0.0.7.1)
|
133
150
|
vcr (2.9.3)
|
134
|
-
webmock (1.
|
151
|
+
webmock (1.21.0)
|
135
152
|
addressable (>= 2.3.6)
|
136
153
|
crack (>= 0.3.2)
|
137
154
|
|
@@ -154,6 +171,7 @@ DEPENDENCIES
|
|
154
171
|
rdoc (~> 4.1)
|
155
172
|
rubocop (~> 0.20)
|
156
173
|
simplecov (~> 0.8)
|
174
|
+
terminal-notifier
|
157
175
|
terminal-notifier-guard (~> 1.5)
|
158
176
|
vcr (~> 2.9)
|
159
177
|
webmock (~> 1.17)
|
data/LICENSE.txt
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.2
|
data/lib/pokitdok.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2014, All Rights Reserved, PokitDok, Inc.
|
3
|
+
# Copyright (C) 2014-2015, All Rights Reserved, PokitDok, Inc.
|
4
4
|
# https://www.pokitdok.com
|
5
5
|
#
|
6
6
|
# Please see the LICENSE.txt file for more information.
|
@@ -20,7 +20,6 @@ module PokitDok
|
|
20
20
|
POKITDOK_URL_BASE = 'https://platform.pokitdok.com' # :nodoc:
|
21
21
|
|
22
22
|
attr_reader :client # :nodoc:
|
23
|
-
attr_reader :token # :nodoc:
|
24
23
|
attr_reader :api_url
|
25
24
|
attr_reader :version
|
26
25
|
|
@@ -37,123 +36,109 @@ module PokitDok
|
|
37
36
|
@version = version
|
38
37
|
|
39
38
|
@api_url = "#{url_base}/api/#{version}"
|
40
|
-
|
41
39
|
@client = OAuth2::Client.new(@client_id, @client_secret,
|
42
40
|
site: @api_url, token_url: '/oauth2/token')
|
43
|
-
refresh_token
|
44
|
-
end
|
45
41
|
|
46
|
-
def url_base
|
47
|
-
POKITDOK_URL_BASE
|
48
|
-
end
|
49
42
|
|
50
|
-
|
51
|
-
|
43
|
+
@scopes = {}
|
44
|
+
@scopes['default'] = { scope: refresh_token }
|
45
|
+
scope 'default'
|
52
46
|
end
|
53
47
|
|
54
|
-
#
|
55
|
-
def
|
56
|
-
|
48
|
+
# Accessor for the PokitDok Platform URL, overridable for testing.
|
49
|
+
def url_base
|
50
|
+
POKITDOK_URL_BASE
|
57
51
|
end
|
58
52
|
|
59
|
-
#
|
53
|
+
# Adds an authorization code for a given OAuth2 scope.
|
54
|
+
#
|
55
|
+
# +name+ the scope name
|
56
|
+
# +code+ the authorization code
|
60
57
|
#
|
61
|
-
|
62
|
-
|
63
|
-
@token = client.client_credentials.get_token(
|
64
|
-
headers: { 'Authorization' => 'Basic' })
|
58
|
+
def scope_code(name, code)
|
59
|
+
@scopes[name] = { code: code }
|
65
60
|
end
|
66
61
|
|
67
|
-
# Invokes the
|
62
|
+
# Invokes the appointments endpoint, to query for open appointment slots
|
63
|
+
# (using pd_provider_uuid and location) or booked appointments (using
|
64
|
+
# patient_uuid).
|
65
|
+
#
|
66
|
+
# +params+ an optional Hash of parameters
|
67
|
+
#
|
68
68
|
def activities(params = {})
|
69
|
-
|
70
|
-
|
71
|
-
params: params)
|
72
|
-
JSON.parse(response.body)
|
69
|
+
scope 'default'
|
70
|
+
get('activities/', params)
|
73
71
|
end
|
74
72
|
|
75
|
-
# Invokes the authorizations endpoint
|
73
|
+
# Invokes the authorizations endpoint.
|
74
|
+
#
|
75
|
+
# +params+ an optional hash of parameters that will be sent in the POST body
|
76
|
+
#
|
76
77
|
def authorizations(params = {})
|
77
|
-
|
78
|
-
|
79
|
-
body: params.to_json) do |request|
|
80
|
-
request.headers['Content-Type'] = 'application/json'
|
81
|
-
end
|
82
|
-
JSON.parse(response.body)
|
78
|
+
scope 'default'
|
79
|
+
post('authorizations/', params)
|
83
80
|
end
|
84
81
|
|
85
|
-
# Invokes the cash prices endpoint
|
82
|
+
# Invokes the cash prices endpoint.
|
83
|
+
#
|
84
|
+
# +params+ an optional hash of parameters that will be sent in the POST body
|
85
|
+
#
|
86
86
|
def cash_prices(params = {})
|
87
|
-
|
88
|
-
|
89
|
-
params: params)
|
90
|
-
JSON.parse(response.body)
|
87
|
+
scope 'default'
|
88
|
+
get('prices/cash', params)
|
91
89
|
end
|
92
90
|
|
93
|
-
# Invokes the
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
params: params)
|
98
|
-
JSON.parse(response.body)
|
99
|
-
end
|
100
|
-
|
101
|
-
# Invokes the claims endpoint, with an optional Hash of parameters.
|
91
|
+
# Invokes the claims endpoint.
|
92
|
+
#
|
93
|
+
# +params+ an optional hash of parameters that will be sent in the POST body
|
94
|
+
#
|
102
95
|
def claims(params = {})
|
103
|
-
|
104
|
-
|
105
|
-
body: params.to_json) do |request|
|
106
|
-
request.headers['Content-Type'] = 'application/json'
|
107
|
-
end
|
108
|
-
JSON.parse(response.body)
|
96
|
+
scope 'default'
|
97
|
+
post('claims/', params)
|
109
98
|
end
|
110
99
|
|
111
|
-
# Invokes the claims status endpoint
|
100
|
+
# Invokes the claims status endpoint.
|
101
|
+
#
|
102
|
+
# +params+ an optional hash of parameters that will be sent in the POST body
|
103
|
+
#
|
112
104
|
def claims_status(params = {})
|
113
|
-
|
114
|
-
|
115
|
-
body: params.to_json) do |request|
|
116
|
-
request.headers['Content-Type'] = 'application/json'
|
117
|
-
end
|
118
|
-
JSON.parse(response.body)
|
105
|
+
scope 'default'
|
106
|
+
post('claims/status', params)
|
119
107
|
end
|
120
108
|
|
121
|
-
|
122
|
-
#
|
109
|
+
# Invokes the eligibility endpoint.
|
110
|
+
#
|
111
|
+
# +params+ an optional hash of parameters that will be sent in the POST body
|
112
|
+
#
|
123
113
|
def eligibility(params = {})
|
124
|
-
|
125
|
-
|
126
|
-
body: params.to_json) do |request|
|
127
|
-
request.headers['Content-Type'] = 'application/json'
|
128
|
-
end
|
129
|
-
JSON.parse(response.body)
|
114
|
+
scope 'default'
|
115
|
+
post('eligibility/', params)
|
130
116
|
end
|
131
117
|
|
132
|
-
# Invokes the enrollment endpoint
|
118
|
+
# Invokes the enrollment endpoint.
|
119
|
+
#
|
120
|
+
# +params+ an optional hash of parameters that will be sent in the POST body
|
121
|
+
#
|
133
122
|
def enrollment(params = {})
|
134
|
-
|
135
|
-
|
136
|
-
body: params.to_json) do |request|
|
137
|
-
request.headers['Content-Type'] = 'application/json'
|
138
|
-
end
|
139
|
-
JSON.parse(response.body)
|
123
|
+
scope 'default'
|
124
|
+
post('enrollment/', params)
|
140
125
|
end
|
141
126
|
|
142
127
|
# Uploads an EDI file to the files endpoint.
|
143
128
|
# Uses the multipart-post gem, since oauth2 doesn't support multipart.
|
144
129
|
#
|
145
130
|
# +trading_partner_id+ the trading partner to transmit to
|
146
|
-
#
|
147
131
|
# +filename+ the path to the file to transmit
|
148
132
|
#
|
149
133
|
def files(trading_partner_id, filename)
|
134
|
+
scope 'default'
|
150
135
|
url = URI.parse(@api_url + '/files/')
|
151
136
|
|
152
137
|
File.open(filename) do |f|
|
153
138
|
req = Net::HTTP::Post::Multipart.new url.path,
|
154
139
|
'file' => UploadIO.new(f, 'application/EDI-X12', filename),
|
155
140
|
'trading_partner_id' => trading_partner_id
|
156
|
-
req['Authorization'] = "Bearer #{
|
141
|
+
req['Authorization'] = "Bearer #{default_scope.token}"
|
157
142
|
req['User-Agent'] = user_agent
|
158
143
|
|
159
144
|
@response = Net::HTTP.start(url.host, url.port) do |http|
|
@@ -164,54 +149,305 @@ module PokitDok
|
|
164
149
|
JSON.parse(@response.body)
|
165
150
|
end
|
166
151
|
|
167
|
-
# Invokes the
|
152
|
+
# Invokes the insurance prices endpoint.
|
153
|
+
#
|
154
|
+
# +params+ an optional hash of parameters
|
155
|
+
#
|
156
|
+
def insurance_prices(params = {})
|
157
|
+
scope 'default'
|
158
|
+
get('prices/insurance', params)
|
159
|
+
end
|
160
|
+
|
161
|
+
# Invokes the payers endpoint.
|
162
|
+
#
|
163
|
+
# +params+ an optional hash of parameters
|
164
|
+
#
|
168
165
|
def payers(params = {})
|
169
|
-
|
170
|
-
|
166
|
+
scope 'default'
|
167
|
+
get('payers/', params)
|
171
168
|
end
|
172
169
|
|
173
|
-
# Invokes the plans endpoint
|
170
|
+
# Invokes the plans endpoint.
|
171
|
+
#
|
172
|
+
# +params+ an optional Hash of parameters
|
173
|
+
#
|
174
174
|
def plans(params = {})
|
175
|
-
|
176
|
-
|
175
|
+
scope 'default'
|
176
|
+
get('plans/', params)
|
177
177
|
end
|
178
178
|
|
179
|
-
# Invokes the providers endpoint
|
179
|
+
# Invokes the providers endpoint.
|
180
|
+
#
|
181
|
+
# +params+ an optional Hash of parameters
|
182
|
+
#
|
180
183
|
def providers(params = {})
|
181
|
-
response =
|
184
|
+
response = default_scope.get('providers/') do |request|
|
182
185
|
request.params = params
|
183
186
|
end
|
184
187
|
JSON.parse(response.body)
|
185
188
|
end
|
186
189
|
|
187
|
-
# Invokes the referrals endpoint
|
190
|
+
# Invokes the referrals endpoint.
|
191
|
+
#
|
192
|
+
# +params+ an optional Hash of parameters
|
193
|
+
#
|
188
194
|
def referrals(params = {})
|
189
|
-
|
190
|
-
|
191
|
-
body: params.to_json) do |request|
|
192
|
-
request.headers['Content-Type'] = 'application/json'
|
193
|
-
end
|
194
|
-
JSON.parse(response.body)
|
195
|
+
scope 'default'
|
196
|
+
post('referrals/', params)
|
195
197
|
end
|
196
198
|
|
197
|
-
# Invokes the trading partners endpoint
|
198
|
-
#
|
199
|
+
# Invokes the trading partners endpoint.
|
200
|
+
#
|
201
|
+
# +params+ an optional Hash of parameters
|
202
|
+
#
|
199
203
|
def trading_partners(params = {})
|
200
204
|
trading_partner_id = params.delete :trading_partner_id
|
201
205
|
|
202
206
|
response =
|
203
|
-
|
204
|
-
|
205
|
-
|
207
|
+
default_scope.get("tradingpartners/#{trading_partner_id}") do |request|
|
208
|
+
request.params = params
|
209
|
+
end
|
206
210
|
JSON.parse(response.body)
|
207
211
|
end
|
208
212
|
|
209
|
-
#
|
210
|
-
|
211
|
-
|
213
|
+
# Scheduling endpoints
|
214
|
+
|
215
|
+
# Invokes the appointments endpoint to query for an open appointment
|
216
|
+
# slot or a booked appointment given a specific pd_appointment_uuid,
|
217
|
+
# the PokitDok unique appointment identifier.
|
218
|
+
#
|
219
|
+
# +params+ an optional Hash of parameters
|
220
|
+
#
|
221
|
+
def appointment(params = {})
|
222
|
+
@appointment_id = params.delete :appointment_id
|
223
|
+
scope 'user_schedule'
|
224
|
+
|
225
|
+
get_one('schedule/appointmenttypes/', @appointment_id, params)
|
226
|
+
end
|
227
|
+
|
228
|
+
# Invokes the activities endpoint.
|
229
|
+
#
|
230
|
+
# This endpoint uses the user_schedule OAuth2 scope. You'll need to
|
231
|
+
# get the user's authorization via our OAuth2 provider, and pass the
|
232
|
+
# authorization code you received into
|
233
|
+
# scope_code('user_schedule', '(the authorization code)')
|
234
|
+
#
|
235
|
+
# +params+ an optional Hash of parameters
|
236
|
+
#
|
237
|
+
def appointments(params = {})
|
238
|
+
scope 'user_schedule'
|
239
|
+
get('schedule/appointments/', params)
|
240
|
+
end
|
241
|
+
|
242
|
+
# Invokes the appointment_types endpoint, to get information on a specific
|
243
|
+
# appointment type.
|
244
|
+
#
|
245
|
+
# +params+ an optional Hash of parameters
|
246
|
+
#
|
247
|
+
def appointment_type(params = {})
|
248
|
+
appointment_type = params.delete :uuid
|
249
|
+
|
250
|
+
response =
|
251
|
+
default_scope.get("schedule/appointmenttypes/#{appointment_type}") do |request|
|
212
252
|
request.params = params
|
213
253
|
end
|
254
|
+
|
255
|
+
JSON.parse(response.body)
|
256
|
+
end
|
257
|
+
|
258
|
+
# Invokes the appointment_types endpoint.
|
259
|
+
#
|
260
|
+
# +params+ an optional hash of parameters
|
261
|
+
#
|
262
|
+
def appointment_types(params = {})
|
263
|
+
scope 'default'
|
264
|
+
get('schedule/appointmenttypes/', params)
|
265
|
+
end
|
266
|
+
|
267
|
+
# Books an appointment.
|
268
|
+
#
|
269
|
+
# This endpoint uses the user_schedule OAuth2 scope. You'll need to
|
270
|
+
# get the user's authorization via our OAuth2 provider, and pass the
|
271
|
+
# authorization code you received into
|
272
|
+
# scope_code('user_schedule', '(the authorization code)')
|
273
|
+
#
|
274
|
+
# +params+ an optional hash of parameters that will be sent in the POST body
|
275
|
+
#
|
276
|
+
def book_appointment(appointment_uuid, params = {})
|
277
|
+
scope 'user_schedule'
|
278
|
+
|
279
|
+
put_one("schedule/appointments", appointment_uuid, params)
|
280
|
+
end
|
281
|
+
|
282
|
+
# Cancels the specified appointment.
|
283
|
+
#
|
284
|
+
# This endpoint uses the user_schedule OAuth2 scope. You'll need to
|
285
|
+
# get the user's authorization via our OAuth2 provider, and pass the
|
286
|
+
# authorization code you received into
|
287
|
+
# scope_code('user_schedule', '(the authorization code)')
|
288
|
+
#
|
289
|
+
# +params+ an optional Hash of parameters
|
290
|
+
#
|
291
|
+
def cancel_appointment(appointment_uuid, params={})
|
292
|
+
scope 'user_schedule'
|
293
|
+
|
294
|
+
delete_one("schedule/appointments", appointment_uuid, params)
|
295
|
+
end
|
296
|
+
|
297
|
+
# Invokes the schedule/appointments endpoint.
|
298
|
+
#
|
299
|
+
# This endpoint uses the user_schedule OAuth2 scope. You'll need to
|
300
|
+
# get the user's authorization via our OAuth2 provider, and pass the
|
301
|
+
# authorization code you received into
|
302
|
+
# scope_code('user_schedule', '(the authorization code)')
|
303
|
+
#
|
304
|
+
# +params+ an optional hash of parameters
|
305
|
+
#
|
306
|
+
def open_appointment_slots(params = {})
|
307
|
+
scope 'user_schedule'
|
308
|
+
get('schedule/appointments', params)
|
309
|
+
end
|
310
|
+
|
311
|
+
# Invokes the schedulers endpoint.
|
312
|
+
#
|
313
|
+
# +params an optional Hash of parameters
|
314
|
+
#
|
315
|
+
def schedulers(params = {})
|
316
|
+
scope 'default'
|
317
|
+
get('schedule/schedulers/', params)
|
318
|
+
end
|
319
|
+
|
320
|
+
# Invokes the schedulers endpoint, to get information about a specific
|
321
|
+
# scheduler.
|
322
|
+
#
|
323
|
+
# +params+ an optional Hash of parameters
|
324
|
+
#
|
325
|
+
def scheduler(params = {})
|
326
|
+
scheduler_id = params.delete :uuid
|
327
|
+
|
328
|
+
response =
|
329
|
+
default_scope.get("schedule/schedulers/#{scheduler_id}") do |request|
|
330
|
+
request.params = params
|
331
|
+
end
|
214
332
|
JSON.parse(response.body)
|
215
333
|
end
|
334
|
+
|
335
|
+
# Invokes the slots endpoint.
|
336
|
+
#
|
337
|
+
# This endpoint uses the user_schedule OAuth2 scope. You'll need to
|
338
|
+
# get the user's authorization via our OAuth2 provider, and pass the
|
339
|
+
# authorization code you received into
|
340
|
+
# scope_code('user_schedule', '(the authorization code)')
|
341
|
+
#
|
342
|
+
# +params+ an optional Hash of parameters
|
343
|
+
#
|
344
|
+
def slots(params = {})
|
345
|
+
scope 'user_schedule'
|
346
|
+
end
|
347
|
+
|
348
|
+
# Updates the specified appointment.
|
349
|
+
#
|
350
|
+
# This endpoint uses the user_schedule OAuth2 scope. You'll need to
|
351
|
+
# get the user's authorization via our OAuth2 provider, and pass the
|
352
|
+
# authorization code you received into
|
353
|
+
# scope_code('user_schedule', '(the authorization code)')
|
354
|
+
#
|
355
|
+
# +params+ an optional Hash of parameters
|
356
|
+
#
|
357
|
+
def update_appointment(appointment_uuid, params={})
|
358
|
+
scope 'user_schedule'
|
359
|
+
|
360
|
+
put_one("schedule/appointments", appointment_uuid, params)
|
361
|
+
end
|
362
|
+
|
363
|
+
private
|
364
|
+
# Returns a standard User-Agent string to be passed along with all requests
|
365
|
+
def user_agent
|
366
|
+
"pokitdok-ruby 0.8 #{RUBY_DESCRIPTION}"
|
367
|
+
end
|
368
|
+
|
369
|
+
# Returns a standard set of headers to be passed along with all requests
|
370
|
+
def headers
|
371
|
+
{ 'User-Agent' => user_agent }
|
372
|
+
end
|
373
|
+
|
374
|
+
def get(endpoint, params = {})
|
375
|
+
response = current_scope.get(endpoint, headers: headers, params: params)
|
376
|
+
|
377
|
+
JSON.parse(response.body)
|
378
|
+
end
|
379
|
+
|
380
|
+
def get_one(endpoint, id, params = {})
|
381
|
+
response = current_scope.get("#{endpoint}/#{id}", headers: headers,
|
382
|
+
body: params.to_json) do |request|
|
383
|
+
request.headers['Content-Type'] = 'application/json'
|
384
|
+
end
|
385
|
+
|
386
|
+
JSON.parse(response.body)
|
387
|
+
end
|
388
|
+
|
389
|
+
def post(endpoint, params = {})
|
390
|
+
response = current_scope.post(endpoint, headers: headers,
|
391
|
+
body: params.to_json) do |request|
|
392
|
+
request.headers['Content-Type'] = 'application/json'
|
393
|
+
end
|
394
|
+
|
395
|
+
JSON.parse(response.body)
|
396
|
+
end
|
397
|
+
|
398
|
+
def put_one(endpoint, id, params = {})
|
399
|
+
response = current_scope.put("#{endpoint}/#{id}", headers: headers,
|
400
|
+
body: params.to_json) do |request|
|
401
|
+
request.headers['Content-Type'] = 'application/json'
|
402
|
+
end
|
403
|
+
|
404
|
+
JSON.parse(response.body)
|
405
|
+
end
|
406
|
+
|
407
|
+
def delete_one(endpoint, id, params = {})
|
408
|
+
response = current_scope.delete("#{endpoint}/#{id}", headers: headers,
|
409
|
+
body: params.to_json) do |request|
|
410
|
+
request.headers['Content-Type'] = 'application/json'
|
411
|
+
end
|
412
|
+
|
413
|
+
if response.body.empty?
|
414
|
+
response.status == 204
|
415
|
+
else
|
416
|
+
JSON.parse(response.body)
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
420
|
+
# Refreshes the client token associated with this PokitDok connection
|
421
|
+
#
|
422
|
+
# FIXME: automatic refresh on expiration
|
423
|
+
#
|
424
|
+
def refresh_token(code=nil)
|
425
|
+
body = {}
|
426
|
+
body[:code] = code unless code.nil?
|
427
|
+
|
428
|
+
@client.client_credentials.get_token(
|
429
|
+
headers: { 'Authorization' => 'Basic' })
|
430
|
+
end
|
431
|
+
|
432
|
+
def scope(name)
|
433
|
+
raise ArgumentError, "You need to provide an authorization code for " \
|
434
|
+
"the scope #{name} with the scope_code method" if @scopes[name].nil?
|
435
|
+
|
436
|
+
@current_scope = name
|
437
|
+
|
438
|
+
if @scopes[name][:scope].nil?
|
439
|
+
@scopes[name][:scope] = refresh_token(@scopes[name][:code])
|
440
|
+
end
|
441
|
+
|
442
|
+
@scopes[name][:scope]
|
443
|
+
end
|
444
|
+
|
445
|
+
def current_scope
|
446
|
+
@scopes[@current_scope][:scope]
|
447
|
+
end
|
448
|
+
|
449
|
+
def default_scope
|
450
|
+
@scopes['default'][:scope]
|
451
|
+
end
|
216
452
|
end
|
217
453
|
end
|