combustion 0.7.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +2 -1
- data/.rubocop.yml +39 -0
- data/.travis.yml +5 -5
- data/Appraisals +17 -0
- data/Gemfile +2 -0
- data/HISTORY +12 -0
- data/README.md +2 -2
- data/Rakefile +11 -1
- data/combustion.gemspec +26 -22
- data/exe/combust +3 -2
- data/gemfiles/rails_3.1.gemfile +1 -0
- data/gemfiles/rails_3.2.gemfile +1 -0
- data/gemfiles/rails_4.0.gemfile +1 -0
- data/gemfiles/rails_4.1.gemfile +1 -0
- data/gemfiles/rails_4.2.gemfile +2 -0
- data/gemfiles/rails_5.0.gemfile +2 -0
- data/gemfiles/rails_5.1.gemfile +2 -0
- data/gemfiles/rails_5.2.gemfile +8 -0
- data/lib/combustion/application.rb +23 -28
- data/lib/combustion/configurations/action_controller.rb +11 -0
- data/lib/combustion/configurations/action_mailer.rb +10 -0
- data/lib/combustion/configurations/active_record.rb +13 -0
- data/lib/combustion/database/load_schema.rb +14 -4
- data/lib/combustion/database/migrate.rb +29 -12
- data/lib/combustion/database/reset.rb +40 -21
- data/lib/combustion/database.rb +23 -14
- data/lib/combustion/databases/base.rb +4 -2
- data/lib/combustion/databases/firebird.rb +3 -1
- data/lib/combustion/databases/mysql.rb +55 -26
- data/lib/combustion/databases/oracle.rb +3 -1
- data/lib/combustion/databases/postgresql.rb +12 -11
- data/lib/combustion/databases/sql_server.rb +4 -2
- data/lib/combustion/databases/sqlite.rb +9 -7
- data/lib/combustion/generator.rb +16 -14
- data/lib/combustion.rb +34 -22
- data/spec/database_spec.rb +16 -12
- data/spec/dummy/db/migrate/20150717075542_create_dummy_test_table.rb +3 -1
- data/spec/dummy/db/migrate/20150717075543_create_dummy_test_table_in_another_db.rb +3 -1
- data/spec/dummy/lib/engine.rb +3 -1
- data/spec/dummy/spec/internal/app/models/model.rb +3 -1
- data/spec/dummy/spec/internal/app/models/model_in_another_db.rb +3 -1
- data/spec/dummy/spec/internal/config/routes.rb +3 -1
- data/spec/dummy/spec/internal/db/schema.rb +4 -1
- data/spec/spec_helper.rb +7 -6
- data/templates/config.ru +4 -2
- data/templates/routes.rb +3 -1
- data/templates/schema.rb +4 -1
- metadata +22 -4
- data/bin/literals +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0c1a369737ff21b225eee681a7ca0258f87a6141870885bc7cf4ce29ef6fd10c
|
4
|
+
data.tar.gz: 88f61f3c7f3d7f57b71f5be4a351c1bd93c374a81c5fcf76d8f2e6eae299de77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5133bd2a0a3359d5562e0a62cd0561d63f7ce067bcf52773a48e09c1d54e1a7bdf2186683e87f82b98524f129a3e5c29aae792ccb0d1efd2f49abdfe556773f
|
7
|
+
data.tar.gz: 59f5f629ab28a8c6578e03617cedaec720a289917d4a1a37b1b713f63e0caf826aafe6f4addd8d0f78fb213abd173a6657b57cb4a9f87c764bcfd1f8a69571be
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
inherit_from:
|
2
|
+
- https://gist.githubusercontent.com/pat/ba3b8ffb1901bfe5439b460943b6b019/raw/.rubocop.yml
|
3
|
+
|
4
|
+
AllCops:
|
5
|
+
TargetRubyVersion: 2.2
|
6
|
+
|
7
|
+
Bundler/OrderedGems:
|
8
|
+
Exclude:
|
9
|
+
- 'gemfiles/*'
|
10
|
+
|
11
|
+
Layout/DotPosition:
|
12
|
+
EnforcedStyle: trailing
|
13
|
+
|
14
|
+
Layout/CaseIndentation:
|
15
|
+
EnforcedStyle: end
|
16
|
+
|
17
|
+
Layout/EndAlignment:
|
18
|
+
EnforcedStyleAlignWith: variable
|
19
|
+
|
20
|
+
Layout/IndentHeredoc:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Metrics/BlockLength:
|
24
|
+
Exclude:
|
25
|
+
- 'combustion.gemspec'
|
26
|
+
|
27
|
+
Style/ClassAndModuleChildren:
|
28
|
+
Enabled: false
|
29
|
+
|
30
|
+
Style/Documentation:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
Style/FrozenStringLiteralComment:
|
34
|
+
Exclude:
|
35
|
+
- 'gemfiles/*'
|
36
|
+
|
37
|
+
Style/MultilineTernaryOperator:
|
38
|
+
Exclude:
|
39
|
+
- 'spec/dummy/db/migrate/*.rb'
|
data/.travis.yml
CHANGED
@@ -5,16 +5,16 @@ env:
|
|
5
5
|
- "DB_ADAPTER=postgresql"
|
6
6
|
- "DB_ADAPTER=mysql2"
|
7
7
|
rvm:
|
8
|
-
- 2.2.
|
9
|
-
- 2.3.
|
10
|
-
- 2.4.
|
8
|
+
- 2.2.10
|
9
|
+
- 2.3.7
|
10
|
+
- 2.4.4
|
11
|
+
- 2.5.1
|
11
12
|
before_install:
|
12
13
|
- gem update --system
|
13
14
|
- gem install bundler
|
14
15
|
before_script:
|
15
|
-
- ./bin/literals
|
16
16
|
- bundle exec appraisal install
|
17
|
-
script: 'bundle exec appraisal
|
17
|
+
script: 'bundle exec appraisal rake'
|
18
18
|
services:
|
19
19
|
- mysql
|
20
20
|
- postgresql
|
data/Appraisals
CHANGED
@@ -1,33 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
if RUBY_VERSION.to_f <= 2.3
|
2
4
|
appraise "rails-3.1" do
|
3
5
|
gem "rails", "~> 3.1.12"
|
4
6
|
gem "mysql2", "~> 0.3.10"
|
7
|
+
gem "pg", "< 1.0"
|
5
8
|
end
|
6
9
|
|
7
10
|
appraise "rails-3.2" do
|
8
11
|
gem "rails", "~> 3.2.22.5"
|
9
12
|
gem "mysql2", "~> 0.3.10"
|
13
|
+
gem "pg", "< 1.0"
|
10
14
|
end
|
11
15
|
|
12
16
|
appraise "rails-4.0" do
|
13
17
|
gem "rails", "~> 4.0.13"
|
14
18
|
gem "mysql2", "~> 0.3.10"
|
19
|
+
gem "pg", "< 1.0"
|
15
20
|
end
|
16
21
|
|
17
22
|
appraise "rails-4.1" do
|
18
23
|
gem "rails", "~> 4.1.16"
|
19
24
|
gem "mysql2", "~> 0.3.13"
|
25
|
+
gem "pg", "< 1.0"
|
20
26
|
end
|
21
27
|
|
22
28
|
appraise "rails-4.2" do
|
23
29
|
gem "rails", "~> 4.2.8"
|
30
|
+
gem "mysql2", "~> 0.4.4"
|
31
|
+
gem "pg", "< 1.0"
|
24
32
|
end
|
25
33
|
end
|
26
34
|
|
27
35
|
appraise "rails-5.0" do
|
28
36
|
gem "rails", "~> 5.0.2"
|
37
|
+
gem "mysql2", "~> 0.4.4"
|
38
|
+
gem "pg", "< 1.0"
|
29
39
|
end
|
30
40
|
|
31
41
|
appraise "rails-5.1" do
|
32
42
|
gem "rails", "~> 5.1.0"
|
43
|
+
gem "mysql2", "~> 0.4.4"
|
44
|
+
gem "pg", "< 1.0"
|
45
|
+
end
|
46
|
+
|
47
|
+
appraise "rails-5.2" do
|
48
|
+
gem "rails", "~> 5.2.0"
|
49
|
+
gem "mysql2", "~> 0.5.0"
|
33
50
|
end
|
data/Gemfile
CHANGED
data/HISTORY
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
0.9.1 - April 25th 2018
|
2
|
+
* Fix Rails 5.2 compatibility by not setting the deprecated secret_token configuration option.
|
3
|
+
|
4
|
+
0.9.0 - March 26th 2018
|
5
|
+
* Only reset databases that are either custom or the current one (Moritz Winter).
|
6
|
+
* More consistency around environment handling (rather than presuming it's always the test environment).
|
7
|
+
|
8
|
+
0.8.0 - February 1st 2018
|
9
|
+
* Rails 5.2.0 support.
|
10
|
+
* Requiring digest from std-lib directly.
|
11
|
+
* Refactoring for cleaner code.
|
12
|
+
|
1
13
|
0.7.0 - June 20th 2017
|
2
14
|
* Confirm support for MRI frozen string literals.
|
3
15
|
* Hide migration output (Michael Grosser).
|
data/README.md
CHANGED
@@ -10,10 +10,10 @@ Get the gem into either your gemspec or your Gemfile, depending on how you manag
|
|
10
10
|
|
11
11
|
```ruby
|
12
12
|
# gemspec
|
13
|
-
gem.add_development_dependency 'combustion', '~> 0.
|
13
|
+
gem.add_development_dependency 'combustion', '~> 0.9.1'
|
14
14
|
|
15
15
|
# Gemfile
|
16
|
-
gem 'combustion', '~> 0.
|
16
|
+
gem 'combustion', '~> 0.9.1'
|
17
17
|
```
|
18
18
|
|
19
19
|
In your `spec_helper.rb`, get Combustion to set itself up - which has to happen before you introduce `rspec/rails` and - if being used - `capybara/rails`. Here's an example within context:
|
data/Rakefile
CHANGED
@@ -1 +1,11 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
require "rspec/core/rake_task"
|
5
|
+
require "rubocop/rake_task"
|
6
|
+
|
7
|
+
RSpec::Core::RakeTask.new(:spec)
|
8
|
+
RuboCop::RakeTask.new(:rubocop)
|
9
|
+
|
10
|
+
Rake::Task["default"].clear if Rake::Task.task_defined?("default")
|
11
|
+
task :default => %i[ rubocop spec ]
|
data/combustion.gemspec
CHANGED
@@ -1,30 +1,34 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
Gem::Specification.new do |s|
|
3
|
-
s.name =
|
4
|
-
s.version =
|
5
|
-
s.authors = [
|
6
|
-
s.email = [
|
7
|
-
s.homepage =
|
8
|
-
s.summary =
|
9
|
-
s.description =
|
10
|
-
s.license =
|
4
|
+
s.name = "combustion"
|
5
|
+
s.version = "0.9.1"
|
6
|
+
s.authors = ["Pat Allan"]
|
7
|
+
s.email = ["pat@freelancing-gods.com"]
|
8
|
+
s.homepage = "https://github.com/pat/combustion"
|
9
|
+
s.summary = "Elegant Rails Engine Testing"
|
10
|
+
s.description = "Test your Rails Engines without needing a full Rails app"
|
11
|
+
s.license = "MIT"
|
11
12
|
|
12
|
-
s.rubyforge_project =
|
13
|
+
s.rubyforge_project = "combustion"
|
13
14
|
|
14
15
|
s.files = `git ls-files`.split("\n")
|
15
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
-
s.executables = `git ls-files -- exe/*`.split("\n").map
|
17
|
-
|
18
|
-
|
17
|
+
s.executables = `git ls-files -- exe/*`.split("\n").map do |file|
|
18
|
+
File.basename(file)
|
19
|
+
end
|
20
|
+
s.bindir = "exe"
|
21
|
+
s.require_paths = ["lib"]
|
19
22
|
|
20
|
-
s.add_runtime_dependency
|
21
|
-
s.add_runtime_dependency
|
22
|
-
s.add_runtime_dependency
|
23
|
+
s.add_runtime_dependency "activesupport", ">= 3.0.0"
|
24
|
+
s.add_runtime_dependency "railties", ">= 3.0.0"
|
25
|
+
s.add_runtime_dependency "thor", ">= 0.14.6"
|
23
26
|
|
24
|
-
s.add_development_dependency
|
25
|
-
s.add_development_dependency
|
26
|
-
s.add_development_dependency
|
27
|
-
s.add_development_dependency
|
28
|
-
s.add_development_dependency
|
29
|
-
s.add_development_dependency
|
27
|
+
s.add_development_dependency "appraisal", "~> 2.1.0"
|
28
|
+
s.add_development_dependency "mysql2"
|
29
|
+
s.add_development_dependency "pg"
|
30
|
+
s.add_development_dependency "rails"
|
31
|
+
s.add_development_dependency "rspec"
|
32
|
+
s.add_development_dependency "rubocop", "~> 0.54.0"
|
33
|
+
s.add_development_dependency "sqlite3"
|
30
34
|
end
|
data/exe/combust
CHANGED
data/gemfiles/rails_3.1.gemfile
CHANGED
data/gemfiles/rails_3.2.gemfile
CHANGED
data/gemfiles/rails_4.0.gemfile
CHANGED
data/gemfiles/rails_4.1.gemfile
CHANGED
data/gemfiles/rails_4.2.gemfile
CHANGED
data/gemfiles/rails_5.0.gemfile
CHANGED
data/gemfiles/rails_5.1.gemfile
CHANGED
@@ -1,15 +1,21 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "securerandom"
|
4
|
+
require "digest"
|
5
|
+
Rails.env = ENV["RAILS_ENV"] || "test"
|
3
6
|
|
4
7
|
module Combustion
|
5
8
|
class Application < Rails::Application
|
9
|
+
version = Rails.version.to_f
|
10
|
+
|
6
11
|
# Core Settings
|
7
12
|
config.cache_classes = true
|
8
|
-
config.whiny_nils = true if Rails.version.to_s < '4.0.0'
|
9
13
|
config.consider_all_requests_local = true
|
10
|
-
config.secret_token = Digest::SHA1.hexdigest Time.now.to_s
|
11
14
|
config.eager_load = Rails.env.production?
|
12
|
-
|
15
|
+
|
16
|
+
config.secret_key_base = SecureRandom.hex if version >= 4.0
|
17
|
+
config.whiny_nils = true if version < 4.0
|
18
|
+
config.secret_token = Digest::SHA1.hexdigest Time.now.to_s if version < 5.2
|
13
19
|
|
14
20
|
# ActiveSupport Settings
|
15
21
|
config.active_support.deprecation = :stderr
|
@@ -20,31 +26,20 @@ module Combustion
|
|
20
26
|
def self.configure_for_combustion
|
21
27
|
config.root = File.expand_path File.join(Dir.pwd, Combustion.path)
|
22
28
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
if defined?(ActionController::Railtie)
|
31
|
-
config.action_dispatch.show_exceptions = false
|
32
|
-
config.action_controller.perform_caching = false
|
33
|
-
config.action_controller.allow_forgery_protection = false
|
34
|
-
end
|
35
|
-
|
36
|
-
if defined?(ActionMailer::Railtie)
|
37
|
-
config.action_mailer.delivery_method = :test
|
38
|
-
config.action_mailer.default_url_options = {:host => 'www.example.com'}
|
39
|
-
end
|
40
|
-
|
41
|
-
if defined?(Sprockets)
|
42
|
-
config.assets.enabled = true
|
43
|
-
end
|
29
|
+
Combustion::Configurations::ActiveRecord.call config
|
30
|
+
Combustion::Configurations::ActionController.call config
|
31
|
+
Combustion::Configurations::ActionMailer.call config
|
32
|
+
|
33
|
+
config.assets.enabled = true if defined?(Sprockets)
|
44
34
|
end
|
45
35
|
|
46
|
-
initializer
|
47
|
-
|
36
|
+
initializer(
|
37
|
+
:load_customized_environment_for_combustion,
|
38
|
+
:before => :load_environment_config,
|
39
|
+
:group => :all
|
40
|
+
) do
|
41
|
+
next unless Combustion.setup_environment
|
42
|
+
Combustion::Application.class_eval(&Combustion.setup_environment)
|
48
43
|
end
|
49
44
|
end
|
50
45
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Combustion::Configurations::ActionController
|
4
|
+
def self.call(config)
|
5
|
+
return unless defined?(ActionController::Railtie)
|
6
|
+
|
7
|
+
config.action_dispatch.show_exceptions = false
|
8
|
+
config.action_controller.perform_caching = false
|
9
|
+
config.action_controller.allow_forgery_protection = false
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Combustion::Configurations::ActionMailer
|
4
|
+
def self.call(config)
|
5
|
+
return unless defined?(ActionMailer::Railtie)
|
6
|
+
|
7
|
+
config.action_mailer.delivery_method = :test
|
8
|
+
config.action_mailer.default_url_options = {:host => "www.example.com"}
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Combustion::Configurations::ActiveRecord
|
4
|
+
def self.call(config)
|
5
|
+
return unless defined?(ActiveRecord::Railtie)
|
6
|
+
return unless ::ActiveRecord.constants.include?(:MassAssignmentSecurity)
|
7
|
+
|
8
|
+
# Turn on ActiveRecord attribute whitelisting
|
9
|
+
# This way the dummy app matches new rails apps re: this setting
|
10
|
+
config.active_record.whitelist_attributes = true
|
11
|
+
config.active_record.mass_assignment_sanitizer = :strict
|
12
|
+
end
|
13
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Combustion::Database::LoadSchema
|
2
4
|
UnknownSchemaFormat = Class.new StandardError
|
3
5
|
|
@@ -10,11 +12,9 @@ class Combustion::Database::LoadSchema
|
|
10
12
|
|
11
13
|
case schema_format
|
12
14
|
when :ruby
|
13
|
-
|
15
|
+
load_ruby_schema
|
14
16
|
when :sql
|
15
|
-
|
16
|
-
File.read(Rails.root.join('db', 'structure.sql'))
|
17
|
-
)
|
17
|
+
load_sql_schema
|
18
18
|
else
|
19
19
|
raise UnknownSchemaFormat, "Unknown schema format: #{schema_format}"
|
20
20
|
end
|
@@ -22,6 +22,16 @@ class Combustion::Database::LoadSchema
|
|
22
22
|
|
23
23
|
private
|
24
24
|
|
25
|
+
def load_ruby_schema
|
26
|
+
load Rails.root.join("db", "schema.rb")
|
27
|
+
end
|
28
|
+
|
29
|
+
def load_sql_schema
|
30
|
+
ActiveRecord::Base.connection.execute(
|
31
|
+
File.read(Rails.root.join("db", "structure.sql"))
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
25
35
|
def schema_format
|
26
36
|
Combustion.schema_format
|
27
37
|
end
|
@@ -1,10 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Combustion::Database::Migrate
|
2
4
|
def self.call
|
3
5
|
new.call
|
4
6
|
end
|
5
7
|
|
6
8
|
def call
|
7
|
-
if ActiveRecord::VERSION::STRING >=
|
9
|
+
if ActiveRecord::VERSION::STRING.to_f >= 5.2
|
10
|
+
migration_context.migrate
|
11
|
+
elsif ActiveRecord::VERSION::STRING.to_f >= 3.1
|
8
12
|
migrator.migrate paths, nil
|
9
13
|
else
|
10
14
|
paths.each { |path| migrator.migrate path, nil }
|
@@ -17,24 +21,37 @@ class Combustion::Database::Migrate
|
|
17
21
|
if migrator.respond_to?(:migrations_paths)
|
18
22
|
migrator.migrations_paths
|
19
23
|
else
|
20
|
-
Array(
|
24
|
+
Array("db/migrate/")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def engine_migration_paths
|
29
|
+
migration_paths = Rails.application.paths["db/migrate"].to_a
|
30
|
+
|
31
|
+
if engine_paths_exist_in?(migration_paths)
|
32
|
+
migration_paths
|
33
|
+
else
|
34
|
+
base_migration_paths + migration_paths
|
21
35
|
end
|
22
36
|
end
|
23
37
|
|
38
|
+
def engine_path
|
39
|
+
Rails.application.root.sub(::Combustion.path, "")
|
40
|
+
end
|
41
|
+
|
42
|
+
def engine_paths_exist_in?(paths)
|
43
|
+
paths.include?(engine_path.join("db/migrate").to_s)
|
44
|
+
end
|
45
|
+
|
46
|
+
def migration_context
|
47
|
+
ActiveRecord::MigrationContext.new paths
|
48
|
+
end
|
49
|
+
|
24
50
|
def migrator
|
25
51
|
@migrator ||= ActiveRecord::Migrator
|
26
52
|
end
|
27
53
|
|
28
54
|
def paths
|
29
|
-
|
30
|
-
migration_paths = Rails.application.paths['db/migrate'].to_a
|
31
|
-
|
32
|
-
if migration_paths.include?(engine_path.join('db/migrate').to_s)
|
33
|
-
paths = []
|
34
|
-
else
|
35
|
-
paths = base_migration_paths
|
36
|
-
end
|
37
|
-
|
38
|
-
(paths + migration_paths + [File.join(Rails.root, 'db/migrate')]).uniq
|
55
|
+
(engine_migration_paths + [File.join(Rails.root, "db/migrate")]).uniq
|
39
56
|
end
|
40
57
|
end
|
@@ -1,20 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Combustion::Database::Reset
|
2
4
|
UnsupportedDatabase = Class.new StandardError
|
3
5
|
|
6
|
+
OPERATOR_PATTERNS = {
|
7
|
+
Combustion::Databases::MySQL => [/mysql/],
|
8
|
+
Combustion::Databases::PostgreSQL => [/postgres/, /postgis/],
|
9
|
+
Combustion::Databases::SQLite => [/sqlite/],
|
10
|
+
Combustion::Databases::SQLServer => [/sqlserver/],
|
11
|
+
Combustion::Databases::Oracle => %w[ oci oracle ],
|
12
|
+
Combustion::Databases::Firebird => %w[ firebird ]
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
RAILS_DEFAULT_ENVIRONMENTS = %w[ development production test ].freeze
|
16
|
+
|
4
17
|
def self.call
|
5
18
|
new.call
|
6
19
|
end
|
7
20
|
|
8
21
|
def initialize
|
9
|
-
ActiveRecord::Base.configurations = YAML.
|
10
|
-
ERB.new(
|
22
|
+
ActiveRecord::Base.configurations = YAML.safe_load(
|
23
|
+
ERB.new(database_yaml).result, [], [], true
|
11
24
|
)
|
12
25
|
end
|
13
26
|
|
14
27
|
def call
|
15
|
-
|
16
|
-
adapter = configuration[
|
17
|
-
configuration[
|
28
|
+
resettable_db_configs.each_value do |configuration|
|
29
|
+
adapter = configuration["adapter"] ||
|
30
|
+
configuration["url"].split("://").first
|
18
31
|
|
19
32
|
operator_class(adapter).new(configuration).reset
|
20
33
|
end
|
@@ -22,23 +35,29 @@ class Combustion::Database::Reset
|
|
22
35
|
|
23
36
|
private
|
24
37
|
|
38
|
+
def database_yaml
|
39
|
+
File.read "#{Rails.root}/config/database.yml"
|
40
|
+
end
|
41
|
+
|
25
42
|
def operator_class(adapter)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
43
|
+
klass = nil
|
44
|
+
OPERATOR_PATTERNS.each do |operator, keys|
|
45
|
+
klass = operator if keys.any? { |key| adapter[key] }
|
46
|
+
end
|
47
|
+
return klass if klass
|
48
|
+
|
49
|
+
raise UnsupportedDatabase, "Unsupported database type: #{adapter}"
|
50
|
+
end
|
51
|
+
|
52
|
+
# All database configs except Rails default environments
|
53
|
+
# that are not currently in use
|
54
|
+
def resettable_db_configs
|
55
|
+
unused_environments = RAILS_DEFAULT_ENVIRONMENTS - [Rails.env.to_s]
|
56
|
+
resettable_environments = ActiveRecord::Base.configurations.keys -
|
57
|
+
unused_environments
|
58
|
+
|
59
|
+
ActiveRecord::Base.configurations.select do |name|
|
60
|
+
resettable_environments.include?(name)
|
42
61
|
end
|
43
62
|
end
|
44
63
|
end
|