multiverse 0.1.2 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4eea234fa322f20367a744c695ef78e2bbfa2ebf
4
- data.tar.gz: 76c3dae97ada18e90a1b65cdfc6ed0a5cfd86444
3
+ metadata.gz: f4569d0c19e94ae2656d0b6bf1b83023c28a96d1
4
+ data.tar.gz: 696ab1dfa89bdffdfb4af49e2d6d7ac02f7a56ea
5
5
  SHA512:
6
- metadata.gz: 4b33ae3a1ba4916c3fb3a43b6f4318e90f253ddcfab2303ad8d184d7e9a192dfcd0e8bbd24138b66c994f76cb97b5aa39a57c2abb78cc346a3e38d17e3d457f4
7
- data.tar.gz: 8ccdc35fa5cc7d4f618923e0d80a1f1194b221bc853bd07b208419ba1db82d8d0b38f7c3df5455fdcd543c35f3db62c6d15d94591062a2e46cfbcde8ac7ed2a5
6
+ metadata.gz: ed54801e4b6ed8992884635bcf5f638cd0c1b7140fc852e062b54290ab0af49b32d5a7c3ef6ea5fdc4706e7a20ccd7e08cea63a9906ba39c3486e0e20edc7357
7
+ data.tar.gz: a496c9ecbf793d6ee89b79df65b89d50a4ca8b818f79fad7eff152c60397347dec5df38561ae15cee7efe5c6a6751616682fb2f2410bfacce0d9c36926d609cd
@@ -3,12 +3,17 @@ rvm: 2.4.2
3
3
  gemfile:
4
4
  - Gemfile
5
5
  sudo: false
6
- before_install: gem install bundler
6
+ before_install:
7
+ - gem install bundler
8
+ - unset RAILS_ENV
9
+ - unset RACK_ENV
7
10
  script: bundle exec rake test
8
11
  notifications:
9
12
  email:
10
13
  on_success: never
11
14
  on_failure: change
12
15
  env:
13
- - RAILS_VERSION=5.1.4 RAILS_ENV=development
14
- - RAILS_VERSION=5.0.6 RAILS_ENV=development
16
+ - RAILS_VERSION=5.2.0.rc1
17
+ - RAILS_VERSION=5.1.4
18
+ - RAILS_VERSION=5.0.6
19
+ - RAILS_VERSION=4.2.10
@@ -1,3 +1,10 @@
1
+ ## 0.2.0
2
+
3
+ - Added support for Rails 4.2
4
+ - Fixed migration generation when DB specified for Rails < 5.0.3
5
+ - Less dependencies
6
+ - Less patching
7
+
1
8
  ## 0.1.2
2
9
 
3
10
  - Fixed `db:structure:dump` when DB specified
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  One of the easiest ways to scale your database is to move large, infrequently-joined tables to a separate database. **ActiveRecord supports multiple databases, but Rails doesn’t provide a way to manage them.** Multiverse changes this.
6
6
 
7
- Works with Rails 5+
7
+ Works with Rails 4.2+
8
8
 
