From 48882919d9a5bf95d9fb1efeaa83cc46d71c38b3 Mon Sep 17 00:00:00 2001 From: Aaron Renner Date: Fri, 31 Aug 2012 11:33:02 -0600 Subject: [PATCH] Added with_scope method and tests --- lib/acts_as_tenant/model_extensions.rb | 14 +++++++++++++ spec/model_extensions_spec.rb | 27 ++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/lib/acts_as_tenant/model_extensions.rb b/lib/acts_as_tenant/model_extensions.rb index eeacc8e..9ed4f09 100644 --- a/lib/acts_as_tenant/model_extensions.rb +++ b/lib/acts_as_tenant/model_extensions.rb @@ -6,6 +6,20 @@ module ActsAsTenant class << self cattr_accessor :tenant_class attr_accessor :current_tenant + + # Sets the current_tenant within the given block + def with_tenant(tenant, &block) + if block.nil? + raise ArgumentError, "block required" + end + + old_tenant = self.current_tenant + self.current_tenant = tenant + + block.call + + self.current_tenant= old_tenant + end end module ModelExtensions diff --git a/spec/model_extensions_spec.rb b/spec/model_extensions_spec.rb index 76f845a..39bdb80 100644 --- a/spec/model_extensions_spec.rb +++ b/spec/model_extensions_spec.rb @@ -220,4 +220,31 @@ class SubTask < ActiveRecord::Base ActsAsTenant.current_tenant = @account Task.create(:name => 'bar').valid?.should == true end + + describe "::with_tenant" do + it "should set current_tenant to the specified tenant inside the block" do + @account = Account.create!(:name => 'baz') + + ActsAsTenant.with_tenant(@account) do + ActsAsTenant.current_tenant.should eq(@account) + end + end + + + it "should return current_tenant to the previous tenant once exiting the block" do + @account1 = Account.create!(:name => 'foo') + @account2 = Account.create!(:name => 'bar') + + ActsAsTenant.current_tenant = @account1 + ActsAsTenant.with_tenant @account2 do + + end + + ActsAsTenant.current_tenant.should eq(@account1) + end + + it "should raise an error when no block is provided" do + expect { ActsAsTenant.with_tenant(nil) }.to raise_error(ArgumentError, /block required/) + end + end end