apartment 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/HISTORY.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.8.0
2
+ * June 23, 2011
3
+
4
+ - Added #current_database which will return the current database (or schema) name
5
+
1
6
  # 0.7.0
2
7
  * June 22, 2011
3
8
 
@@ -15,16 +15,15 @@ module Apartment
15
15
  @defaults = defaults
16
16
  end
17
17
 
18
- # Connect to db or schema, do stuff, reset
18
+ # Connect to db or schema, do stuff, reset (equivalent to a switch... do stuff... reset)
19
19
  #
20
20
  # @param {String} database Database or schema to connect to
21
- def connect_and_reset(database)
21
+ def process(database)
22
22
  connect_to_new(database)
23
23
  yield if block_given?
24
24
  ensure
25
25
  reset
26
26
  end
27
- alias_method :process, :connect_and_reset # more succinct name
28
27
 
29
28
  # Create new postgres schema
30
29
  #
@@ -32,7 +31,7 @@ module Apartment
32
31
  def create(database)
33
32
  # TODO create_database unless using_schemas?
34
33
 
35
- connect_and_reset(database) do
34
+ process(database) do
36
35
  import_database_schema
37
36
 
38
37
  # Manually init schema migrations table (apparently there were issues with Postgres when this isn't done)
@@ -61,6 +60,11 @@ module Apartment
61
60
  end
62
61
  alias_method :seed, :seed_data
63
62
 
63
+ # Return the current database name
64
+ def current_database
65
+ ActiveRecord::Base.connection.current_database
66
+ end
67
+
64
68
  protected
65
69
 
66
70
  def create_schema
@@ -3,7 +3,7 @@ module Apartment
3
3
  module Database
4
4
 
5
5
  def self.postgresql_adapter(config)
6
- Adapters::PostgresqlAdapter.new config, :schema_search_path => ActiveRecord::Base.connection.schema_search_path
6
+ Adapters::PostgresqlAdapter.new config, :schema_search_path => ActiveRecord::Base.connection.schema_search_path # this is the initial search path before any switches happen
7
7
  end
8
8
  end
9
9
 
@@ -14,7 +14,6 @@ module Apartment
14
14
  # Set schema path or connect to new db
15
15
  def connect_to_new(database)
16
16
  return ActiveRecord::Base.connection.schema_search_path = database if using_schemas?
17
-
18
17
  super
19
18
  rescue ActiveRecord::StatementInvalid => e
20
19
  raise SchemaNotFound, e
@@ -28,12 +27,14 @@ module Apartment
28
27
  end
29
28
 
30
29
  def reset
31
- if using_schemas?
32
- ActiveRecord::Base.connection.schema_search_path = @defaults[:schema_search_path]
33
- else
34
- super
35
- end
30
+ return ActiveRecord::Base.connection.schema_search_path = @defaults[:schema_search_path] if using_schemas?
31
+ super
36
32
  end
33
+
34
+ def current_database
35
+ return ActiveRecord::Base.connection.schema_search_path if using_schemas?
36
+ super
37
+ end
37
38
 
38
39
  protected
39
40
 
@@ -1,26 +1,19 @@
1
- require 'active_support/core_ext/string/inflections' # for `constantize`
1
+ require 'active_support/core_ext/module/delegation'
2
2
 
3
3
  module Apartment
4
4
  module Database
5
5
 
6
- MULTI_TENANT_METHODS = [:create, :switch, :reset, :connect_and_reset, :process, :seed]
7
-
8
6
  class << self
9
7
 
8
+ # pass these methods to our adapter
9
+ delegate :create, :switch, :reset, :process, :seed, :current_database, :to => :adapter
10
+
10
11
  # Call init to establish a connection to the public schema on all excluded models
11
12
  # This must be done before creating any new schemas or switching
12
13
  def init
13
14
  connect_exclusions
14
15
  end
15
16
 
