apartment 2.2.0 → 2.2.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12cd184ff975b1b35f44289fb83ffc7a6a644035f90ea4c01fc93d249b814ef2
4
- data.tar.gz: 448a27893a2ca2564d368c1ca7140582ddcedbb3f209f07f7a8b2e148bfd252e
3
+ metadata.gz: be448dd133ac9668f7ba463444dbf7ea92c12d844b3b87a319c2b380cc26d9a6
4
+ data.tar.gz: 36ad7e20ba2897f2696262c010295a2912c52a10050445971495fc3c452afd1f
5
5
  SHA512:
6
- metadata.gz: ff5cdb7a876920cbf88f1f5d0cd9821b91de5e518a0eea3eae262552fc6ca1608227ce6f1d2d367f1dca8d97d660f081c61bf89a1ecf2709eb38f8c85582a251
7
- data.tar.gz: b84c9287ca34937c46dfb6ec9746d6eadd27e81def1f0016b37281f8007a75092d2d58a4826f94da307bf4c75caf4b0b7d0725a478b3ec70c3b92dc8c4b8f5c0
6
+ metadata.gz: f4a32ff51228ad18573838b29980fe507df2856e23b3269f9eb0be8dcddd4a3e86e08c40038e45a21d41f884fa7e1c38ae570753ba40e7e21e512bf243a047e3
7
+ data.tar.gz: 42231f505295be8cd0babe3e58252867d1a6bc59ef5df3c9eacda2a80858ba8ba3d0fa584c73883986ab136b7611a865684c50f8bd540b6acc9a2f8b37cd90de
@@ -1,12 +1,15 @@
1
+ sudo: required
1
2
  language: ruby
3
+ services:
4
+ - docker
2
5
  rvm:
6
+ - jruby-9.1.15.0
3
7
  - 2.1.9
4
8
  - 2.2.9
5
9
  - 2.3.6
6
10
  - 2.4.3
7
11
  - 2.5.0
8
12
  - ruby-head
9
- - jruby-9.1.15.0
10
13
  gemfile:
11
14
  - gemfiles/rails_4_2.gemfile
12
15
  - gemfiles/rails_5_0.gemfile
@@ -15,6 +18,9 @@ gemfile:
15
18
  - gemfiles/rails_master.gemfile
16
19
  bundler_args: --without local
17
20
  before_install:
21
+ - sudo /etc/init.d/mysql stop
22
+ - sudo /etc/init.d/postgresql stop
23
+ - docker-compose up -d
18
24
  - gem install bundler -v '> 1.5.0'
19
25
  env:
20
26
  RUBY_GC_MALLOC_LIMIT: 90000000
data/HISTORY.md CHANGED
@@ -1,3 +1,14 @@
1
+ # 2.2.1
2
+ * June 19, 2019
3
+
4
+ ## Added
5
+ - #566: IGNORE_EMPTY_TENANTS environment variable to ignore empty tenants
6
+ warning. [Pysis868]
7
+
8
+ ## Fixed
9
+ - #586: Ignore `CREATE SCHEMA public` statement in pg dump [artemave]
10
+ - #549: Fix Postgres schema creation with dump SQL [ancorcruz]
11
+
1
12
  # 2.2.0
2
13
  * April 14, 2018
3
14
 
data/README.md CHANGED
@@ -533,6 +533,31 @@ end
533
533
 
