allscripts_unity_client 2.0.5 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +20 -0
  3. data/allscripts_unity_client.gemspec +2 -1
  4. data/lib/allscripts_unity_client.rb +1 -0
  5. data/lib/allscripts_unity_client/client.rb +27 -20
  6. data/lib/allscripts_unity_client/client_driver.rb +9 -0
  7. data/lib/allscripts_unity_client/client_options.rb +6 -1
  8. data/lib/allscripts_unity_client/json_client_driver.rb +13 -10
  9. data/lib/allscripts_unity_client/json_unity_response.rb +0 -2
  10. data/lib/allscripts_unity_client/new_relic_support.rb +19 -0
  11. data/lib/allscripts_unity_client/soap_client_driver.rb +5 -2
  12. data/lib/allscripts_unity_client/version.rb +1 -1
  13. data/spec/allscripts_unity_client_spec.rb +2 -2
  14. data/spec/client_driver_spec.rb +2 -1
  15. data/spec/client_options_spec.rb +17 -1
  16. data/spec/client_spec.rb +1 -1
  17. data/spec/factories/client_driver_factory.rb +4 -0
  18. data/spec/factories/client_options.rb +1 -0
  19. data/spec/factories/unity_request_factory.rb +2 -0
  20. data/spec/factories/unity_response_factory.rb +2 -0
  21. data/spec/json_client_driver_spec.rb +8 -2
  22. data/spec/json_unity_request_spec.rb +1 -1
  23. data/spec/json_unity_response_spec.rb +1 -1
  24. data/spec/new_relic_support_spec.rb +49 -0
  25. data/spec/soap_client_driver_spec.rb +2 -1
  26. data/spec/support/new_relic.rb +16 -0
  27. data/spec/support/shared_examples_for_client_driver.rb +12 -0
  28. data/spec/timezone_spec.rb +1 -1
  29. data/spec/unity_request_spec.rb +1 -1
  30. data/spec/unity_response_spec.rb +1 -1
  31. data/spec/utilities_spec.rb +2 -2
  32. metadata +21 -8
  33. data/spec/factories/json_client_driver_factory.rb +0 -3
  34. data/spec/factories/json_unity_request_factory.rb +0 -3
  35. data/spec/factories/json_unity_response_factory.rb +0 -3
  36. data/spec/factories/soap_client_driver_factory.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68c98b1b9d819e56c4c9fde2ad52859c706127b3
4
- data.tar.gz: 6ed674a745e5b8a99ee184b15ea7156df79ee2e8
3
+ metadata.gz: 88cc45a2484b53948ae52a7175a9c633b8cf8108
4
+ data.tar.gz: c792e3083d2727be7872e47e932348699ceb416f
5
5
  SHA512:
6
- metadata.gz: 53d768648a047d2460d07f0b9c206248fdbe1cc28397b8a4f73ac72dbd058e23dd406c5a58394d515c741094424e08a5a2d39f59722c1fde5c9dcd50c8127dc3
7
- data.tar.gz: 94b884fb135786a92c0b419a47f35983696e02e928d4aead6600fbfb6888d383f17cc982546c2a45c6cc4c99e15fe00f3a5c3ed7bca81655a06080b963cb2b23
6
+ metadata.gz: 20d968b2549340bd6fc496e95bab512970db94bae8f3637d0609c0859fdf1b33f640164eee30e77da9c9f3e223c0c7de428565285a6f9d5245900e7b8e56be61
7
+ data.tar.gz: 01714c07e5f1568d03b15e27f653d7c4efa8b3571b053bb5f9ebdb2b6473e651ca9116534b6a319e1106e5035ee66635fcc7d3cc6efe3ad41e1c7eec464d2090
data/README.md CHANGED
@@ -244,6 +244,26 @@ unity_client = AllscriptsUnityClient.create({
244
244
  This gem uses the [american_date](http://rubygems.org/gems/american_date) gem to force `Date.parse` to
245
245
  accept USA locale dates by default. There are currently no plans to support other locales. Pull requests welcome.
246
246
 
247
+ ### New Relic support
248
+
249
+ New Relic is supported for tracing Unity HTTP requests and the overall time processing the reqeusts takes. To enable
250
+ New Relic, simply require the gem in your project and enable it on the client:
251
+
252
+ ```ruby
253
+ require 'newrelic_rpm'
254
+ NewRelic::Agent.manual_start
255
+
256
+ unity_client = AllscriptsUnityClient.create({
257
+ base_unity_url: "http://unity.base.url",
258
+ appname: "appname",
259
+ username: "username",
260
+ password: "password",
261
+ new_relic: true
262
+ })
263
+ ```
264
+
265
+ For more information on the New Relic gem, go here: (https://github.com/newrelic/rpm)
266
+
247
267
  ## Examples
248
268
 
249
269
  ### GetServerInfo SOAP
@@ -29,11 +29,12 @@ Gem::Specification.new do |gem|
29
29
  gem.add_runtime_dependency 'nokogiri', '< 1.6', '>= 1.4.0'
30
30
  gem.add_runtime_dependency 'nori', '~> 2.3.0'
31
31
  gem.add_runtime_dependency 'american_date', '~> 1.1.0'
32
+ gem.add_runtime_dependency 'oj', '~> 2.9.8'
32
33
 
33
34
  gem.add_development_dependency 'factory_girl', '~> 4.4.0'
34
35
  gem.add_development_dependency 'rake', '~> 10.3.1'
35
36
  gem.add_development_dependency 'faker', '~> 1.3.0'
36
- gem.add_development_dependency 'rspec', '~> 3.0.0.beta2'
37
+ gem.add_development_dependency 'rspec', '~> 3.0.0'
37
38
  gem.add_development_dependency 'simplecov', '~> 0.8.2'
38
39
  gem.add_development_dependency 'webmock', '~> 1.17.4'
39
40
  gem.add_development_dependency 'coveralls', '~> 0.7.0'
@@ -9,6 +9,7 @@ require 'allscripts_unity_client/client_driver'
9
9
  require 'allscripts_unity_client/client_options'
10
10
  require 'allscripts_unity_client/soap_client_driver'
11
11
  require 'allscripts_unity_client/json_client_driver'
12
+ require 'allscripts_unity_client/new_relic_support'
12
13
 
13
14
  module AllscriptsUnityClient
14
15
  class APIError < RuntimeError
@@ -501,26 +501,33 @@ module AllscriptsUnityClient
501
501
  # Generate XML structure for rxxml
502
502
  builder = Nokogiri::XML::Builder.new do |xml|
503
503
  xml.saverx {
504
- xml.field('name' => 'transid', 'value' => rxxml[:transid]) unless rxxml[:transid].nil?
505
- xml.field('name' => 'PharmID', 'value' => rxxml[:pharmid]) unless rxxml[:pharmid].nil?
506
- xml.field('name' => 'DDI', 'value' => rxxml[:ddi]) unless rxxml[:ddi].nil?
507
- xml.field('name' => 'GPPCCode', 'value' => rxxml[:gppccode]) unless rxxml[:gppccode].nil?
508
- xml.field('name' => 'GPPCText', 'value' => rxxml[:gppctext]) unless rxxml[:gppctext].nil?
509
- xml.field('name' => 'GPPCCustom', 'value' => rxxml[:gppccustom]) unless rxxml[:gppccustom].nil?
510
- xml.field('name' => 'Sig', 'value' => rxxml[:sig]) unless rxxml[:sig].nil?
511
- xml.field('name' => 'QuanPresc', 'value' => rxxml[:quanpresc]) unless rxxml[:quanpresc].nil?
512
- xml.field('name' => 'Refills', 'value' => rxxml[:refills]) unless rxxml[:refills].nil?
513
- xml.field('name' => 'DAW', 'value' => rxxml[:daw]) unless rxxml[:daw].nil?
514
- xml.field('name' => 'DaysSupply', 'value' => rxxml[:dayssupply]) unless rxxml[:dayssupply].nil?
515
- xml.field('name' => 'startdate', 'value' => utc_to_local(Date.parse(rxxml[:startdate].to_s))) unless rxxml[:startdate].nil?
516
- xml.field('name' => 'historicalflag', 'value' => rxxml[:historicalflag]) unless rxxml[:historicalflag].nil?
517
- xml.field('name' => 'rxaction', 'value' => rxxml[:rxaction]) unless rxxml[:rxaction].nil?
518
- xml.field('name' => 'delivery', 'value' => rxxml[:delivery]) unless rxxml[:delivery].nil?
519
- xml.field('name' => 'ignorepharmzero', 'value' => rxxml[:ignorepharmzero]) unless rxxml[:ignorepharmzero].nil?
520
- xml.field('name' => 'orderedbyid', 'value' => rxxml[:orderedbyid]) unless rxxml[:orderedbyid].nil?
521
- xml.field('name' => 'newqty', 'value' => rxxml[:newqty]) unless rxxml[:newqty].nil?
522
- xml.field('name' => 'newrefills', 'value' => rxxml[:newrefills]) unless rxxml[:newrefills].nil?
523
- xml.field('name' => 'comments', 'value' => rxxml[:comments]) unless rxxml[:comments].nil?
504
+ xml.field('name' => 'transid', 'value' => rxxml[:transid]) unless rxxml[:transid]
505
+ xml.field('name' => 'PharmID', 'value' => rxxml[:pharmid]) unless rxxml[:pharmid]
506
+ xml.field('name' => 'DDI', 'value' => rxxml[:ddi]) unless rxxml[:ddi]
507
+ xml.field('name' => 'GPPCCode', 'value' => rxxml[:gppccode]) unless rxxml[:gppccode]
508
+ xml.field('name' => 'GPPCText', 'value' => rxxml[:gppctext]) unless rxxml[:gppctext]
509
+ xml.field('name' => 'GPPCCustom', 'value' => rxxml[:gppccustom]) unless rxxml[:gppccustom]
510
+ xml.field('name' => 'Sig', 'value' => rxxml[:sig]) unless rxxml[:sig]
511
+ xml.field('name' => 'QuanPresc', 'value' => rxxml[:quanpresc]) unless rxxml[:quanpresc]
512
+ xml.field('name' => 'Refills', 'value' => rxxml[:refills]) unless rxxml[:refills]
513
+ xml.field('name' => 'DAW', 'value' => rxxml[:daw]) unless rxxml[:daw]
514
+ xml.field('name' => 'DaysSupply', 'value' => rxxml[:dayssupply]) unless rxxml[:dayssupply]
515
+ xml.field('name' => 'startdate', 'value' => utc_to_local(Date.parse(rxxml[:startdate].to_s))) unless rxxml[:startdate]
516
+ xml.field('name' => 'historicalflag', 'value' => rxxml[:historicalflag]) unless rxxml[:historicalflag]
517
+ xml.field('name' => 'rxaction', 'value' => rxxml[:rxaction]) unless rxxml[:rxaction]
518
+ xml.field('name' => 'delivery', 'value' => rxxml[:delivery]) unless rxxml[:delivery]
519
+ xml.field('name' => 'ignorepharmzero', 'value' => rxxml[:ignorepharmzero]) unless rxxml[:ignorepharmzero]
520
+ xml.field('name' => 'orderedbyid', 'value' => rxxml[:orderedbyid]) unless rxxml[:orderedbyid]
521
+ xml.field('name' => 'newqty', 'value' => rxxml[:newqty]) unless rxxml[:newqty]
522
+ xml.field('name' => 'newrefills', 'value' => rxxml[:newrefills]) unless rxxml[:newrefills]
523
+ xml.field('name' => 'comments', 'value' => rxxml[:comments]) unless rxxml[:comments]
524
+ xml.field('name' => 'orderstatus', 'value' => rxxml[:order_status]) unless rxxml[:order_status]
525
+
526
+ if rxxml[:problems]
527
+ rxxml[:problems].each do |problem|
528
+ xml.field('name' => 'Problem', 'value' => problem)
529
+ end
530
+ end
524
531
  }
525
532
  end
526
533
 
@@ -8,6 +8,15 @@ module AllscriptsUnityClient
8
8
 
9
9
  def initialize(options)
10
10
  @options = ClientOptions.new(options)
11
+
12
+ # If New Relic support is enabled, setup method tracing
13
+ if @options.new_relic
14
+ NewRelicSupport.enable_method_tracer(self)
15
+
16
+ class << self
17
+ add_method_tracer :magic
18
+ end
19
+ end
11
20
  end
12
21
 
13
22
  def security_token?
@@ -1,6 +1,6 @@
1
1
  module AllscriptsUnityClient
2
2
  class ClientOptions
3
- attr_accessor :proxy, :logger, :ca_file, :ca_path, :timeout
3
+ attr_accessor :proxy, :logger, :ca_file, :ca_path, :timeout, :new_relic
4
4
  attr_reader :base_unity_url, :username, :password, :appname, :timezone
5
5
 
6
6
  def initialize(options = {})
@@ -12,6 +12,7 @@ module AllscriptsUnityClient
12
12
  @ca_file = options[:ca_file]
13
13
  @ca_path = options[:ca_path]
14
14
  @timeout = options[:timeout]
15
+ @new_relic = options[:new_relic]
15
16
 
16
17
  self.timezone = options[:timezone]
17
18
  self.base_unity_url = options[:base_unity_url]
@@ -78,5 +79,9 @@ module AllscriptsUnityClient
78
79
  def timeout?
79
80
  !@timeout.to_s.strip.empty?
80
81
  end
82
+
83
+ def new_relic?
84
+ !@new_relic.nil?
85
+ end
81
86
  end
82
87
  end
@@ -1,4 +1,4 @@
1
- require 'json'
1
+ require 'oj'
2
2
  require 'faraday'
3
3
  require 'em-http-request'
4
4
 
@@ -22,17 +22,20 @@ module AllscriptsUnityClient
22
22
  def magic(parameters = {})
23
23
  request_data = JSONUnityRequest.new(parameters, @options.timezone, @options.appname, @security_token)
24
24
 
25
- response = @connection.post do |request|
26
- request.url "#{UNITY_JSON_ENDPOINT}/MagicJson"
27
- request.headers['Content-Type'] = 'application/json'
28
- request.body = JSON.generate(request_data.to_hash)
29
- set_request_timeout(request)
25
+ response = nil
26
+ NewRelicSupport.trace_execution_scoped_if_available(JSONClientDriver, ["Custom/UnityJSON/#{parameters[:action]}"]) do
27
+ response = @connection.post do |request|
28
+ request.url "#{UNITY_JSON_ENDPOINT}/MagicJson"
29
+ request.headers['Content-Type'] = 'application/json'
30
+ request.body = Oj.dump(request_data.to_hash, mode: :compat)
31
+ set_request_timeout(request)
30
32
 
31
- start_timer
33
+ start_timer
34
+ end
32
35
  end
33
36
  end_timer
34
37
 
35
- response = JSON.parse(response.body)
38
+ response = Oj.load(response.body, mode: :strict)
36
39
 
37
40
  raise_if_response_error(response)
38
41
  log_magic(request_data)
@@ -55,7 +58,7 @@ module AllscriptsUnityClient
55
58
  response = @connection.post do |request|
56
59
  request.url "#{UNITY_JSON_ENDPOINT}/GetToken"
57
60
  request.headers['Content-Type'] = 'application/json'
58
- request.body = JSON.generate(request_data)
61
+ request.body = Oj.dump(request_data, mode: :compat)
59
62
  set_request_timeout(request)
60
63
 
61
64
  start_timer
@@ -80,7 +83,7 @@ module AllscriptsUnityClient
80
83
  response = @connection.post do |request|
81
84
  request.url "#{UNITY_JSON_ENDPOINT}/RetireSecurityToken"
82
85
  request.headers['Content-Type'] = 'application/json'
83
- request.body = JSON.generate(request_data)
86
+ request.body = Oj.dump(request_data, mode: :compat)
84
87
  set_request_timeout(request)
85
88
 
86
89
  start_timer
@@ -1,5 +1,3 @@
1
- require 'json'
2
-
3
1
  module AllscriptsUnityClient
4
2
  class JSONUnityResponse < UnityResponse
5
3
  def to_hash
@@ -0,0 +1,19 @@
1
+ module AllscriptsUnityClient
2
+ module NewRelicSupport
3
+ def self.enable_method_tracer(instance)
4
+ class << instance
5
+ if !respond_to?(:trace_execution_scoped) && !respond_to?(:add_method_tracer)
6
+ extend ::NewRelic::Agent::MethodTracer
7
+ end
8
+ end
9
+ end
10
+
11
+ def self.trace_execution_scoped_if_available(klass, scope)
12
+ if klass.respond_to?(:trace_execution_scoped)
13
+ klass.trace_execution_scoped(scope, &Proc.new)
14
+ else
15
+ yield if block_given?
16
+ end
17
+ end
18
+ end
19
+ end
@@ -59,10 +59,13 @@ module AllscriptsUnityClient
59
59
  soap_action: "#{UNITY_ENDPOINT_NAMESPACE}/Magic"
60
60
  }
61
61
 
62
+ response = nil
62
63
  begin
63
64
  start_timer
64
- response = @savon_client.call('Magic', call_data)
65
- end_timer
65
+ NewRelicSupport.trace_execution_scoped_if_available(SOAPClientDriver, ["Custom/UnitySOAP/#{parameters[:action]}"]) do
66
+ response = @savon_client.call('Magic', call_data)
67
+ end_timer
68
+ end
66
69
  rescue Savon::SOAPFault => e
67
70
  raise APIError, e.message
68
71
  end
@@ -1,3 +1,3 @@
1
1
  module AllscriptsUnityClient
2
- VERSION = '2.0.5'
2
+ VERSION = '2.1.0'
3
3
  end
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'AllscriptsUnityClient' do
3
+ describe AllscriptsUnityClient do
4
4
  include Savon::SpecHelper
5
5
 
6
- subject { AllscriptsUnityClient }
6
+ subject { described_class }
7
7
 
8
8
  describe '.create' do
9
9
  context 'when given mode: :soap' do
@@ -1,9 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'ClientDriver' do
3
+ describe AllscriptsUnityClient::ClientDriver do
4
4
  it_behaves_like 'a client driver'
5
5
 
6
6
  subject { build(:client_driver) }
7
+ let(:new_relic_client_driver) { build(:client_driver, new_relic: true) }
7
8
 
8
9
  describe '#client_type' do
9
10
  it { expect(subject.client_type).to be(:none) }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'ClientOptions' do
3
+ describe AllscriptsUnityClient::ClientOptions do
4
4
  subject { build(:client_options) }
5
5
 
6
6
  let(:url_with_slash) { 'http://www.example.com/' }
@@ -182,4 +182,20 @@ describe 'ClientOptions' do
182
182
  end
183
183
  end
184
184
  end
185
+
186
+ describe '#new_relic?' do
187
+ context 'when new_relic is nil' do
188
+ it 'returns false' do
189
+ subject.new_relic = nil
190
+ expect(subject.new_relic?).to be_falsey
191
+ end
192
+ end
193
+
194
+ context 'when timeout is not nil' do
195
+ it 'returns true' do
196
+ subject.new_relic = true
197
+ expect(subject.new_relic?).to be_truthy
198
+ end
199
+ end
200
+ end
185
201
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Client' do
3
+ describe AllscriptsUnityClient::Client do
4
4
  subject { build(:client) }
5
5
 
6
6
  describe '#initialize' do
@@ -12,5 +12,9 @@ FactoryGirl.define do
12
12
  ca_file nil
13
13
  ca_path nil
14
14
  timeout nil
15
+ new_relic nil
16
+
17
+ factory :json_client_driver, class: AllscriptsUnityClient::JSONClientDriver
18
+ factory :soap_client_driver, class: AllscriptsUnityClient::SOAPClientDriver
15
19
  end
16
20
  end
@@ -12,5 +12,6 @@ FactoryGirl.define do
12
12
  ca_file nil
13
13
  ca_path nil
14
14
  timeout nil
15
+ new_relic nil
15
16
  end
16
17
  end
@@ -6,5 +6,7 @@ FactoryGirl.define do
6
6
  timezone { build(:timezone) }
7
7
  appname Faker::Name.name
8
8
  security_token SecureRandom.uuid
9
+
10
+ factory :json_unity_request, class: AllscriptsUnityClient::JSONUnityRequest
9
11
  end
10
12
  end
@@ -4,5 +4,7 @@ FactoryGirl.define do
4
4
 
5
5
  response Hash.new
6
6
  timezone { build(:timezone) }
7
+
8
+ factory :json_unity_response, class: AllscriptsUnityClient::JSONUnityResponse
7
9
  end
8
10
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'JSONClientDriver' do
3
+ describe AllscriptsUnityClient::JSONClientDriver do
4
4
  it_behaves_like 'a client driver'
5
5
 
6
6
  subject do
@@ -9,6 +9,7 @@ describe 'JSONClientDriver' do
9
9
  client_driver
10
10
  end
11
11
 
12
+ let(:new_relic_client_driver) { build(:json_client_driver, new_relic: true) }
12
13
  let(:get_server_info) { FixtureLoader.load_file('get_server_info.json') }
13
14
  let(:get_security_token) { FixtureLoader.load_file('get_security_token.json') }
14
15
  let(:retire_security_token) { FixtureLoader.load_file('retire_security_token.json') }
@@ -23,7 +24,7 @@ describe 'JSONClientDriver' do
23
24
  end
24
25
 
25
26
  let(:json_hash) do
26
- JSON.generate(hash)
27
+ Oj.dump(hash, mode: :strict)
27
28
  end
28
29
 
29
30
  describe '#initialize' do
@@ -51,6 +52,11 @@ describe 'JSONClientDriver' do
51
52
  expect(WebMock).to have_requested(:post, 'http://www.example.com/Unity/UnityService.svc/json/MagicJson').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|"[^"]*")\}/, headers: { 'Content-Type' => 'application/json' })
52
53
  end
53
54
 
55
+ it 'should serialize DateTime to iso8601 when given' do
56
+ subject.magic(parameter1: DateTime.now)
57
+ expect(WebMock).to have_requested(:post, 'http://www.example.com/Unity/UnityService.svc/json/MagicJson').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{2}:\d{2}","Parameter2":(null|"[^"]*"),"Parameter3":(null|"[^"]*"),"Parameter4":(null|"[^"]*"),"Parameter5":(null|"[^"]*"),"Parameter6":(null|"[^"]*"),"Data":(null|"[^"]*")\}/, headers: { 'Content-Type' => 'application/json' })
58
+ end
59
+
54
60
  it 'should call start_timer' do
55
61
  subject.magic
56
62
  expect(subject).to have_received(:start_timer)
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'JSONUnityRequest' do
3
+ describe AllscriptsUnityClient::JSONUnityRequest do
4
4
  it_behaves_like 'a unity request'
5
5
 
6
6
  subject { build(:json_unity_request) }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'JSONUnityResponse' do
3
+ describe AllscriptsUnityClient::JSONUnityResponse do
4
4
  it_behaves_like 'a unity response'
5
5
 
6
6
  subject { build(:json_unity_response, response: get_server_info) }
@@ -0,0 +1,49 @@
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
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'SOAPClientDriver' do
3
+ describe AllscriptsUnityClient::SOAPClientDriver do
4
4
  include Savon::SpecHelper
5
5
  it_behaves_like 'a client driver'
6
6
 
@@ -10,6 +10,7 @@ describe 'SOAPClientDriver' do
10
10
  client_driver
11
11
  end
12
12
 
13
+ let(:new_relic_client_driver) { build(:soap_client_driver, new_relic: true) }
13
14
  let(:get_server_info) { FixtureLoader.load_file('get_server_info.xml') }
14
15
  let(:get_security_token) { FixtureLoader.load_file('get_security_token.xml') }
15
16
  let(:retire_security_token) { FixtureLoader.load_file('retire_security_token.xml') }
@@ -0,0 +1,16 @@
1
+ RSpec.configure do |config|
2
+ config.before(:suite) do
3
+ # Mock the NewRelic::Agent::MethodTracer module
4
+ module NewRelic
5
+ module Agent
6
+ module MethodTracer
7
+ def trace_execution_scoped
8
+ end
9
+
10
+ def add_method_tracer
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,4 +1,16 @@
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
+ end
11
+ end
12
+ end
13
+
2
14
  describe '#security_token?' do
3
15
  context 'when @security_token is nil' do
4
16
  it do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Timezone' do
3
+ describe AllscriptsUnityClient::Timezone do
4
4
  subject { build(:timezone) }
5
5
 
6
6
  let(:positive_timezone) { build(:timezone, zone_identifier: 'Asia/Jakarta') }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'UnityRequest' do
3
+ describe AllscriptsUnityClient::UnityRequest do
4
4
  it_behaves_like 'a unity request'
5
5
 
6
6
  subject { build(:unity_request) }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'UnityResponse' do
3
+ describe AllscriptsUnityClient::UnityResponse do
4
4
  it_behaves_like 'a unity response'
5
5
 
6
6
  subject { build(:unity_response, response: get_server_info) }
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Utilities' do
4
- subject { AllscriptsUnityClient::Utilities }
3
+ describe AllscriptsUnityClient::Utilities do
4
+ subject { described_class }
5
5
 
6
6
  let(:date_string) { '2013-02-15' }
7
7
  let(:date) { Date.parse(date_string) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: allscripts_unity_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ash Gupta
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-06 00:00:00.000000000 Z
12
+ date: 2014-07-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: savon
@@ -115,6 +115,20 @@ dependencies:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
117
  version: 1.1.0
118
+ - !ruby/object:Gem::Dependency
119
+ name: oj
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 2.9.8
125
+ type: :runtime
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 2.9.8
118
132
  - !ruby/object:Gem::Dependency
119
133
  name: factory_girl
120
134
  requirement: !ruby/object:Gem::Requirement
@@ -163,14 +177,14 @@ dependencies:
163
177
  requirements:
164
178
  - - ~>
165
179
  - !ruby/object:Gem::Version
166
- version: 3.0.0.beta2
180
+ version: 3.0.0
167
181
  type: :development
168
182
  prerelease: false
169
183
  version_requirements: !ruby/object:Gem::Requirement
170
184
  requirements:
171
185
  - - ~>
172
186
  - !ruby/object:Gem::Version
173
- version: 3.0.0.beta2
187
+ version: 3.0.0
174
188
  - !ruby/object:Gem::Dependency
175
189
  name: simplecov
176
190
  requirement: !ruby/object:Gem::Requirement
@@ -236,6 +250,7 @@ files:
236
250
  - lib/allscripts_unity_client/json_client_driver.rb
237
251
  - lib/allscripts_unity_client/json_unity_request.rb
238
252
  - lib/allscripts_unity_client/json_unity_response.rb
253
+ - lib/allscripts_unity_client/new_relic_support.rb
239
254
  - lib/allscripts_unity_client/soap_client_driver.rb
240
255
  - lib/allscripts_unity_client/timezone.rb
241
256
  - lib/allscripts_unity_client/unity_request.rb
@@ -250,11 +265,7 @@ files:
250
265
  - spec/factories/client_driver_factory.rb
251
266
  - spec/factories/client_factory.rb
252
267
  - spec/factories/client_options.rb
253
- - spec/factories/json_client_driver_factory.rb
254
- - spec/factories/json_unity_request_factory.rb
255
- - spec/factories/json_unity_response_factory.rb
256
268
  - spec/factories/magic_request_factory.rb
257
- - spec/factories/soap_client_driver_factory.rb
258
269
  - spec/factories/timezone_factory.rb
259
270
  - spec/factories/unity_request_factory.rb
260
271
  - spec/factories/unity_response_factory.rb
@@ -281,10 +292,12 @@ files:
281
292
  - spec/json_client_driver_spec.rb
282
293
  - spec/json_unity_request_spec.rb
283
294
  - spec/json_unity_response_spec.rb
295
+ - spec/new_relic_support_spec.rb
284
296
  - spec/soap_client_driver_spec.rb
285
297
  - spec/spec_helper.rb
286
298
  - spec/support/factory_girl.rb
287
299
  - spec/support/fixture_loader.rb
300
+ - spec/support/new_relic.rb
288
301
  - spec/support/shared_examples_for_client_driver.rb
289
302
  - spec/support/shared_examples_for_unity_request.rb
290
303
  - spec/support/shared_examples_for_unity_response.rb
@@ -1,3 +0,0 @@
1
- FactoryGirl.define do
2
- factory :json_client_driver, parent: :client_driver, class: AllscriptsUnityClient::JSONClientDriver
3
- end
@@ -1,3 +0,0 @@
1
- FactoryGirl.define do
2
- factory :json_unity_request, parent: :unity_request, class: AllscriptsUnityClient::JSONUnityRequest
3
- end
@@ -1,3 +0,0 @@
1
- FactoryGirl.define do
2
- factory :json_unity_response, parent: :unity_response, class: AllscriptsUnityClient::JSONUnityResponse
3
- end
@@ -1,3 +0,0 @@
1
- FactoryGirl.define do
2
- factory :soap_client_driver, parent: :client_driver, class: AllscriptsUnityClient::SOAPClientDriver
3
- end