Class: AllscriptsUnityClient::JSONClientDriver
- Inherits:
-
ClientDriver
- Object
- ClientDriver
- AllscriptsUnityClient::JSONClientDriver
- Defined in:
- lib/allscripts_unity_client/json_client_driver.rb
Overview
A ClientDriver that supports Unity’s JSON endpoints.
Constant Summary collapse
- UNITY_JSON_ENDPOINT =
'/Unity/UnityService.svc/json'- UBIQUITY_JSON_ENDPOINT =
'/UnityService.svc/json'- TOKEN_REGEX =
/^"?(\w|-)+"?$/
Constants inherited from ClientDriver
Instance Attribute Summary collapse
-
#connection ⇒ Object
Returns the value of attribute connection.
-
#json_base_url ⇒ Object
Returns the value of attribute json_base_url.
-
#security_token ⇒ Object
Returns the value of attribute security_token.
-
#ubiquity_client_id ⇒ Object
Returns the value of attribute ubiquity_client_id.
-
#ubiquity_id ⇒ Object
Returns the value of attribute ubiquity_id.
-
#use_ubiquity ⇒ Object
Returns the value of attribute use_ubiquity.
Attributes inherited from ClientDriver
Instance Method Summary collapse
- #build_uri(request_location) ⇒ Object
- #client_type ⇒ Object
-
#get_security_token!(parameters = {}) ⇒ Object
See Client#get_security_token!.
-
#get_user_authentication(parameters = {}) ⇒ Object
See Client#get_user_authentication.
-
#initialize(options) ⇒ JSONClientDriver
constructor
A new instance of JSONClientDriver.
- #magic(parameters = {}) ⇒ Object
-
#retire_security_token!(parameters = {}) ⇒ Object
See Client#retire_security_token!.
- #revoke_authentication ⇒ Object
- #user_authenticated? ⇒ Boolean
Methods inherited from ClientDriver
Constructor Details
#initialize(options) ⇒ JSONClientDriver
Returns a new instance of JSONClientDriver.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 14 def initialize() super @connection = Faraday.new do |conn| conn.request :json conn.adapter Faraday.default_adapter conn..timeout = .timeout || 90 conn..open_timeout = .timeout || 90 conn.proxy = .proxy if .proxy end @text_connection = Faraday.new do |conn| conn.request :json conn.adapter Faraday.default_adapter conn..timeout = .timeout || 90 conn..open_timeout = .timeout || 90 conn.proxy = .proxy if .proxy end end |
Instance Attribute Details
#connection ⇒ Object
Returns the value of attribute connection.
8 9 10 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 8 def connection @connection end |
#json_base_url ⇒ Object
Returns the value of attribute json_base_url.
8 9 10 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 8 def json_base_url @json_base_url end |
#security_token ⇒ Object
Returns the value of attribute security_token.
8 9 10 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 8 def security_token @security_token end |
#ubiquity_client_id ⇒ Object
Returns the value of attribute ubiquity_client_id.
8 9 10 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 8 def ubiquity_client_id @ubiquity_client_id end |
#ubiquity_id ⇒ Object
Returns the value of attribute ubiquity_id.
8 9 10 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 8 def ubiquity_id @ubiquity_id end |
#use_ubiquity ⇒ Object
Returns the value of attribute use_ubiquity.
8 9 10 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 8 def use_ubiquity @use_ubiquity end |
Instance Method Details
#build_uri(request_location) ⇒ Object
34 35 36 37 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 34 def build_uri(request_location) endpoint = .use_ubiquity ? UBIQUITY_JSON_ENDPOINT : UNITY_JSON_ENDPOINT "#{@options.base_unity_url}#{[endpoint, request_location].join('/')}" end |
#client_type ⇒ Object
39 40 41 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 39 def client_type :json end |
#get_security_token!(parameters = {}) ⇒ Object
See Client#get_security_token!.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 88 def get_security_token!(parameters = {}) username = get_username(parameters) password = parameters[:password] || .password appname = parameters[:appname] || .appname request_data = { 'Username' => username, 'Password' => password, 'Appname' => appname } start_timer response = @text_connection.post(build_uri('GetToken'), MultiJson.dump(request_data.to_hash)) end_timer log_get_security_token log_info("Response Status: #{response.status}") if response.status != 200 || TOKEN_REGEX.match(response.body).nil? raise make_get_security_token_error else raise_if_response_error(response.body) @security_token = response.body end end |
#get_user_authentication(parameters = {}) ⇒ Object
See Client#get_user_authentication.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 68 def get_user_authentication(parameters = {}) response = magic({ action: 'GetUserAuthentication', userid: parameters[:ehr_userid] || .ehr_userid, parameter1: parameters[:ehr_password] || .ehr_password }) if response[:valid_user] == 'YES' @user_authentication = response log_info("allscripts_unity_client authentication attempt: success #{@options.base_unity_url}") return true elsif response[:valid_user] == 'NO' log_warn("allscripts_unity_client authentication attempt: failure #{@options.base_unity_url}") return false else raise StandardError.new('Unexpected response from the server') end end |
#magic(parameters = {}) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 43 def magic(parameters = {}) request = JSONUnityRequest.new(parameters, .timezone, .appname, @security_token, .raw_dates) request_hash = request.to_hash request_data = MultiJson.dump(request_hash) start_timer response = @connection.post(build_uri('MagicJson'), request_data) end_timer # NOTE: ClientDriver#log_magic uses ClientDriver#log_info, which # appends timing info (if end_timer has been called previously), # and then resets the timer. # # It would be nice if future work made this less stateful. log_magic(request) log_info("Response Status: #{response.status}") response = MultiJson.load(response.body) raise_if_response_error(response) response = JSONUnityResponse.new(response, .timezone) response.to_hash end |
#retire_security_token!(parameters = {}) ⇒ Object
See Client#retire_security_token!.
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 116 def retire_security_token!(parameters = {}) token = parameters[:token] || @security_token appname = parameters[:appname] || .appname request_data = { 'Token' => token, 'Appname' => appname } start_timer response = @connection.post(build_uri('RetireSecurityToken'), MultiJson.dump(request_data.to_hash)) end_timer raise_if_response_error(response.body) log_retire_security_token @security_token = nil revoke_authentication end |
#revoke_authentication ⇒ Object
141 142 143 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 141 def revoke_authentication @user_authentication = nil end |
#user_authenticated? ⇒ Boolean
136 137 138 139 |
# File 'lib/allscripts_unity_client/json_client_driver.rb', line 136 def user_authenticated? return false if @user_authentication.nil? @user_authentication.is_a?(Hash) && !@user_authentication.empty? end |