diff --git a/lib/ship_compliant/client.rb b/lib/ship_compliant/client.rb index cbceddf..28de487 100644 --- a/lib/ship_compliant/client.rb +++ b/lib/ship_compliant/client.rb @@ -3,6 +3,14 @@ class << self attr_accessor :ship_compliant_client end + def self.ship_compliant_client + Thread.current[:ship_compliant_client] + end + + def self.ship_compliant_client=(client) + Thread.current[:ship_compliant_client] = client + end + # Returns an instance of +Client+. def self.client self.ship_compliant_client ||= new_client_from_wsdl(configuration.wsdl) diff --git a/lib/ship_compliant/configuration.rb b/lib/ship_compliant/configuration.rb index 6e9a7e0..644691f 100644 --- a/lib/ship_compliant/configuration.rb +++ b/lib/ship_compliant/configuration.rb @@ -8,7 +8,11 @@ def self.configure end def self.configuration - @configuration ||= Configuration.new + Thread.current[:ship_compliant_configuration] ||= Configuration.new + end + + def self.configuration=(value) + Thread.current[:ship_compliant_configuration] = value end # Stores runtime configuration to authenticate user. diff --git a/lib/ship_compliant/search_sales_orders_result.rb b/lib/ship_compliant/search_sales_orders_result.rb index 58f041d..70861fd 100644 --- a/lib/ship_compliant/search_sales_orders_result.rb +++ b/lib/ship_compliant/search_sales_orders_result.rb @@ -62,9 +62,7 @@ def paging_cookie_expires # Standardizes the XML response by converting fields to integers # and forcing the order summaries into an array. def parse! - unless raw.has_key?(:sales_orders) - raw[:sales_orders] = {} - end + raw[:sales_orders] ||= {} # force orders to be an array orders = raw[:sales_orders].fetch(:sales_order_summary, {}) diff --git a/ship_compliant.gemspec b/ship_compliant.gemspec index ee36cb7..7627a29 100644 --- a/ship_compliant.gemspec +++ b/ship_compliant.gemspec @@ -20,10 +20,10 @@ Gem::Specification.new do |s| s.test_files = s.files.grep(%r{^(test|spec|features)/}) s.require_paths = ["lib"] - s.add_dependency "activesupport", "~> 4.0", ">= 4.0.3" + s.add_dependency "activesupport", ">= 4.0.3" s.add_dependency "savon", "~> 2.3" - s.add_development_dependency "bundler", "~> 1.5" + s.add_development_dependency "bundler", "~> 2.0" s.add_development_dependency "rake", "~> 10.0" s.add_development_dependency "sdoc", "~> 0.4" s.add_development_dependency "pry", "~> 0.9" diff --git a/spec/lib/ship_compliant/client_spec.rb b/spec/lib/ship_compliant/client_spec.rb index 5e79b11..be4c6d4 100644 --- a/spec/lib/ship_compliant/client_spec.rb +++ b/spec/lib/ship_compliant/client_spec.rb @@ -20,6 +20,22 @@ module ShipCompliant expect(ShipCompliant.client.globals[:log]).to be_falsey end + it "don't share configuration between threads" do + ShipCompliant.configure do |c| + c.username = 'foo' + end + + Thread.new do + ShipCompliant.configure do |c| + c.username = 'bar' + end + + expect(ShipCompliant.configuration.username).to eq('bar') + end.join + + expect(ShipCompliant.configuration.username).to eq('foo') + end + context "call" do before { savon.mock! } after { savon.unmock! }