534
534
  See [apartment-sidekiq](https://github.com/influitive/apartment-sidekiq) or [apartment-activejob](https://github.com/influitive/apartment-activejob).
535
535
 
536
+ ## Callbacks
537
+
538
+ You can execute callbacks when switching between tenants or creating a new one, Apartment provides the following callbacks:
539
+
540
+ - before_create
541
+ - after_create
542
+ - before_switch
543
+ - after_switch
544
+
545
+ You can register a callback using [ActiveSupport::Callbacks](https://api.rubyonrails.org/classes/ActiveSupport/Callbacks.html) the following way:
546
+
547
+ ```ruby
548
+ require 'apartment/adapters/abstract_adapter'
549
+
550
+ module Apartment
551
+ module Adapters
552
+ class AbstractAdapter
553
+ set_callback :switch, :before do |object|
554
+ ...
555
+ end
556
+ end
557
+ end
558
+ end
559
+ ```
560
+
536
561
  ## Contributing
537
562
 
538
563
  * In both `spec/dummy/config` and `spec/config`, you will see `database.yml.sample` files
@@ -1,14 +1,33 @@
1
- version: '2'
1
+ version: '2.3'
2
2
  services:
3
3
  postgresql:
4
- image: postgres:10.3
4
+ image: postgres:9.5.12
5
5
  environment:
6
6
  POSTGRES_PASSWORD: ""
7
7
  ports:
8
8
  - "5432:5432"
9
+ healthcheck:
10
+ test: pg_isready -U postgres
11
+ start_period: 10s
12
+ interval: 10s
13
+ timeout: 30s
14
+ retries: 3
9
15
  mysql:
10
16
  image: mysql:5.7
11
17
  environment:
12
18
  MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
13
19
  ports:
14
20
  - "3306:3306"
21
+ healthcheck:
22
+ test: mysqladmin -h 127.0.0.1 -uroot ping
23
+ start_period: 15s
24
+ interval: 10s
25
+ timeout: 30s
26
+ retries: 3
27
+ healthcheck:
28
+ image: busybox
29
+ depends_on:
30
+ postgresql:
31
+ condition: service_healthy
32
+ mysql:
33
+ condition: service_healthy
@@ -120,6 +120,25 @@ module Apartment
120
120
  end
121
121
  alias_method :seed, :seed_data
122
122
 
123
+ # Prepend the environment if configured and the environment isn't already there
124
+ #
125
+ # @param {String} tenant Database name
126
+ # @return {String} tenant name with Rails environment *optionally* prepended
127
+ #
128
+ def environmentify(tenant)
129
+ unless tenant.include?(Rails.env)
130
+ if Apartment.prepend_environment
131
+ "#{Rails.env}_#{tenant}"
132
+ elsif Apartment.append_environment
133
+ "#{tenant}_#{Rails.env}"
134
+ else
135
+ tenant
136
+ end
137
+ else
138
+ tenant
139
+ end
140
+ end
141
+
123
142
  protected
124
143
 
125
144
  def process_excluded_model(excluded_model)
@@ -163,25 +182,6 @@ module Apartment
163
182
  raise_connect_error!(tenant, exception)
164
183
  end
165
184
 
166
- # Prepend the environment if configured and the environment isn't already there
167
- #
168
- # @param {String} tenant Database name
169
- # @return {String} tenant name with Rails environment *optionally* prepended
170
- #
171
- def environmentify(tenant)
172
- unless tenant.include?(Rails.env)
173
- if Apartment.prepend_environment
174
- "#{Rails.env}_#{tenant}"
175
- elsif Apartment.append_environment
176
- "#{tenant}_#{Rails.env}"
177
- else
178
- tenant
179
- end
180
- else
181
- tenant
182
- end
183
- end
184
-
185
185
  # Import the database schema
186
186
  #
187
187
  def import_database_schema
@@ -110,6 +110,9 @@ module Apartment
110
110
  /SET lock_timeout/i, # new in postgresql 9.3
111
111
  /SET row_security/i, # new in postgresql 9.5
112
112
  /SET idle_in_transaction_session_timeout/i, # new in postgresql 9.6
113
+ /CREATE SCHEMA public/i,
114
+ /COMMENT ON SCHEMA public/i,
115
+
113
116
  ]
114
117
 
115
118
  def import_database_schema
@@ -204,7 +207,7 @@ module Apartment
204
207
  if Apartment.pg_excluded_names.any? { |name| match.include? name }
205
208
  match
206
209
  else
207
- match.gsub(default_tenant, %{"#{current}"})
210
+ match.gsub("#{default_tenant}.", %{"#{current}".})
208
211
  end
209
212
  end
210
213
  end
@@ -8,7 +8,7 @@ module Apartment
8
8
  extend self
9
9
  extend Forwardable
10
10
 
11
- def_delegators :adapter, :create, :drop, :switch, :switch!, :current, :each, :reset, :set_callback, :seed, :current_tenant, :default_tenant
11
+ def_delegators :adapter, :create, :drop, :switch, :switch!, :current, :each, :reset, :set_callback, :seed, :current_tenant, :default_tenant, :environmentify
12
12
 
13
13
  attr_writer :config
14
14
 
@@ -1,3 +1,3 @@
1
1
  module Apartment
2
- VERSION = "2.2.0"
2
+ VERSION = "2.2.1"
3
3
  end
@@ -130,7 +130,7 @@ apartment_namespace = namespace :apartment do
130
130
  end
131
131
 
132
132
  def warn_if_tenants_empty
133
- if tenants.empty?
133
+ if tenants.empty? && ENV['IGNORE_EMPTY_TENANTS'] != "true"
134
134
  puts <<-WARNING
135
135
  [WARNING] - The list of tenants to migrate appears to be empty. This could mean a few things:
136
136
 
@@ -9,6 +9,8 @@ connections:
9
9
  url: jdbc:postgresql://localhost:5432/apartment_postgresql_test
10
10
  timeout: 5000
11
11
  pool: 5
12
+ host: localhost
13
+ port: 5432
12
14
 
13
15
  mysql:
14
16
  adapter: mysql
@@ -19,6 +21,8 @@ connections:
19
21
  url: jdbc:mysql://localhost:3306/apartment_mysql_test
20
22
  timeout: 5000
21
23
  pool: 5
24
+ host: 127.0.0.1
25
+ port: 3306
22
26
  <% else %>
23
27
  connections:
24
28
  postgresql:
@@ -28,12 +32,16 @@ connections:
28
32
  username: postgres
29
33
  schema_search_path: public
30
34
  password:
35
+ host: localhost
36
+ port: 5432
31
37
 
32
38
  mysql:
33
39
  adapter: mysql2
34
40
  database: apartment_mysql_test
35
41
  username: root
36
42
  password:
43
+ host: 127.0.0.1
44
+ port: 3306
37
45
 
38
46
  sqlite:
39
47
  adapter: sqlite3
@@ -29,6 +29,8 @@ test:
29
29
  min_messages: WARNING
30
30
  pool: 5
31
31
  timeout: 5000
32
+ host: localhost
33
+ port: 5432
32
34
 
33
35
  development:
34
36
  adapter: postgresql
@@ -37,4 +39,6 @@ development:
37
39
  min_messages: WARNING
38
40
  pool: 5
39
41
  timeout: 5000
42
+ host: localhost
43
+ port: 5432
40
44
  <% end %>
@@ -0,0 +1,13 @@
1
+ migration_class = (ActiveRecord::VERSION::MAJOR >= 5) ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration
2
+ class CreatePublicTokens < migration_class
3
+ def up
4
+ create_table :public_tokens do |t|
5
+ t.string :token
6
+ t.integer :user_id, foreign_key: true
7
+ end
8
+ end
9
+
10
+ def down
11
+ drop_table :public_tokens
12
+ end
13
+ end
@@ -1,4 +1,3 @@
1
- # encoding: UTF-8
2
1
  # This file is auto-generated from the current state of the database. Instead
3
2
  # of editing this file, please use the migrations feature of Active Record to
4
3
  # incrementally modify your database, and then regenerate this schema definition.
@@ -9,41 +8,48 @@
9
8
  # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
9
  # you'll amass, the slower it'll run and the greater likelihood for issues).
11
10
  #
12
- # It's strongly recommended to check this file into your version control system.
11
+ # It's strongly recommended that you check this file into your version control system.
13
12
 
14
- ActiveRecord::Schema.define(:version => 20111202022214) do
13
+ ActiveRecord::Schema.define(version: 2018_04_15_260934) do
15
14
 
16
- create_table "books", :force => true do |t|
17
- t.string "name"
18
- t.integer "pages"
15
+ # These are extensions that must be enabled in order to support this database
16
+ enable_extension "plpgsql"
17
+
18
+ create_table "books", force: :cascade do |t|
19
+ t.string "name"
20
+ t.integer "pages"
19
21
  t.datetime "published"
20
22
  end
21
23
 
22
- create_table "companies", :force => true do |t|
24
+ create_table "companies", force: :cascade do |t|
23
25
  t.boolean "dummy"
24
- t.string "database"
26
+ t.string "database"
25
27
  end
26
28
 
27
- create_table "delayed_jobs", :force => true do |t|
28
- t.integer "priority", :default => 0
29
- t.integer "attempts", :default => 0
30
- t.text "handler"
31
- t.text "last_error"
29
+ create_table "delayed_jobs", force: :cascade do |t|
30
+ t.integer "priority", default: 0
31
+ t.integer "attempts", default: 0
32
+ t.text "handler"
33
+ t.text "last_error"
32
34
  t.datetime "run_at"
33
35
  t.datetime "locked_at"
34
36
  t.datetime "failed_at"
35
- t.string "locked_by"
37
+ t.string "locked_by"
36
38
  t.datetime "created_at"
37
39
  t.datetime "updated_at"
38
- t.string "queue"
40
+ t.string "queue"
41
+ t.index ["priority", "run_at"], name: "delayed_jobs_priority"
39
42
  end
40
43
 
41
- add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
44
+ create_table "public_tokens", id: :serial, force: :cascade do |t|
45
+ t.string "token"
46
+ t.integer "user_id"
47
+ end
42
48
 
43
- create_table "users", :force => true do |t|
44
- t.string "name"
49
+ create_table "users", force: :cascade do |t|
50
+ t.string "name"
45
51
  t.datetime "birthdate"
46
- t.string "sex"
52
+ t.string "sex"
47
53
  end
48
54
 
49
55
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apartment
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Brunner
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-04-13 00:00:00.000000000 Z
12
+ date: 2019-06-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -272,6 +272,7 @@ files:
272
272
  - spec/dummy/config/routes.rb
273
273
  - spec/dummy/db/migrate/20110613152810_create_dummy_models.rb
274
274
  - spec/dummy/db/migrate/20111202022214_create_table_books.rb
275
+ - spec/dummy/db/migrate/20180415260934_create_public_tokens.rb
275
276
  - spec/dummy/db/schema.rb
276
277
  - spec/dummy/db/seeds.rb
277
278
  - spec/dummy/db/seeds/import.rb
@@ -359,7 +360,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
359
360
  version: '0'
360
361
  requirements: []
361
362
  rubyforge_project:
362
- rubygems_version: 2.7.6
363
+ rubygems_version: 2.7.8
363
364
  signing_key:
364
365
  specification_version: 4
365
366
  summary: A Ruby gem for managing database multitenancy
@@ -396,6 +397,7 @@ test_files:
396
397
  - spec/dummy/config/routes.rb
397
398
  - spec/dummy/db/migrate/20110613152810_create_dummy_models.rb
398
399
  - spec/dummy/db/migrate/20111202022214_create_table_books.rb
400
+ - spec/dummy/db/migrate/20180415260934_create_public_tokens.rb
399
401
  - spec/dummy/db/schema.rb
400
402
  - spec/dummy/db/seeds.rb
401
403
  - spec/dummy/db/seeds/import.rb