16
- MULTI_TENANT_METHODS.each do |method|
17
- class_eval <<-RUBY
18
- def #{method}(*args, &block)
19
- adapter.send(:#{method}, *args, &block)
20
- end
21
- RUBY
22
- end
23
-
24
17
  def adapter
25
18
  @adapter ||= begin
26
19
  adapter_method = "#{config[:adapter]}_adapter"
@@ -6,17 +6,17 @@ module Apartment
6
6
 
7
7
  # Migrate to latest
8
8
  def migrate(database)
9
- Database.connect_and_reset(database){ ActiveRecord::Migrator.migrate(ActiveRecord::Migrator.migrations_path) }
9
+ Database.process(database){ ActiveRecord::Migrator.migrate(ActiveRecord::Migrator.migrations_path) }
10
10
  end
11
11
 
12
12
  # Migrate up/down to a specific version
13
13
  def run(direction, database, version)
14
- Database.connect_and_reset(database){ ActiveRecord::Migrator.run(direction, ActiveRecord::Migrator.migrations_path, version) }
14
+ Database.process(database){ ActiveRecord::Migrator.run(direction, ActiveRecord::Migrator.migrations_path, version) }
15
15
  end
16
16
 
17
17
  # rollback latest migration `step` number of times
18
18
  def rollback(database, step = 1)
19
- Database.connect_and_reset(database){ ActiveRecord::Migrator.rollback(ActiveRecord::Migrator.migrations_path, step) }
19
+ Database.process(database){ ActiveRecord::Migrator.rollback(ActiveRecord::Migrator.migrations_path, step) }
20
20
  end
21
21
  end
22
22
 
@@ -1,3 +1,3 @@
1
1
  module Apartment
2
- VERSION = "0.7.0"
2
+ VERSION = "0.8.0"
3
3
  end
@@ -8,6 +8,10 @@ describe Apartment::Adapters::PostgresqlAdapter do
8
8
  @pg = Apartment::Database.postgresql_adapter Apartment::Test.config['connections']['postgresql'].symbolize_keys
9
9
  end
10
10
 
11
+ after do
12
+ ActiveRecord::Base.clear_all_connections!
13
+ end
14
+
11
15
  context "using schemas" do
12
16
 
13
17
  let(:schema1){ 'first_db_schema' }
@@ -36,15 +40,15 @@ describe Apartment::Adapters::PostgresqlAdapter do
36
40
  end
37
41
  end
38
42
 
39
- describe "#connect_and_reset" do
43
+ describe "#process" do
40
44
  it "should connect" do
41
- @pg.connect_and_reset(schema1) do
45
+ @pg.process(schema1) do
42
46
  ActiveRecord::Base.connection.schema_search_path.should == schema1
43
47
  end
44
48
  end
45
49
 
46
50
  it "should reset" do
47
- @pg.connect_and_reset(schema1)
51
+ @pg.process(schema1)
48
52
  ActiveRecord::Base.connection.schema_search_path.should == schema_search_path
49
53
  end
50
54
  end
@@ -69,5 +73,12 @@ describe Apartment::Adapters::PostgresqlAdapter do
69
73
  end
70
74
  end
71
75
 
76
+ describe "#current_database" do
77
+ it "should return the current schema name" do
78
+ @pg.switch(schema1)
79
+ @pg.current_database.should == schema1
80
+ end
81
+ end
82
+
72
83
  end
73
84
  end
@@ -4,7 +4,7 @@ require 'rake'
4
4
  describe "apartment rake tasks" do
5
5
 
6
6
  before :all do
7
- Apartment::Test.migrate # ensure we have latest db
7
+ Apartment::Test.migrate # ensure we have latest schema in the public
8
8
  end
9
9
 
10
10
  before do
@@ -113,6 +113,14 @@ describe Apartment::Database do
113
113
  end
114
114
  end
115
115
 
116
+ describe "#current_database" do
117
+
118
+ it "should return the current schema search path" do
119
+ Apartment::Database.switch database
120
+ Apartment::Database.current_database.should == database
121
+ end
122
+ end
123
+
116
124
  end
117
125
 
118
126
  end
@@ -7,7 +7,7 @@ module Apartment
7
7
  end
8
8
 
9
9
  def self.drop_schema(schema)
10
- ActiveRecord::Base.connection.execute("DROP SCHEMA IF EXISTS #{schema} CASCADE")
10
+ ActiveRecord::Base.silence{ ActiveRecord::Base.connection.execute("DROP SCHEMA IF EXISTS #{schema} CASCADE") }
11
11
  end
12
12
 
13
13
  def self.create_schema(schema)
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: apartment
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.7.0
5
+ version: 0.8.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ryan Brunner
@@ -185,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
185
185
  requirements:
186
186
  - - ">="
187
187
  - !ruby/object:Gem::Version
188
- hash: 1175145384606930711
188
+ hash: -2374879157766889848
189
189
  segments:
190
190
  - 0
191
191
  version: "0"
@@ -194,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
194
  requirements:
195
195
  - - ">="
196
196
  - !ruby/object:Gem::Version
197
- hash: 1175145384606930711
197
+ hash: -2374879157766889848
198
198
  segments:
199
199
  - 0
200
200
  version: "0"