9
9
  [![Build Status](https://travis-ci.org/ankane/multiverse.svg?branch=master)](https://travis-ci.org/ankane/multiverse)
10
10
 
@@ -1,5 +1,4 @@
1
1
  require "multiverse/generators"
2
- require "multiverse/patches"
3
2
  require "multiverse/railtie"
4
3
  require "multiverse/version"
5
4
 
@@ -18,32 +17,17 @@ module Multiverse
18
17
  end
19
18
 
20
19
  def parent_class_name
21
- db ? "#{db.camelize}Record" : "ApplicationRecord"
22
- end
23
-
24
- def record_class
25
20
  if db
26
- record_class = parent_class_name.safe_constantize
27
- abort "Missing model: #{parent_class_name}" unless record_class
28
- record_class
21
+ "#{db.camelize}Record"
22
+ elsif ActiveRecord::VERSION::MAJOR >= 5
23
+ "ApplicationRecord"
29
24
  else
30
- ActiveRecord::Base
25
+ "ActiveRecord::Base"
31
26
  end
32
27
  end
33
28
 
34
29
  def migrate_path
35
30
  "#{db_dir}/migrate"
36
31
  end
37
-
38
- def env(environment)
39
- db ? "#{db}_#{environment}" : environment
40
- end
41
32
  end
42
33
  end
43
-
44
- ActiveSupport.on_load(:active_record) do
45
- ActiveRecord::Tasks::DatabaseTasks.singleton_class.prepend Multiverse::DatabaseTasks
46
- ActiveRecord::Migration.prepend Multiverse::Migration
47
- ActiveRecord::Migrator.prepend Multiverse::Migrator
48
- ActiveRecord::SchemaDumper.singleton_class.prepend Multiverse::SchemaDumper
49
- end
@@ -11,5 +11,11 @@ module Multiverse
11
11
  Multiverse.migrate_path
12
12
  end
13
13
  end
14
+
15
+ module MigrationTemplate
16
+ def migration_template(source, destination, config = {})
17
+ super(source, destination.sub("db/migrate", Multiverse.migrate_path), config)
18
+ end
19
+ end
14
20
  end
15
21
  end
@@ -3,58 +3,59 @@ require "rails/railtie"
3
3
  module Multiverse
4
4
  class Railtie < Rails::Railtie
5
5
  generators do
6
- require "rails/generators/active_record/migration"
7
- ActiveRecord::Generators::Migration.prepend(Multiverse::Generators::Migration)
6
+ if ActiveRecord::VERSION::MAJOR >= 5
7
+ require "rails/generators/active_record/migration"
8
+ ActiveRecord::Generators::Migration.prepend(Multiverse::Generators::Migration)
9
+ else
10
+ require "rails/generators/migration"
11
+ Rails::Generators::Migration.prepend(Multiverse::Generators::MigrationTemplate)
12
+ end
8
13
 
9
14
  require "rails/generators/active_record/model/model_generator"
10
15
  ActiveRecord::Generators::ModelGenerator.prepend(Multiverse::Generators::ModelGenerator)
16
+
17
+ # for Rails < 5.0.3, need to patch db_migrate_path in model and migration generator
18
+ if ActiveRecord::VERSION::MAJOR == 5 && ActiveRecord.version < Gem::Version.new("5.0.3")
19
+ ActiveRecord::Generators::ModelGenerator.prepend(Multiverse::Generators::Migration)
20
+
21
+ require "rails/generators/active_record/migration/migration_generator"
22
+ ActiveRecord::Generators::MigrationGenerator.prepend(Multiverse::Generators::Migration)
23
+ end
11
24
  end
12
25
 
13
26
  rake_tasks do
14
- namespace :db do
27
+ namespace :multiverse do
15
28
  task :load_config do
16
- ActiveRecord::Tasks::DatabaseTasks.migrations_paths = [Multiverse.migrate_path]
17
- ActiveRecord::Tasks::DatabaseTasks.db_dir = [Multiverse.db_dir]
18
- Rails.application.paths["db/seeds.rb"] = ["#{Multiverse.db_dir}/seeds.rb"]
19
- end
20
-
21
- namespace :test do
22
- task load_schema: %w(db:test:purge) do
23
- begin
24
- should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
25
- ActiveRecord::Schema.verbose = false
26
- ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations[Multiverse.env("test")], :ruby, ENV["SCHEMA"]
27
- ensure
28
- if should_reconnect
29
- ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[Multiverse.env(ActiveRecord::Tasks::DatabaseTasks.env)])
29
+ if Multiverse.db
30
+ ActiveRecord::Tasks::DatabaseTasks.migrations_paths = [Multiverse.migrate_path]
31
+ ActiveRecord::Tasks::DatabaseTasks.db_dir = [Multiverse.db_dir]
32
+ Rails.application.paths["db/seeds.rb"] = ["#{Multiverse.db_dir}/seeds.rb"]
33
+
34
+ if ActiveRecord::Tasks::DatabaseTasks.database_configuration
35
+ new_config = {}
36
+ Rails.application.config.database_configuration.each do |env, config|
37
+ if env.start_with?("#{Multiverse.db}_")
38
+ new_config[env.sub("#{Multiverse.db}_", "")] = config
39
+ end
30
40
  end
41
+ ActiveRecord::Tasks::DatabaseTasks.database_configuration.merge!(new_config)
31
42
  end
32
- end
33
43
 
34
- task load_structure: %w(db:test:purge) do
35
- ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations[Multiverse.env("test")], :sql, ENV["SCHEMA"]
36
- end
44
+ # load config
45
+ ActiveRecord::Base.configurations = ActiveRecord::Tasks::DatabaseTasks.database_configuration || {}
46
+ ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
47
+
48
+ ActiveRecord::Base.establish_connection
37
49
 
38
- task purge: %w(environment load_config check_protected_environments) do
39
- ActiveRecord::Tasks::DatabaseTasks.purge ActiveRecord::Base.configurations[Multiverse.env("test")]
50
+ # need this to run again if environment is loaded afterwards
51
+ Rake::Task["db:load_config"].reenable
40
52
  end
41
53
  end
42
54
  end
43
55
 
44
- namespace :multiverse do
45
- task :load_config do
46
- ActiveRecord::Base.establish_connection(Multiverse.record_class.connection_config)
47
- end
48
-
49
- task :override_config do
50
- ActiveRecord::Tasks::DatabaseTasks.current_config = ActiveRecord::Base.configurations[Multiverse.env(ActiveRecord::Tasks::DatabaseTasks.env)]
51
- end
56
+ Rake::Task["db:load_config"].enhance do
57
+ Rake::Task["multiverse:load_config"].execute
52
58
  end
53
-
54
- Rake::Task["db:migrate:status"].enhance ["multiverse:load_config"]
55
- Rake::Task["db:structure:dump"].enhance ["multiverse:load_config", "multiverse:override_config"]
56
- Rake::Task["db:schema:cache:dump"].enhance ["multiverse:load_config"]
57
- Rake::Task["db:version"].enhance ["multiverse:load_config"]
58
59
  end
59
60
  end
60
61
  end
@@ -1,3 +1,3 @@
1
1
  module Multiverse
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -19,7 +19,9 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "rails", ">= 5"
22
+ spec.add_dependency "activesupport", ">= 4.2"
23
+ spec.add_dependency "activerecord", ">= 4.2"
24
+ spec.add_dependency "railties", ">= 4.2"
23
25
 
24
26
  spec.add_development_dependency "bundler"
25
27
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,29 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multiverse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-19 00:00:00.000000000 Z
11
+ date: 2018-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5'
19
+ version: '4.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '5'
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '4.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '4.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: railties
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '4.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '4.2'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: bundler
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +126,6 @@ files:
98
126
  - lib/generators/multiverse/templates/record.rb
99
127
  - lib/multiverse.rb
100
128
  - lib/multiverse/generators.rb
101
- - lib/multiverse/patches.rb
102
129
  - lib/multiverse/railtie.rb
103
130
  - lib/multiverse/version.rb
104
131
  - multiverse.gemspec
@@ -1,54 +0,0 @@
1
- module Multiverse
2
- module DatabaseTasks
3
- def each_current_configuration(environment)
4
- environments = [Multiverse.env(environment)]
5
- environments << Multiverse.env("test") if environment == "development"
6
-
7
- self.migrations_paths = Multiverse.migrate_path
8
- self.db_dir = Multiverse.db_dir
9
-
10
- configurations = ActiveRecord::Base.configurations.values_at(*environments)
11
- configurations.compact.each do |configuration|
12
- yield configuration unless configuration['database'].blank?
13
- end
14
- end
15
- end
16
-
17
- module Migrator
18
- def initialize(*_)
19
- # ActiveRecord::Migration#initialize calls
20
- # ActiveRecord::SchemaMigration.create_table and
21
- # ActiveRecord::InternalMetadata.create_table
22
- # which both inherit from ActiveRecord::Base
23
- #
24
- # We need to change this for migrations
25
- # but not for db:schema:load, as this
26
- # will mess up the Multiverse test environment
27
- ActiveRecord::SchemaMigration.singleton_class.prepend(Multiverse::Connection)
28
- ActiveRecord::InternalMetadata.singleton_class.prepend(Multiverse::Connection)
29
- super
30
- end
31
- end
32
-
33
- module Connection
34
- def connection
35
- Multiverse.record_class.connection
36
- end
37
- end
38
-
39
- module Migration
40
- # TODO don't checkout main connection at all
41
- def exec_migration(_, direction)
42
- Multiverse.record_class.connection_pool.with_connection do |conn|
43
- super(conn, direction)
44
- end
45
- end
46
- end
47
-
48
- module SchemaDumper
49
- def dump(connection = ActiveRecord::Base.connection, stream = STDOUT, config = ActiveRecord::Base)
50
- new(Multiverse.record_class.connection, generate_options(Multiverse.record_class)).dump(stream)
51
- stream
52
- end
53
- end
54
- end