updox 0.4.0 → 0.5.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/CHANGELOG.md +14 -0
- data/README.md +47 -3
- data/lib/updox/connection.rb +4 -1
- data/lib/updox/models/location.rb +37 -1
- data/lib/updox/models/model.rb +19 -0
- data/lib/updox/models/patient.rb +2 -0
- data/lib/updox/models/practice.rb +13 -2
- data/lib/updox/models/user.rb +7 -1
- data/lib/updox/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1a4c56774d2ae35862e3f78e7d30f846e6d46718f4ef6085e32046f9d88c9d0
|
4
|
+
data.tar.gz: 89cb3f917db60bc0b987c30493a8d43abb34f984ac183580703f0ddf0add6adc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f29e44f7ee6cfc00923d8c09fb53a3005ab462460b8cc7ff3a6199f09d7aa75c3f3c4060bf7ddae8bcc1d9bbb1f69dcddd40eced124c93da58d6fedf032182fc
|
7
|
+
data.tar.gz: 127d6d020b096c7e87c3a0267fa740340c41a4025f097db4cbb9fb7c36be790f37737e893f3241bd9558f61f3a700cbb4166a59f8ad0914ec35437c257a0627a
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [0.5.0] - 2020-02-13
|
8
|
+
### Added
|
9
|
+
- Practice#find
|
10
|
+
- Practice#exists?
|
11
|
+
- Location#query
|
12
|
+
- Location#find
|
13
|
+
- Location#exists?
|
14
|
+
- User#find
|
15
|
+
- Locaiton find and exists? have `cache` option
|
16
|
+
|
17
|
+
### Changed
|
18
|
+
- Any model class returned has `successful?`, `response_code` and `response_message`
|
19
|
+
|
7
20
|
## [0.4.0] - 2020-02-11
|
8
21
|
### Changed
|
9
22
|
- Minor grammar fixes
|
@@ -25,6 +38,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
25
38
|
### Added
|
26
39
|
- Initial Release with ability to ping Updox api
|
27
40
|
|
41
|
+
[0.5.0]: https://github.com/WeInfuse/updox/compare/v0.4.0...v0.5.0
|
28
42
|
[0.4.0]: https://github.com/WeInfuse/updox/compare/v0.3.0...v0.4.0
|
29
43
|
[0.3.0]: https://github.com/WeInfuse/updox/compare/v0.2.0...v0.3.0
|
30
44
|
[0.2.0]: https://github.com/WeInfuse/updox/compare/v0.1.0...v0.2.0
|
data/README.md
CHANGED
@@ -47,6 +47,12 @@ practice.create
|
|
47
47
|
practices = Updox::Models::Practice.query.practices
|
48
48
|
```
|
49
49
|
|
50
|
+
#### Find
|
51
|
+
```ruby
|
52
|
+
practice = Updox::Models::Practice.find('0001')
|
53
|
+
```
|
54
|
+
|
55
|
+
|
50
56
|
### Location
|
51
57
|
|
52
58
|
#### Create
|
@@ -59,6 +65,37 @@ location.save(account_id: practice.account_id)
|
|
59
65
|
Location.sync([l0, l1], account_id: practice.account_id)
|
60
66
|
```
|
61
67
|
|
68
|
+
#### Query
|
69
|
+
```ruby
|
70
|
+
locations = Updox::Models::Location.query(account_id: '0001')
|
71
|
+
```
|
72
|
+
|
73
|
+
#### Find
|
74
|
+
There is no `find` in the api, we are doing a ruby `find` on the query - so use the `cached_query` option if you are doing a bunch of lookups
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
location = Updox::Models::Location.find(27, account_id: '0001')
|
78
|
+
|
79
|
+
cached_query_results = Updox::Models::Location.query(account_id: '0001')
|
80
|
+
|
81
|
+
10.times do |id|
|
82
|
+
Updox::Models::Location.find(id, account_id: '0001', cached_query: cached_query_results)
|
83
|
+
end
|
84
|
+
```
|
85
|
+
|
86
|
+
#### Exists?
|
87
|
+
See note on #find method about caching
|
88
|
+
|
89
|
+
```ruby
|
90
|
+
Updox::Models::Location.exists?(27, account_id: '0001')
|
91
|
+
|
92
|
+
cached_query_results = Updox::Models::Location.query(account_id: '0001')
|
93
|
+
|
94
|
+
10.times do |id|
|
95
|
+
Updox::Models::Location.exists?(id, account_id: '0001', cached_query: cached_query_results)
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
62
99
|
### Calendar
|
63
100
|
|
64
101
|
#### Create
|
@@ -93,11 +130,13 @@ Appointment.sync([appt0, appt1, appt2], account_id: practice.account_id)
|
|
93
130
|
```
|
94
131
|
|
95
132
|
### Response
|
96
|
-
By default we return `Updox::Models::Model.from_response`
|
133
|
+
By default we usually return `Updox::Models::Model.from_response`
|
97
134
|
|
98
|
-
This class throws if throw an exception on
|
135
|
+
This class throws if throw an exception on non 200 responses with a parsed error.
|
99
136
|
|
100
|
-
|
137
|
+
Updox usually returns a `200` with error information even on things like `Unauthorized`. So you may have to check the updox status via `successful?` method.
|
138
|
+
|
139
|
+
If HTTP 200 it adds helper methods and converts each to the respective class.
|
101
140
|
|
102
141
|
The raw response is stored in the resulting model but you can get the raw response by setting config option to false
|
103
142
|
|
@@ -106,6 +145,11 @@ response = Updox::Models::Practice.query
|
|
106
145
|
response.practices # Has the practices as Updox::Models::Practice model
|
107
146
|
response.items # Same as practices, always exists on any model if alias is broken
|
108
147
|
response.item # If there is no array, we populate this object
|
148
|
+
|
149
|
+
resposne.successful? # Indicates Updox successful indication
|
150
|
+
resposne.response_code? # Indicates Updox response code
|
151
|
+
resposne.response_message? # Indicates Updox response message
|
152
|
+
|
109
153
|
response.response # Raw HTTParty response is here
|
110
154
|
```
|
111
155
|
|
data/lib/updox/connection.rb
CHANGED
@@ -8,8 +8,11 @@ module Updox
|
|
8
8
|
|
9
9
|
format :json
|
10
10
|
|
11
|
-
def request(endpoint: Updox::Models::Auth::PING_ENDPOINT, body: {}, headers: {}, auth: Updox::Models::Auth.new, required_auths: [])
|
11
|
+
def request(endpoint: Updox::Models::Auth::PING_ENDPOINT, body: {}, headers: {}, auth: Updox::Models::Auth.new, required_auths: [], account_id: nil, user_id: nil)
|
12
12
|
if body.is_a?(Hash)
|
13
|
+
auth[:accountId] = account_id unless account_id.nil?
|
14
|
+
auth[:userId] = user_id unless user_id.nil?
|
15
|
+
|
13
16
|
body = auth_data(auth, required_auths).merge(body)
|
14
17
|
body = body.to_json
|
15
18
|
end
|
@@ -2,21 +2,57 @@ module Updox
|
|
2
2
|
module Models
|
3
3
|
class Location < Model
|
4
4
|
SYNC_ENDPOINT = '/LocationsSync'.freeze
|
5
|
+
LIST_ENDPOINT = '/PracticeLocationsRetrieve'.freeze
|
6
|
+
|
7
|
+
LIST_TYPE = 'locations'
|
8
|
+
LIST_NAME = LIST_TYPE
|
5
9
|
|
6
10
|
property :id
|
7
11
|
property :code
|
8
12
|
property :name
|
13
|
+
property :address1
|
14
|
+
property :address2
|
15
|
+
property :city
|
16
|
+
property :state
|
17
|
+
property :zip
|
18
|
+
property :dayphone, from: :phone
|
19
|
+
property :evephone
|
20
|
+
property :faxphone, from: :fax
|
21
|
+
property :apptphone
|
22
|
+
property :emailAddress, from: :email
|
23
|
+
property :emailAddress, from: :email_address
|
9
24
|
property :showInPortal, default: false, from: :show_in_portal
|
10
25
|
property :active, default: true
|
11
26
|
|
27
|
+
# This is only on response
|
28
|
+
property :external_id, from: :externalId
|
29
|
+
|
12
30
|
alias_method :show_in_portal, :showInPortal
|
31
|
+
alias_method :phone, :dayphone
|
32
|
+
alias_method :fax, :faxphone
|
33
|
+
alias_method :email, :emailAddress
|
34
|
+
alias_method :email_address, :emailAddress
|
13
35
|
|
14
36
|
def save(account_id: )
|
15
37
|
self.class.sync([self], account_id: account_id)
|
16
38
|
end
|
17
39
|
|
40
|
+
def self.exists?(location_id, account_id: , cached_query: nil)
|
41
|
+
false == self.find(location_id, account_id: account_id, cached_query: cached_query).nil?
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.find(location_id, account_id: , cached_query: nil)
|
45
|
+
obj = cached_query || self.query(account_id: account_id)
|
46
|
+
|
47
|
+
obj.locations.find {|location| location_id.to_s == location.external_id.to_s }
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.query(account_id: , active_only: false)
|
51
|
+
from_response(UpdoxClient.connection.request(endpoint: LIST_ENDPOINT, body: { activeOnly: active_only }, auth: {accountId: account_id}, required_auths: Updox::Models::Auth::AUTH_ACCT))
|
52
|
+
end
|
53
|
+
|
18
54
|
def self.sync(locations, account_id: )
|
19
|
-
from_response(UpdoxClient.connection.request(endpoint: SYNC_ENDPOINT, body: { locations: locations }, auth: {accountId: account_id}, required_auths: Updox::Models::Auth::AUTH_ACCT)
|
55
|
+
from_response(UpdoxClient.connection.request(endpoint: SYNC_ENDPOINT, body: { locations: locations }, auth: {accountId: account_id}, required_auths: Updox::Models::Auth::AUTH_ACCT))
|
20
56
|
end
|
21
57
|
end
|
22
58
|
end
|
data/lib/updox/models/model.rb
CHANGED
@@ -8,9 +8,23 @@ module Updox
|
|
8
8
|
|
9
9
|
LIST_TYPE = 'undefined'
|
10
10
|
LIST_NAME = 'models'
|
11
|
+
ITEM_TYPE = 'model'
|
11
12
|
|
12
13
|
property :item, required: false
|
13
14
|
property :items, required: false
|
15
|
+
property :updox_status, default: {}
|
16
|
+
|
17
|
+
def successful?
|
18
|
+
self[:updox_status].dig('successful')
|
19
|
+
end
|
20
|
+
|
21
|
+
def response_code
|
22
|
+
self[:updox_status].dig('responseCode')
|
23
|
+
end
|
24
|
+
|
25
|
+
def response_message
|
26
|
+
self[:updox_status].dig('responseMessage')
|
27
|
+
end
|
14
28
|
|
15
29
|
def self.from_response(response, klazz = self)
|
16
30
|
return response if false == Updox.configuration.parse_responses?
|
@@ -26,10 +40,15 @@ module Updox
|
|
26
40
|
elsif data&.include?(klazz.const_get(:LIST_TYPE))
|
27
41
|
model.items = data.dig(klazz.const_get(:LIST_TYPE)).map { |obj| klazz.new(obj) }
|
28
42
|
model.define_singleton_method(klazz.const_get(:LIST_NAME)) { self.items }
|
43
|
+
elsif data&.include?(klazz.const_get(:ITEM_TYPE))
|
44
|
+
model.item = klazz.new(data.dig(klazz.const_get(:ITEM_TYPE)))
|
45
|
+
model.define_singleton_method(klazz.const_get(:ITEM_TYPE)) { self.item }
|
29
46
|
else
|
30
47
|
model.items = [data]
|
31
48
|
model.item = data
|
32
49
|
end
|
50
|
+
|
51
|
+
model.updox_status = data&.select {|k,v| ['successful', 'responseMessage', 'responseCode'].include?(k)} || {}
|
33
52
|
else
|
34
53
|
raise UpdoxException.from_response(response)
|
35
54
|
end
|
data/lib/updox/models/patient.rb
CHANGED
@@ -8,10 +8,12 @@ module Updox
|
|
8
8
|
property :firstName, from: :first_name
|
9
9
|
property :middleName, from: :middle_name
|
10
10
|
property :lastName, from: :last_name
|
11
|
+
property :emailAddress, from: :email
|
11
12
|
property :emailAddress, from: :email_address
|
12
13
|
property :homePhone, from: :home_phone
|
13
14
|
property :workPhone, from: :work_phone
|
14
15
|
property :mobileNumber, from: :mobile_number
|
16
|
+
property :mobileNumber, from: :mobile_phone
|
15
17
|
property :active, default: true
|
16
18
|
|
17
19
|
alias_method :email, :emailAddress
|
@@ -2,10 +2,12 @@ module Updox
|
|
2
2
|
module Models
|
3
3
|
class Practice < Model
|
4
4
|
CREATE_ENDPOINT = '/PracticeCreate'.freeze
|
5
|
+
FIND_ENDPOINT = '/PracticeGet'.freeze
|
5
6
|
QUERY_ENDPOINT = '/PracticeList'.freeze
|
6
7
|
|
7
8
|
LIST_TYPE = 'practiceList'.freeze
|
8
9
|
LIST_NAME = 'practices'
|
10
|
+
ITEM_TYPE = 'practice'
|
9
11
|
|
10
12
|
property :name, required: true
|
11
13
|
property :accountId, from: :account_id, with: ->(v) { v.to_s }
|
@@ -13,7 +15,7 @@ module Updox
|
|
13
15
|
property :address2
|
14
16
|
property :city
|
15
17
|
property :state
|
16
|
-
property :postal
|
18
|
+
property :postal, from: :zip
|
17
19
|
property :phone
|
18
20
|
property :fax
|
19
21
|
property :websiteAddress, from: :website_address
|
@@ -31,13 +33,22 @@ module Updox
|
|
31
33
|
property :active, default: true
|
32
34
|
|
33
35
|
alias_method :account_id, :accountId
|
36
|
+
alias_method :zip, :postal
|
34
37
|
|
35
38
|
def create
|
36
39
|
UpdoxClient.connection.request(endpoint: CREATE_ENDPOINT, body: self.to_h, required_auths: Updox::Models::Auth::AUTH_APP)
|
37
40
|
end
|
38
41
|
|
42
|
+
def self.exists?(account_id)
|
43
|
+
self.find(account_id).successful?
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.find(account_id)
|
47
|
+
from_response(UpdoxClient.connection.request(endpoint: FIND_ENDPOINT, body: {accountId: account_id}, required_auths: Updox::Models::Auth::AUTH_APP))
|
48
|
+
end
|
49
|
+
|
39
50
|
def self.query
|
40
|
-
from_response(UpdoxClient.connection.request(endpoint: QUERY_ENDPOINT, required_auths: Updox::Models::Auth::AUTH_APP)
|
51
|
+
from_response(UpdoxClient.connection.request(endpoint: QUERY_ENDPOINT, required_auths: Updox::Models::Auth::AUTH_APP))
|
41
52
|
end
|
42
53
|
end
|
43
54
|
end
|
data/lib/updox/models/user.rb
CHANGED
@@ -3,9 +3,11 @@ module Updox
|
|
3
3
|
class User < Model
|
4
4
|
SAVE_ENDPOINT = '/UserSave'.freeze
|
5
5
|
QUERY_ENDPOINT = '/UserList'.freeze
|
6
|
+
FIND_ENDPOINT = '/UserGet'.freeze
|
6
7
|
|
7
8
|
LIST_TYPE = 'userList'.freeze
|
8
9
|
LIST_NAME = 'users'
|
10
|
+
ITEM_TYPE = 'user'
|
9
11
|
|
10
12
|
property :userId, from: :user_id
|
11
13
|
property :emrUserId, from: :emr_user_id
|
@@ -32,8 +34,12 @@ module Updox
|
|
32
34
|
UpdoxClient.connection.request(endpoint: SAVE_ENDPOINT, body: self.to_h, required_auths: Updox::Models::Auth::AUTH_APP)
|
33
35
|
end
|
34
36
|
|
37
|
+
def self.find(user_id, account_id: )
|
38
|
+
from_response(UpdoxClient.connection.request(endpoint: FIND_ENDPOINT, account_id: account_id, body: { userId: user_id}, required_auths: Updox::Models::Auth::AUTH_ACCT))
|
39
|
+
end
|
40
|
+
|
35
41
|
def self.query
|
36
|
-
from_response(UpdoxClient.connection.request(endpoint: QUERY_ENDPOINT, required_auths: Updox::Models::Auth::AUTH_APP)
|
42
|
+
from_response(UpdoxClient.connection.request(endpoint: QUERY_ENDPOINT, required_auths: Updox::Models::Auth::AUTH_APP))
|
37
43
|
end
|
38
44
|
end
|
39
45
|
end
|
data/lib/updox/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: updox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Crockett
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|