allscripts_unity_client 2.2.4 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -22
- data/allscripts_unity_client.gemspec +12 -15
- data/lib/allscripts_unity_client/client_driver.rb +1 -12
- data/lib/allscripts_unity_client/client_options.rb +2 -9
- data/lib/allscripts_unity_client/json_client_driver.rb +43 -108
- data/lib/allscripts_unity_client/utilities.rb +2 -2
- data/lib/allscripts_unity_client/version.rb +1 -1
- data/lib/allscripts_unity_client.rb +6 -13
- data/spec/allscripts_unity_client_spec.rb +9 -24
- data/spec/client_driver_spec.rb +1 -2
- data/spec/client_options_spec.rb +1 -17
- data/spec/factories/client_driver_factory.rb +1 -3
- data/spec/factories/client_options.rb +1 -2
- data/spec/json_client_driver_spec.rb +16 -114
- data/spec/spec_helper.rb +1 -11
- data/spec/support/shared_examples_for_client_driver.rb +1 -15
- metadata +19 -68
- data/lib/allscripts_unity_client/new_relic_support.rb +0 -30
- data/lib/allscripts_unity_client/soap_client_driver.rb +0 -145
- data/spec/new_relic_support_spec.rb +0 -49
- data/spec/soap_client_driver_spec.rb +0 -140
- data/spec/support/new_relic.rb +0 -16
@@ -9,7 +9,6 @@ describe AllscriptsUnityClient::JSONClientDriver do
|
|
9
9
|
client_driver
|
10
10
|
end
|
11
11
|
|
12
|
-
let(:new_relic_client_driver) { build(:json_client_driver, new_relic: true) }
|
13
12
|
let(:get_server_info) { FixtureLoader.load_file('get_server_info.json') }
|
14
13
|
let(:get_security_token) { FixtureLoader.load_file('get_security_token.json') }
|
15
14
|
let(:retire_security_token) { FixtureLoader.load_file('retire_security_token.json') }
|
@@ -24,13 +23,13 @@ describe AllscriptsUnityClient::JSONClientDriver do
|
|
24
23
|
end
|
25
24
|
|
26
25
|
let(:json_hash) do
|
27
|
-
|
26
|
+
MultiJSON.dump(hash)
|
28
27
|
end
|
29
28
|
|
30
29
|
describe '#initialize' do
|
31
30
|
context 'when given proxy' do
|
32
31
|
it 'passes configuration to connection' do
|
33
|
-
expect(build(:json_client_driver, proxy: url).connection.proxy.
|
32
|
+
expect(build(:json_client_driver, proxy: url).connection.proxy.to_s).to eq(url)
|
34
33
|
end
|
35
34
|
end
|
36
35
|
end
|
@@ -40,21 +39,29 @@ describe AllscriptsUnityClient::JSONClientDriver do
|
|
40
39
|
end
|
41
40
|
|
42
41
|
describe '#magic' do
|
43
|
-
before
|
44
|
-
stub_request(:post,
|
42
|
+
before do
|
43
|
+
stub_request(:post, "http://www.example.com/Unity/UnityService.svc/json/MagicJson").
|
44
|
+
to_return(status: 200, body: get_server_info, headers: {})
|
45
|
+
|
45
46
|
allow(subject).to receive(:start_timer)
|
46
47
|
allow(subject).to receive(:end_timer)
|
47
48
|
allow(subject).to receive(:log_magic)
|
48
|
-
|
49
|
+
end
|
49
50
|
|
50
51
|
it 'should POST to /Unity/UnityService.svc/json/MagicJson' do
|
51
52
|
subject.magic
|
52
|
-
expect(WebMock).to have_requested(:post, 'http://www.example.com/Unity/UnityService.svc/json/MagicJson').
|
53
|
+
expect(WebMock).to have_requested(:post, 'http://www.example.com/Unity/UnityService.svc/json/MagicJson').
|
54
|
+
with(body: /\{"Action":(null|"[^"]*"),"AppUserID":(null|"[^"]*"),"Appname":(null|"[^"]*"),"PatientID":(null|"[^"]*"),"Token":(null|"[^"]*"),"Parameter1":(null|"[^"]*"),"Parameter2":(null|"[^"]*"),"Parameter3":(null|"[^"]*"),"Parameter4":(null|"[^"]*"),"Parameter5":(null|"[^"]*"),"Parameter6":(null|"[^"]*"),"Data":(null|"[^"]*")\}/,
|
55
|
+
headers: {'Content-Type' => 'application/json'}
|
56
|
+
)
|
53
57
|
end
|
54
58
|
|
55
59
|
it 'should serialize DateTime to iso8601 when given' do
|
56
60
|
subject.magic(parameter1: DateTime.now)
|
57
|
-
expect(WebMock).to have_requested(:post, 'http://www.example.com/Unity/UnityService.svc/json/MagicJson').
|
61
|
+
expect(WebMock).to have_requested(:post, 'http://www.example.com/Unity/UnityService.svc/json/MagicJson').
|
62
|
+
with(body: /\{"Action":(null|"[^"]*"),"AppUserID":(null|"[^"]*"),"Appname":(null|"[^"]*"),"PatientID":(null|"[^"]*"),"Token":(null|"[^"]*"),"Parameter1":"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(-|\+)\d{2}:\d{2}","Parameter2":(null|"[^"]*"),"Parameter3":(null|"[^"]*"),"Parameter4":(null|"[^"]*"),"Parameter5":(null|"[^"]*"),"Parameter6":(null|"[^"]*"),"Data":(null|"[^"]*")\}/,
|
63
|
+
headers: { 'Content-Type' => 'application/json' }
|
64
|
+
)
|
58
65
|
end
|
59
66
|
|
60
67
|
it 'should call start_timer' do
|
@@ -144,109 +151,4 @@ describe AllscriptsUnityClient::JSONClientDriver do
|
|
144
151
|
it { expect { subject.send(:raise_if_response_error, error_string) }.to raise_error(AllscriptsUnityClient::APIError) }
|
145
152
|
end
|
146
153
|
end
|
147
|
-
|
148
|
-
describe '#build_faraday_options' do
|
149
|
-
context 'when given options with ca_file' do
|
150
|
-
it 'sets ca_file' do
|
151
|
-
client_driver = build(:json_client_driver, ca_file: 'test_file')
|
152
|
-
expect(client_driver.send(:build_faraday_options)[:ssl][:ca_file]).to eq('test_file')
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
context 'when given options with ca_path' do
|
157
|
-
it 'sets ca_path' do
|
158
|
-
client_driver = build(:json_client_driver, ca_path: 'test_path')
|
159
|
-
expect(client_driver.send(:build_faraday_options)[:ssl][:ca_path]).to eq('test_path')
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context 'when given options with nil ca_file and ca_path' do
|
164
|
-
it 'calls JSONClientDriver.find_ca_file' do
|
165
|
-
allow(AllscriptsUnityClient::JSONClientDriver).to receive(:find_ca_file).and_return('/test/file')
|
166
|
-
expect(subject.send(:build_faraday_options)[:ssl][:ca_file]).to eq('/test/file')
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
context 'when given options with nil ca_file, ca_path, and JSONClientDriver.find_ca_file returns nil' do
|
171
|
-
it 'calls JSONClientDriver.find_ca_file' do
|
172
|
-
allow(AllscriptsUnityClient::JSONClientDriver).to receive(:find_ca_file).and_return(nil)
|
173
|
-
allow(AllscriptsUnityClient::JSONClientDriver).to receive(:find_ca_path).and_return('/test/path')
|
174
|
-
expect(subject.send(:build_faraday_options)[:ssl][:ca_path]).to eq('/test/path')
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
describe '.find_ca_path' do
|
180
|
-
context 'when Ubuntu certs path is found' do
|
181
|
-
it 'returns the Ubuntu certs path' do
|
182
|
-
allow(File).to receive(:directory?).with('/usr/lib/ssl/certs').and_return(true)
|
183
|
-
expect(AllscriptsUnityClient::JSONClientDriver.send(:find_ca_path)).to eq('/usr/lib/ssl/certs')
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
context 'when no certificate path is found' do
|
188
|
-
it 'returns nil' do
|
189
|
-
allow(File).to receive(:directory?).with('/usr/lib/ssl/certs').and_return(false)
|
190
|
-
expect(AllscriptsUnityClient::JSONClientDriver.send(:find_ca_path)).to be_nil
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
describe '.find_ca_file' do
|
196
|
-
context 'when OS X ca-bundle.crt found' do
|
197
|
-
it 'returns the ca-bundle.crt' do
|
198
|
-
allow(File).to receive(:exists?).with('/opt/boxen/homebrew/opt/curl-ca-bundle/share/ca-bundle.crt').and_return(true)
|
199
|
-
expect(AllscriptsUnityClient::JSONClientDriver.send(:find_ca_file)).to eq('/opt/boxen/homebrew/opt/curl-ca-bundle/share/ca-bundle.crt')
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
context 'when OS X curl-ca-bundle.crt found' do
|
204
|
-
it 'returns the curl-ca-bundle.crt' do
|
205
|
-
allow(File).to receive(:exists?).with('/opt/boxen/homebrew/opt/curl-ca-bundle/share/ca-bundle.crt').and_return(false)
|
206
|
-
allow(File).to receive(:exists?).with('/opt/local/share/curl/curl-ca-bundle.crt').and_return(true)
|
207
|
-
expect(AllscriptsUnityClient::JSONClientDriver.send(:find_ca_file)).to eq('/opt/local/share/curl/curl-ca-bundle.crt')
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
context 'when CentOS ca-certificates.crt found' do
|
212
|
-
it 'returns the curl-ca-bundle.crt' do
|
213
|
-
allow(File).to receive(:exists?).with('/opt/boxen/homebrew/opt/curl-ca-bundle/share/ca-bundle.crt').and_return(false)
|
214
|
-
allow(File).to receive(:exists?).with('/opt/local/share/curl/curl-ca-bundle.crt').and_return(false)
|
215
|
-
allow(File).to receive(:exists?).with('/usr/lib/ssl/certs/ca-certificates.crt').and_return(true)
|
216
|
-
expect(AllscriptsUnityClient::JSONClientDriver.send(:find_ca_file)).to eq('/usr/lib/ssl/certs/ca-certificates.crt')
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
context 'when no certificate file is found' do
|
221
|
-
it 'returns nil' do
|
222
|
-
allow(File).to receive(:exists?).with('/opt/boxen/homebrew/opt/curl-ca-bundle/share/ca-bundle.crt').and_return(false)
|
223
|
-
allow(File).to receive(:exists?).with('/opt/local/share/curl/curl-ca-bundle.crt').and_return(false)
|
224
|
-
allow(File).to receive(:exists?).with('/usr/lib/ssl/certs/ca-certificates.crt').and_return(false)
|
225
|
-
expect(AllscriptsUnityClient::JSONClientDriver.send(:find_ca_file)).to be_nil
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
describe '.set_request_timeout' do
|
231
|
-
context 'when given options with timeout set' do
|
232
|
-
it 'sets timeout and open_timeout on the request' do
|
233
|
-
client_driver = build(:json_client_driver, timeout: 10)
|
234
|
-
options = {}
|
235
|
-
request = double('request', options: options)
|
236
|
-
client_driver.send(:set_request_timeout, request)
|
237
|
-
expect(options[:timeout]).to eq(10)
|
238
|
-
expect(options[:open_timeout]).to eq(10)
|
239
|
-
end
|
240
|
-
end
|
241
|
-
|
242
|
-
context 'when given options without timeout set' do
|
243
|
-
it 'sets timeout and open_timeout to 90 on the request' do
|
244
|
-
options = {}
|
245
|
-
request = double('request', options: options)
|
246
|
-
subject.send(:set_request_timeout, request)
|
247
|
-
expect(options[:timeout]).to eq(90)
|
248
|
-
expect(options[:open_timeout]).to eq(90)
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
154
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,6 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'simplecov'
|
3
3
|
|
4
|
-
# Setup coveralls only if running inside Travis-CI
|
5
|
-
if ENV['TRAVIS']
|
6
|
-
require 'coveralls'
|
7
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
8
|
-
SimpleCov::Formatter::HTMLFormatter,
|
9
|
-
Coveralls::SimpleCov::Formatter
|
10
|
-
]
|
11
|
-
end
|
12
|
-
|
13
4
|
# Configure coverage stats.
|
14
5
|
SimpleCov.start do
|
15
6
|
ignored_files = %w(version.rb allscripts_unity_client.gemspec Gemfile Rakefile)
|
@@ -26,7 +17,6 @@ $:.unshift lib unless $:.include?(lib)
|
|
26
17
|
require 'allscripts_unity_client'
|
27
18
|
require 'rspec'
|
28
19
|
require 'webmock/rspec'
|
29
|
-
require 'savon/mock/spec_helper'
|
30
20
|
require 'securerandom'
|
31
21
|
require 'faker'
|
32
22
|
require 'factory_girl'
|
@@ -92,4 +82,4 @@ RSpec.configure do |config|
|
|
92
82
|
# a real object. This is generally recommended.
|
93
83
|
# mocks.verify_partial_doubles = true
|
94
84
|
end
|
95
|
-
end
|
85
|
+
end
|
@@ -1,18 +1,4 @@
|
|
1
1
|
shared_examples 'a client driver' do
|
2
|
-
describe '#initialize' do
|
3
|
-
context 'when options.new_relic is true' do
|
4
|
-
it 'enables NewRelic tracing' do
|
5
|
-
allow(AllscriptsUnityClient::NewRelicSupport).to receive(:enable_method_tracer)
|
6
|
-
allow(described_class).to receive(:add_method_tracer)
|
7
|
-
new_relic_client_driver
|
8
|
-
expect(AllscriptsUnityClient::NewRelicSupport).to have_received(:enable_method_tracer).with(new_relic_client_driver)
|
9
|
-
expect(described_class).to have_received(:add_method_tracer).with(:magic)
|
10
|
-
expect(described_class).to have_received(:add_method_tracer).with(:get_security_token!)
|
11
|
-
expect(described_class).to have_received(:add_method_tracer).with(:retire_security_token!)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
2
|
describe '#security_token?' do
|
17
3
|
context 'when @security_token is nil' do
|
18
4
|
it do
|
@@ -129,4 +115,4 @@ shared_examples 'a client driver' do
|
|
129
115
|
expect(subject.instance_variable_get('@timer')).to eq(subject.instance_variable_get('@end_time') - subject.instance_variable_get('@start_time'))
|
130
116
|
end
|
131
117
|
end
|
132
|
-
end
|
118
|
+
end
|
metadata
CHANGED
@@ -1,72 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: allscripts_unity_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- Neil Goodman
|
7
|
+
- Lucian Cesca
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2015-
|
11
|
+
date: 2015-03-18 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
14
|
+
name: httpclient
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
17
|
- - "~>"
|
19
18
|
- !ruby/object:Gem::Version
|
20
|
-
version: 2.6
|
19
|
+
version: '2.6'
|
21
20
|
type: :runtime
|
22
21
|
prerelease: false
|
23
22
|
version_requirements: !ruby/object:Gem::Requirement
|
24
23
|
requirements:
|
25
24
|
- - "~>"
|
26
25
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2.6
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: faraday
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - "~>"
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 0.9.0
|
35
|
-
type: :runtime
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - "~>"
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: 0.9.0
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: em-http-request
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - "~>"
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 1.1.2
|
49
|
-
type: :runtime
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - "~>"
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: 1.1.2
|
26
|
+
version: '2.6'
|
56
27
|
- !ruby/object:Gem::Dependency
|
57
28
|
name: activesupport
|
58
29
|
requirement: !ruby/object:Gem::Requirement
|
59
30
|
requirements:
|
60
31
|
- - ">="
|
61
32
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
33
|
+
version: '3'
|
63
34
|
type: :runtime
|
64
35
|
prerelease: false
|
65
36
|
version_requirements: !ruby/object:Gem::Requirement
|
66
37
|
requirements:
|
67
38
|
- - ">="
|
68
39
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
40
|
+
version: '3'
|
70
41
|
- !ruby/object:Gem::Dependency
|
71
42
|
name: nokogiri
|
72
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,19 +87,19 @@ dependencies:
|
|
116
87
|
- !ruby/object:Gem::Version
|
117
88
|
version: 1.1.0
|
118
89
|
- !ruby/object:Gem::Dependency
|
119
|
-
name:
|
90
|
+
name: multi_json
|
120
91
|
requirement: !ruby/object:Gem::Requirement
|
121
92
|
requirements:
|
122
93
|
- - "~>"
|
123
94
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
95
|
+
version: '1.0'
|
125
96
|
type: :runtime
|
126
97
|
prerelease: false
|
127
98
|
version_requirements: !ruby/object:Gem::Requirement
|
128
99
|
requirements:
|
129
100
|
- - "~>"
|
130
101
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
102
|
+
version: '1.0'
|
132
103
|
- !ruby/object:Gem::Dependency
|
133
104
|
name: rubyntlm
|
134
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -199,20 +170,6 @@ dependencies:
|
|
199
170
|
- - "~>"
|
200
171
|
- !ruby/object:Gem::Version
|
201
172
|
version: 3.0.0
|
202
|
-
- !ruby/object:Gem::Dependency
|
203
|
-
name: simplecov
|
204
|
-
requirement: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - "~>"
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: 0.8.2
|
209
|
-
type: :development
|
210
|
-
prerelease: false
|
211
|
-
version_requirements: !ruby/object:Gem::Requirement
|
212
|
-
requirements:
|
213
|
-
- - "~>"
|
214
|
-
- !ruby/object:Gem::Version
|
215
|
-
version: 0.8.2
|
216
173
|
- !ruby/object:Gem::Dependency
|
217
174
|
name: webmock
|
218
175
|
requirement: !ruby/object:Gem::Requirement
|
@@ -228,24 +185,23 @@ dependencies:
|
|
228
185
|
- !ruby/object:Gem::Version
|
229
186
|
version: 1.18.0
|
230
187
|
- !ruby/object:Gem::Dependency
|
231
|
-
name:
|
188
|
+
name: simplecov
|
232
189
|
requirement: !ruby/object:Gem::Requirement
|
233
190
|
requirements:
|
234
191
|
- - "~>"
|
235
192
|
- !ruby/object:Gem::Version
|
236
|
-
version: 0.7.
|
193
|
+
version: 0.7.1
|
237
194
|
type: :development
|
238
195
|
prerelease: false
|
239
196
|
version_requirements: !ruby/object:Gem::Requirement
|
240
197
|
requirements:
|
241
198
|
- - "~>"
|
242
199
|
- !ruby/object:Gem::Version
|
243
|
-
version: 0.7.
|
244
|
-
description: Provides a simple interface to the Allscripts Unity API using JSON
|
245
|
-
|
200
|
+
version: 0.7.1
|
201
|
+
description: Provides a simple interface to the Allscripts Unity API using JSON. Developed
|
202
|
+
at healthfinch http://healthfinch.com
|
246
203
|
email:
|
247
|
-
-
|
248
|
-
- neil@healthfinch.com
|
204
|
+
- lucian@healthfinch.com
|
249
205
|
executables: []
|
250
206
|
extensions: []
|
251
207
|
extra_rdoc_files: []
|
@@ -265,8 +221,6 @@ files:
|
|
265
221
|
- lib/allscripts_unity_client/json_client_driver.rb
|
266
222
|
- lib/allscripts_unity_client/json_unity_request.rb
|
267
223
|
- lib/allscripts_unity_client/json_unity_response.rb
|
268
|
-
- lib/allscripts_unity_client/new_relic_support.rb
|
269
|
-
- lib/allscripts_unity_client/soap_client_driver.rb
|
270
224
|
- lib/allscripts_unity_client/unity_request.rb
|
271
225
|
- lib/allscripts_unity_client/unity_response.rb
|
272
226
|
- lib/allscripts_unity_client/utilities.rb
|
@@ -305,12 +259,9 @@ files:
|
|
305
259
|
- spec/json_client_driver_spec.rb
|
306
260
|
- spec/json_unity_request_spec.rb
|
307
261
|
- spec/json_unity_response_spec.rb
|
308
|
-
- spec/new_relic_support_spec.rb
|
309
|
-
- spec/soap_client_driver_spec.rb
|
310
262
|
- spec/spec_helper.rb
|
311
263
|
- spec/support/factory_girl.rb
|
312
264
|
- spec/support/fixture_loader.rb
|
313
|
-
- spec/support/new_relic.rb
|
314
265
|
- spec/support/shared_examples_for_client_driver.rb
|
315
266
|
- spec/support/shared_examples_for_unity_request.rb
|
316
267
|
- spec/support/shared_examples_for_unity_response.rb
|
@@ -329,7 +280,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
329
280
|
requirements:
|
330
281
|
- - ">"
|
331
282
|
- !ruby/object:Gem::Version
|
332
|
-
version:
|
283
|
+
version: 2.0.0
|
333
284
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
334
285
|
requirements:
|
335
286
|
- - ">="
|
@@ -337,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
337
288
|
version: '0'
|
338
289
|
requirements: []
|
339
290
|
rubyforge_project:
|
340
|
-
rubygems_version: 2.
|
291
|
+
rubygems_version: 2.4.3
|
341
292
|
signing_key:
|
342
293
|
specification_version: 4
|
343
294
|
summary: Allscripts Unity API client
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module AllscriptsUnityClient
|
2
|
-
|
3
|
-
# A mixin to provide support for New Relic instrumentation.
|
4
|
-
module NewRelicSupport
|
5
|
-
|
6
|
-
# Mixin NewRelic::Agent::MethodTracer for a given object.
|
7
|
-
#
|
8
|
-
# instance:: The object to use as the target for the mixin.
|
9
|
-
def self.enable_method_tracer(instance)
|
10
|
-
class << instance
|
11
|
-
if !respond_to?(:trace_execution_scoped) && !respond_to?(:add_method_tracer)
|
12
|
-
extend ::NewRelic::Agent::MethodTracer
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
# If a given class supports New Relic trace_execution_scoped, then
|
18
|
-
# run the given block using that method.
|
19
|
-
#
|
20
|
-
# klass:: The target class.
|
21
|
-
# scope:: A New Relic scope string.
|
22
|
-
def self.trace_execution_scoped_if_available(klass, scope)
|
23
|
-
if klass.respond_to?(:trace_execution_scoped)
|
24
|
-
klass.trace_execution_scoped(scope, &Proc.new)
|
25
|
-
else
|
26
|
-
yield if block_given?
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,145 +0,0 @@
|
|
1
|
-
require 'savon'
|
2
|
-
|
3
|
-
module AllscriptsUnityClient
|
4
|
-
|
5
|
-
# A ClientDriver that supports Unity's SOAP endpoints.
|
6
|
-
class SOAPClientDriver < ClientDriver
|
7
|
-
attr_accessor :savon_client
|
8
|
-
|
9
|
-
UNITY_SOAP_ENDPOINT = '/Unity/UnityService.svc/unityservice'
|
10
|
-
UNITY_ENDPOINT_NAMESPACE = 'http://www.allscripts.com/Unity/IUnityService'
|
11
|
-
|
12
|
-
# Constructor.
|
13
|
-
#
|
14
|
-
# options:: See ClientOptions.
|
15
|
-
def initialize(options)
|
16
|
-
super
|
17
|
-
|
18
|
-
client_proxy = @options.proxy
|
19
|
-
base_unity_url = "#{@options.base_unity_url}#{UNITY_SOAP_ENDPOINT}"
|
20
|
-
|
21
|
-
@savon_client = Savon.client do
|
22
|
-
# Removes the wsdl: namespace from body elements in the SOAP
|
23
|
-
# request. Unity doesn't recognize elements otherwise.
|
24
|
-
namespace_identifier nil
|
25
|
-
|
26
|
-
# Manually registers SOAP endpoint since Unity WSDL is not very
|
27
|
-
# good.
|
28
|
-
endpoint base_unity_url
|
29
|
-
|
30
|
-
# Manually register SOAP namespace. This URL isn't live, but the
|
31
|
-
# internal SOAP endpoints expect it.
|
32
|
-
namespace 'http://www.allscripts.com/Unity'
|
33
|
-
|
34
|
-
# Register proxy with Savon if one was given.
|
35
|
-
unless client_proxy.nil?
|
36
|
-
proxy client_proxy
|
37
|
-
end
|
38
|
-
|
39
|
-
# Unity expects the SOAP envelop to be namespaced with soap:
|
40
|
-
env_namespace :soap
|
41
|
-
|
42
|
-
# Unity uses Microsoft style CamelCase for keys. Only really useful when using
|
43
|
-
# symbol keyed hashes.
|
44
|
-
convert_request_keys_to :camelcase
|
45
|
-
|
46
|
-
# Enable gzip on HTTP responses. Unity does not currently support this
|
47
|
-
# as of Born On 10/7/2013, but it doesn't hurt to future-proof. If gzip
|
48
|
-
# is ever enabled, this library will get a speed bump for free.
|
49
|
-
headers({ 'Accept-Encoding' => 'gzip,deflate'})
|
50
|
-
|
51
|
-
# Disable Savon logs
|
52
|
-
log false
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
# Returns :soap.
|
57
|
-
def client_type
|
58
|
-
:soap
|
59
|
-
end
|
60
|
-
|
61
|
-
# See Client#magic.
|
62
|
-
def magic(parameters = {})
|
63
|
-
request_data = UnityRequest.new(parameters, @options.timezone, @options.appname, @security_token)
|
64
|
-
call_data = {
|
65
|
-
message: request_data.to_hash,
|
66
|
-
soap_action: "#{UNITY_ENDPOINT_NAMESPACE}/Magic"
|
67
|
-
}
|
68
|
-
|
69
|
-
response = nil
|
70
|
-
begin
|
71
|
-
start_timer
|
72
|
-
NewRelicSupport.trace_execution_scoped_if_available(self.class, ["Custom/UnitySOAP/#{parameters[:action]}"]) do
|
73
|
-
response = @savon_client.call('Magic', call_data)
|
74
|
-
end_timer
|
75
|
-
end
|
76
|
-
rescue Savon::SOAPFault => e
|
77
|
-
raise APIError, e.message
|
78
|
-
end
|
79
|
-
|
80
|
-
log_magic(request_data)
|
81
|
-
|
82
|
-
response = UnityResponse.new(response.body, @options.timezone)
|
83
|
-
response.to_hash
|
84
|
-
end
|
85
|
-
|
86
|
-
# See Client#get_security_token!.
|
87
|
-
def get_security_token!(parameters = {})
|
88
|
-
username = parameters[:username] || @options.username
|
89
|
-
password = parameters[:password] || @options.password
|
90
|
-
appname = parameters[:appname] || @options.appname
|
91
|
-
|
92
|
-
call_data = {
|
93
|
-
message: {
|
94
|
-
'Username' => username,
|
95
|
-
'Password' => password,
|
96
|
-
'Appname' => appname
|
97
|
-
},
|
98
|
-
soap_action: "#{UNITY_ENDPOINT_NAMESPACE}/GetSecurityToken"
|
99
|
-
}
|
100
|
-
|
101
|
-
begin
|
102
|
-
start_timer
|
103
|
-
response = nil
|
104
|
-
NewRelicSupport.trace_execution_scoped_if_available(self.class, ["Custom/UnitySOAP/GetToken"]) do
|
105
|
-
response = @savon_client.call('GetSecurityToken', call_data)
|
106
|
-
end_timer
|
107
|
-
end
|
108
|
-
rescue Savon::SOAPFault => e
|
109
|
-
raise APIError, e.message
|
110
|
-
end
|
111
|
-
|
112
|
-
log_get_security_token
|
113
|
-
|
114
|
-
@security_token = response.body[:get_security_token_response][:get_security_token_result]
|
115
|
-
end
|
116
|
-
|
117
|
-
# See Client#retire_security_token!.
|
118
|
-
def retire_security_token!(parameters = {})
|
119
|
-
token = parameters[:token] || @security_token
|
120
|
-
appname = parameters[:appname] || @options.appname
|
121
|
-
|
122
|
-
call_data = {
|
123
|
-
message: {
|
124
|
-
'Token' => token,
|
125
|
-
'Appname' => appname
|
126
|
-
},
|
127
|
-
soap_action: "#{UNITY_ENDPOINT_NAMESPACE}/RetireSecurityToken"
|
128
|
-
}
|
129
|
-
|
130
|
-
begin
|
131
|
-
start_timer
|
132
|
-
NewRelicSupport.trace_execution_scoped_if_available(self.class, ["Custom/UnitySOAP/RetireSecurityToken"]) do
|
133
|
-
@savon_client.call('RetireSecurityToken', call_data)
|
134
|
-
end_timer
|
135
|
-
end
|
136
|
-
rescue Savon::SOAPFault => e
|
137
|
-
raise APIError, e.message
|
138
|
-
end
|
139
|
-
|
140
|
-
log_retire_security_token
|
141
|
-
|
142
|
-
@security_token = nil
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe AllscriptsUnityClient::NewRelicSupport do
|
4
|
-
subject { described_class }
|
5
|
-
let(:scope) { ['scope'] }
|
6
|
-
let(:block) { lambda {} }
|
7
|
-
|
8
|
-
before :all do
|
9
|
-
# Mock a test class for NewRelic mixin tests.
|
10
|
-
class NewRelicSupportTest
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '.enable_method_tracer' do
|
15
|
-
context 'when given an object that does not have the NewRelic::Agent::MethodTracer module mixed in' do
|
16
|
-
it 'mixes in the NewRelic::Agent::MethodTracer module' do
|
17
|
-
allow(NewRelicSupportTest).to receive(:extend)
|
18
|
-
subject.enable_method_tracer(NewRelicSupportTest.new)
|
19
|
-
expect(NewRelicSupportTest).to have_received(:extend).with(::NewRelic::Agent::MethodTracer)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context 'when given an object that does have the NewRelic::Agent::MethodTracer module mixed in' do
|
24
|
-
it 'does not mix in the NewRelic::Agent::MethodTracer module' do
|
25
|
-
allow(NewRelicSupportTest).to receive(:extend)
|
26
|
-
allow(NewRelicSupportTest).to receive(:trace_execution_scoped)
|
27
|
-
allow(NewRelicSupportTest).to receive(:add_method_tracer)
|
28
|
-
subject.enable_method_tracer(NewRelicSupportTest.new)
|
29
|
-
expect(NewRelicSupportTest).not_to have_received(:extend).with(::NewRelic::Agent::MethodTracer)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe '.trace_execution_scoped_if_available' do
|
35
|
-
context 'when a class does not have trace_execution_scoped and is given block' do
|
36
|
-
it 'will yield to the block' do
|
37
|
-
expect { |b| subject.trace_execution_scoped_if_available(NewRelicSupportTest, scope, &b) }.to yield_control
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context 'when a class has trace_execution_scoped and is given a block' do
|
42
|
-
it 'will pass the block to trace_execution_scoped' do
|
43
|
-
allow(NewRelicSupportTest).to receive(:trace_execution_scoped)
|
44
|
-
subject.trace_execution_scoped_if_available(NewRelicSupportTest, scope, &block)
|
45
|
-
expect(NewRelicSupportTest).to have_received(:trace_execution_scoped).with(scope)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|