ardb 0.27.3 → 0.29.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 +7 -7
- data/Gemfile +4 -5
- data/README.md +252 -3
- data/ardb.gemspec +8 -8
- data/bin/ardb +1 -1
- data/lib/ardb.rb +155 -72
- data/lib/ardb/adapter/base.rb +67 -47
- data/lib/ardb/adapter/mysql.rb +3 -19
- data/lib/ardb/adapter/postgresql.rb +33 -37
- data/lib/ardb/adapter/sqlite.rb +7 -16
- data/lib/ardb/adapter_spy.rb +58 -92
- data/lib/ardb/cli.rb +18 -226
- data/lib/ardb/{clirb.rb → cli/clirb.rb} +16 -18
- data/lib/ardb/cli/commands.rb +365 -0
- data/lib/ardb/db_tests.rb +2 -4
- data/lib/ardb/default_order_by.rb +3 -13
- data/lib/ardb/migration.rb +18 -20
- data/lib/ardb/record_spy.rb +7 -26
- data/lib/ardb/relation_spy.rb +0 -6
- data/lib/ardb/require_autoloaded_active_record_files.rb +103 -58
- data/lib/ardb/test_helpers.rb +2 -5
- data/lib/ardb/use_db_default.rb +4 -15
- data/lib/ardb/version.rb +1 -1
- data/script/determine_autoloaded_active_record_files.rb +11 -8
- data/test/helper.rb +9 -6
- data/test/support/factory.rb +17 -2
- data/test/support/fake_schema.rb +5 -0
- data/test/support/postgresql/migrations/.keep +0 -0
- data/test/support/postgresql/schema.rb +2 -0
- data/test/support/postgresql/setup_test_db.rb +51 -0
- data/test/support/relative_require_test_db_file.rb +2 -0
- data/test/support/require_test_db_file.rb +1 -0
- data/test/system/.keep +0 -0
- data/test/unit/adapter/base_tests.rb +163 -75
- data/test/unit/adapter/mysql_tests.rb +4 -20
- data/test/unit/adapter/postgresql_tests.rb +20 -28
- data/test/unit/adapter/sqlite_tests.rb +9 -12
- data/test/unit/adapter_spy_tests.rb +48 -71
- data/test/unit/ardb_tests.rb +338 -38
- data/test/unit/cli_tests.rb +334 -225
- data/test/unit/db_tests_tests.rb +3 -6
- data/test/unit/default_order_by_tests.rb +4 -8
- data/test/unit/migration_tests.rb +20 -17
- data/test/unit/record_spy_tests.rb +18 -23
- data/test/unit/relation_spy_tests.rb +17 -46
- data/test/unit/test_helpers_tests.rb +5 -20
- data/test/unit/use_db_default_tests.rb +9 -13
- metadata +111 -100
- data/lib/ardb/has_slug.rb +0 -107
- data/lib/ardb/migration_helpers.rb +0 -77
- data/lib/ardb/root_path.rb +0 -15
- data/test/unit/config_tests.rb +0 -58
- data/test/unit/has_slug_tests.rb +0 -341
- data/test/unit/migration_helpers_tests.rb +0 -59
data/lib/ardb/use_db_default.rb
CHANGED
@@ -1,22 +1,16 @@
|
|
1
|
-
require
|
1
|
+
require "much-plugin"
|
2
2
|
|
3
3
|
module Ardb
|
4
|
-
|
5
4
|
module UseDbDefault
|
6
5
|
include MuchPlugin
|
7
6
|
|
8
7
|
plugin_included do
|
9
|
-
extend ClassMethods
|
10
|
-
include InstanceMethods
|
11
|
-
|
12
8
|
@ardb_use_db_default_attrs = []
|
13
9
|
|
14
10
|
around_create :ardb_allow_db_to_default_attrs
|
15
|
-
|
16
11
|
end
|
17
12
|
|
18
|
-
|
19
|
-
|
13
|
+
plugin_class_methods do
|
20
14
|
def ardb_use_db_default_attrs
|
21
15
|
@ardb_use_db_default_attrs
|
22
16
|
end
|
@@ -25,11 +19,9 @@ module Ardb
|
|
25
19
|
@ardb_use_db_default_attrs += attrs.map(&:to_s)
|
26
20
|
@ardb_use_db_default_attrs.uniq!
|
27
21
|
end
|
28
|
-
|
29
22
|
end
|
30
23
|
|
31
|
-
|
32
|
-
|
24
|
+
plugin_instance_methods do
|
33
25
|
private
|
34
26
|
|
35
27
|
def ardb_allow_db_to_default_attrs
|
@@ -42,15 +34,12 @@ module Ardb
|
|
42
34
|
unchanged_names.each{ |name| @attributes.delete(name) }
|
43
35
|
yield
|
44
36
|
# we have to go and fetch the attr value from the DB, otherwise
|
45
|
-
# activerecord doesn
|
37
|
+
# activerecord doesn"t know the value that the DB used
|
46
38
|
scope = self.class.where(:id => self.id)
|
47
39
|
unchanged_names.each do |name|
|
48
40
|
@attributes[name] = scope.pluck(name).first
|
49
41
|
end
|
50
42
|
end
|
51
|
-
|
52
43
|
end
|
53
|
-
|
54
44
|
end
|
55
|
-
|
56
45
|
end
|
data/lib/ardb/version.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require "active_record"
|
2
2
|
|
3
|
-
# this can be slow, this is one of the reasons this shouldn
|
3
|
+
# this can be slow, this is one of the reasons this shouldn"t be done during
|
4
4
|
# the startup of our apps
|
5
|
-
gemspec = Gem.loaded_specs[
|
5
|
+
gemspec = Gem.loaded_specs["activerecord"]
|
6
6
|
|
7
7
|
puts "Looking at files in: "
|
8
8
|
puts " #{gemspec.lib_dirs_glob.inspect}"
|
@@ -11,15 +11,18 @@ paths = Dir["#{gemspec.lib_dirs_glob}/**/*.rb"]
|
|
11
11
|
|
12
12
|
# these are regexs for files we want to ignore requiring. for example,
|
13
13
|
# generators fail when we try to require them. the others are pieces of active
|
14
|
-
# record we don
|
14
|
+
# record we don"t use in a production environment
|
15
15
|
ignored_regexes = [
|
16
16
|
/rails\/generators/,
|
17
17
|
/active_record\/railtie/,
|
18
18
|
/active_record\/migration/,
|
19
19
|
/active_record\/fixtures/,
|
20
|
+
/active_record\/fixture_set/,
|
20
21
|
/active_record\/schema/,
|
21
22
|
/active_record\/connection_adapters/,
|
22
23
|
/active_record\/test_case/,
|
24
|
+
/active_record\/test_databases/,
|
25
|
+
/active_record\/test_fixtures/,
|
23
26
|
/active_record\/coders\/yaml_column/
|
24
27
|
]
|
25
28
|
|
@@ -31,12 +34,12 @@ ignored = []
|
|
31
34
|
errored = []
|
32
35
|
|
33
36
|
paths.sort.each do |full_path|
|
34
|
-
relative_path_with_rb = full_path.gsub("#{gemspec.lib_dirs_glob}/",
|
35
|
-
relative_path = relative_path_with_rb.gsub(/\.rb\z/,
|
37
|
+
relative_path_with_rb = full_path.gsub("#{gemspec.lib_dirs_glob}/", "")
|
38
|
+
relative_path = relative_path_with_rb.gsub(/\.rb\z/, "")
|
36
39
|
|
37
40
|
result = Result.new(relative_path)
|
38
41
|
|
39
|
-
# see if it
|
42
|
+
# see if it"s ignored
|
40
43
|
ignored_regexes.each do |regex|
|
41
44
|
if relative_path =~ regex
|
42
45
|
result.state = :ignored
|
@@ -87,5 +90,5 @@ puts "\n"
|
|
87
90
|
|
88
91
|
puts "Needs To Be Required:\n"
|
89
92
|
needs_to_be_required.each do |result|
|
90
|
-
puts "require
|
93
|
+
puts "require \"#{result.file}\""
|
91
94
|
end
|
data/test/helper.rb
CHANGED
@@ -4,10 +4,13 @@
|
|
4
4
|
# add the root dir to the load path
|
5
5
|
$LOAD_PATH.unshift(File.expand_path("../..", __FILE__))
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
TEST_SUPPORT_PATH = File.expand_path("../support", __FILE__)
|
8
|
+
TMP_PATH = File.expand_path("../../tmp", __FILE__)
|
9
|
+
|
10
|
+
require "logger"
|
11
|
+
log_path = File.expand_path("../../log/test.log", __FILE__)
|
12
|
+
TEST_LOGGER = Logger.new(File.open(log_path, "w"))
|
10
13
|
|
11
|
-
|
12
|
-
require
|
13
|
-
|
14
|
+
# require pry for debugging (`binding.pry`)
|
15
|
+
require "pry"
|
16
|
+
require "test/support/factory"
|
data/test/support/factory.rb
CHANGED
@@ -1,11 +1,26 @@
|
|
1
|
-
require
|
1
|
+
require "assert/factory"
|
2
2
|
|
3
3
|
module Factory
|
4
4
|
extend Assert::Factory
|
5
5
|
|
6
6
|
def self.migration_id
|
7
|
-
# identifiers need to be plural b/c af activesupport
|
7
|
+
# identifiers need to be plural b/c af activesupport"s pluralize
|
8
8
|
"#{Factory.string}_things"
|
9
9
|
end
|
10
10
|
|
11
|
+
def self.ardb_config
|
12
|
+
Ardb::Config.new.tap do |c|
|
13
|
+
c.adapter = Factory.string
|
14
|
+
c.database = Factory.string
|
15
|
+
c.encoding = Factory.string
|
16
|
+
c.host = Factory.string
|
17
|
+
c.port = Factory.integer
|
18
|
+
c.username = Factory.string
|
19
|
+
c.password = Factory.string
|
20
|
+
c.pool = Factory.integer
|
21
|
+
c.checkout_timeout = Factory.integer
|
22
|
+
c.min_messages = Factory.string
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
11
26
|
end
|
File without changes
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "assert"
|
2
|
+
require "ardb"
|
3
|
+
|
4
|
+
class PostgresqlDbTests < Assert::Context
|
5
|
+
setup do
|
6
|
+
@orig_env_ardb_db_file = ENV["ARDB_DB_FILE"]
|
7
|
+
ActiveRecord::Base.logger = @orig_ar_loggerF
|
8
|
+
|
9
|
+
# no-op, we"re manually configuring ardb so we don"t need this to do anything
|
10
|
+
ENV["ARDB_DB_FILE"] = File.join(TEST_SUPPORT_PATH, "require_test_db_file")
|
11
|
+
|
12
|
+
@ardb_config = Ardb::Config.new.tap do |c|
|
13
|
+
c.adapter = "postgresql"
|
14
|
+
c.database = "redding_ardb_test"
|
15
|
+
c.encoding = "unicode"
|
16
|
+
c.min_messages = "WARNING"
|
17
|
+
|
18
|
+
c.logger = TEST_LOGGER
|
19
|
+
c.root_path = File.join(TEST_SUPPORT_PATH, "postgresql")
|
20
|
+
c.migrations_path = "migrations"
|
21
|
+
c.schema_path = "schema"
|
22
|
+
c.schema_format = :ruby
|
23
|
+
end
|
24
|
+
Assert.stub(Ardb, :config){ @ardb_config }
|
25
|
+
|
26
|
+
Ardb.init(false)
|
27
|
+
|
28
|
+
Ardb.adapter.drop_db
|
29
|
+
Ardb.adapter.create_db
|
30
|
+
Ardb.adapter.load_schema
|
31
|
+
Ardb.adapter.connect_db
|
32
|
+
end
|
33
|
+
teardown do
|
34
|
+
Ardb.reset_adapter
|
35
|
+
ActiveRecord::Base.logger = @orig_ar_logger
|
36
|
+
ENV["ARDB_DB_FILE"] = @orig_env_ardb_db_file
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
# useful when testing creating/dropping/migrating DBs
|
42
|
+
def silence_stdout
|
43
|
+
current_stdout = $stdout.dup
|
44
|
+
$stdout = File.new("/dev/null", "w")
|
45
|
+
begin
|
46
|
+
yield
|
47
|
+
ensure
|
48
|
+
$stdout = current_stdout
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
# this file is used to test that Ardb will require a db file when init
|
data/test/system/.keep
ADDED
File without changes
|
@@ -1,34 +1,44 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "assert"
|
2
|
+
require "ardb/adapter/base"
|
3
3
|
|
4
|
-
|
4
|
+
require "ardb"
|
5
|
+
# This is needed by the schema dumper but it doesn"t handle requiring it so we
|
6
|
+
# have to manually, otherwise this errors when you try to run the adapter base
|
7
|
+
# tests by themselves
|
8
|
+
require "active_support/core_ext/class/attribute_accessors"
|
5
9
|
|
10
|
+
class Ardb::Adapter::Base
|
6
11
|
class UnitTests < Assert::Context
|
7
12
|
desc "Ardb::Adapter::Base"
|
8
13
|
setup do
|
9
|
-
@
|
14
|
+
@config = Factory.ardb_config
|
15
|
+
@adapter = Ardb::Adapter::Base.new(@config)
|
10
16
|
end
|
11
17
|
subject{ @adapter }
|
12
18
|
|
13
|
-
should have_readers :
|
14
|
-
should
|
19
|
+
should have_readers :config
|
20
|
+
should have_imeths :connect_hash, :database, :migrations_path
|
21
|
+
should have_imeths :schema_format, :ruby_schema_path, :sql_schema_path
|
15
22
|
should have_imeths :escape_like_pattern
|
16
|
-
should have_imeths :
|
17
|
-
should have_imeths :
|
23
|
+
should have_imeths :create_db, :drop_db, :drop_tables
|
24
|
+
should have_imeths :connect_db, :migrate_db
|
18
25
|
should have_imeths :load_schema, :load_ruby_schema, :load_sql_schema
|
19
26
|
should have_imeths :dump_schema, :dump_ruby_schema, :dump_sql_schema
|
20
27
|
|
21
|
-
should "know its config
|
22
|
-
assert_equal
|
28
|
+
should "know its config" do
|
29
|
+
assert_equal @config, subject.config
|
23
30
|
end
|
24
31
|
|
25
|
-
should "
|
26
|
-
assert_equal
|
32
|
+
should "demeter its config" do
|
33
|
+
assert_equal @config.activerecord_connect_hash, subject.connect_hash
|
34
|
+
assert_equal @config.database, subject.database
|
35
|
+
assert_equal @config.migrations_path, subject.migrations_path
|
36
|
+
assert_equal @config.schema_format, subject.schema_format
|
27
37
|
end
|
28
38
|
|
29
|
-
should "know its schema paths" do
|
30
|
-
assert_equal "#{
|
31
|
-
assert_equal "#{
|
39
|
+
should "know its ruby and sql schema paths" do
|
40
|
+
assert_equal "#{@config.schema_path}.rb", subject.ruby_schema_path
|
41
|
+
assert_equal "#{@config.schema_path}.sql", subject.sql_schema_path
|
32
42
|
end
|
33
43
|
|
34
44
|
should "know how to escape like patterns" do
|
@@ -37,12 +47,15 @@ class Ardb::Adapter::Base
|
|
37
47
|
"#{Factory.string}\\" \
|
38
48
|
"#{Factory.string} " \
|
39
49
|
"#{Factory.string}"
|
40
|
-
exp = pattern.gsub("\\"){ "\\\\" }.gsub(
|
50
|
+
exp = pattern.gsub("\\"){ "\\\\" }.gsub("%", "\\%").gsub("_", "\\_")
|
41
51
|
assert_equal exp, subject.escape_like_pattern(pattern)
|
52
|
+
|
53
|
+
pattern = Factory.string
|
54
|
+
assert_equal pattern, subject.escape_like_pattern(pattern)
|
42
55
|
end
|
43
56
|
|
44
57
|
should "allow using a custom escape char when escaping like patterns" do
|
45
|
-
escape_char =
|
58
|
+
escape_char = "#"
|
46
59
|
pattern = "#{Factory.string}%" \
|
47
60
|
"#{Factory.string}_" \
|
48
61
|
"#{Factory.string}\\" \
|
@@ -50,15 +63,10 @@ class Ardb::Adapter::Base
|
|
50
63
|
"#{Factory.string} " \
|
51
64
|
"#{Factory.string}"
|
52
65
|
exp = pattern.gsub(escape_char, "#{escape_char}#{escape_char}")
|
53
|
-
exp = exp.gsub(
|
66
|
+
exp = exp.gsub("%", "#{escape_char}%").gsub("_", "#{escape_char}_")
|
54
67
|
assert_equal exp, subject.escape_like_pattern(pattern, escape_char)
|
55
68
|
end
|
56
69
|
|
57
|
-
should "not implement the foreign key sql meths" do
|
58
|
-
assert_raises(NotImplementedError){ subject.foreign_key_add_sql }
|
59
|
-
assert_raises(NotImplementedError){ subject.foreign_key_drop_sql }
|
60
|
-
end
|
61
|
-
|
62
70
|
should "not implement the create and drop db methods" do
|
63
71
|
assert_raises(NotImplementedError){ subject.create_db }
|
64
72
|
assert_raises(NotImplementedError){ subject.drop_db }
|
@@ -73,60 +81,89 @@ class Ardb::Adapter::Base
|
|
73
81
|
assert_raises(NotImplementedError){ subject.dump_sql_schema }
|
74
82
|
end
|
75
83
|
|
84
|
+
should "know if its equal to another adapter" do
|
85
|
+
matching_adapter = Ardb::Adapter::Base.new(@config)
|
86
|
+
assert_equal matching_adapter, subject
|
87
|
+
|
88
|
+
non_matching_adapter = Ardb::Adapter::Base.new(Factory.ardb_config)
|
89
|
+
assert_not_equal non_matching_adapter, subject
|
90
|
+
end
|
76
91
|
end
|
77
92
|
|
78
93
|
class ConnectDbTests < UnitTests
|
79
94
|
desc "`connect_db`"
|
80
95
|
setup do
|
81
|
-
@
|
82
|
-
Assert.stub(ActiveRecord::Base, :
|
83
|
-
@
|
96
|
+
@ar_establish_connection_called_with = nil
|
97
|
+
Assert.stub(ActiveRecord::Base, :establish_connection) do |options|
|
98
|
+
@ar_establish_connection_called_with = options
|
84
99
|
end
|
85
100
|
|
86
|
-
@
|
87
|
-
|
101
|
+
@ar_connection_pool = FakeConnectionPool.new
|
102
|
+
Assert.stub(ActiveRecord::Base, :connection_pool){ @ar_connection_pool }
|
103
|
+
|
104
|
+
@ar_with_connection_called = false
|
105
|
+
Assert.stub(@ar_connection_pool, :with_connection) do
|
106
|
+
@ar_with_connection_called = true
|
107
|
+
end
|
88
108
|
|
89
|
-
|
90
|
-
assert_true @ar_base_conn_called
|
109
|
+
subject.connect_db
|
91
110
|
end
|
92
111
|
|
112
|
+
should "use activerecord to establish and then checkout a connection" do
|
113
|
+
assert_equal subject.connect_hash, @ar_establish_connection_called_with
|
114
|
+
assert_true @ar_with_connection_called
|
115
|
+
end
|
93
116
|
end
|
94
117
|
|
95
|
-
class
|
96
|
-
desc "`migrate_db`"
|
118
|
+
class MigrateTests < UnitTests
|
97
119
|
setup do
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
@migrator_called_with = []
|
102
|
-
Assert.stub(ActiveRecord::Migrator, :migrate) do |*args|
|
103
|
-
@migrator_called_with = args
|
120
|
+
Assert.stub(ActiveRecord::MigrationContext, :new) do |*args, &block|
|
121
|
+
@fake_migration_context ||= FakeMigrationContext.new(*args)
|
104
122
|
end
|
105
|
-
|
106
|
-
@adapter.migrate_db
|
107
123
|
end
|
108
124
|
|
109
|
-
should "
|
110
|
-
|
111
|
-
|
125
|
+
should "migrate the db with `migrate_db`" do
|
126
|
+
subject.migrate_db
|
127
|
+
|
128
|
+
assert_equal [subject.migrations_path], @fake_migration_context.init_with
|
129
|
+
assert_equal [nil], @fake_migration_context.up_called_with
|
112
130
|
end
|
113
131
|
|
114
|
-
should "
|
115
|
-
|
116
|
-
assert_equal
|
132
|
+
should "migrate the db with `migrate_db_up`" do
|
133
|
+
subject.migrate_db_up
|
134
|
+
assert_equal [nil], @fake_migration_context.up_called_with
|
135
|
+
|
136
|
+
target = Factory.string
|
137
|
+
subject.migrate_db_up(target)
|
138
|
+
assert_equal [target], @fake_migration_context.up_called_with
|
117
139
|
end
|
118
140
|
|
119
|
-
should "
|
120
|
-
|
121
|
-
assert_equal
|
141
|
+
should "migrate the db with `migrate_db_down`" do
|
142
|
+
subject.migrate_db_down
|
143
|
+
assert_equal [nil], @fake_migration_context.down_called_with
|
144
|
+
|
145
|
+
target = Factory.string
|
146
|
+
subject.migrate_db_down(target)
|
147
|
+
assert_equal [target], @fake_migration_context.down_called_with
|
122
148
|
end
|
123
149
|
|
124
|
-
should "
|
125
|
-
|
126
|
-
|
127
|
-
|
150
|
+
should "migrate the db with `migrate_db_forward`" do
|
151
|
+
subject.migrate_db_forward
|
152
|
+
assert_equal [1], @fake_migration_context.forward_called_with
|
153
|
+
|
154
|
+
steps = Factory.integer(3)
|
155
|
+
subject.migrate_db_forward(steps)
|
156
|
+
assert_equal [steps], @fake_migration_context.forward_called_with
|
128
157
|
end
|
129
158
|
|
159
|
+
should "migrate the db with `migrate_db_backward`" do
|
160
|
+
subject.migrate_db_backward
|
161
|
+
assert_equal [1], @fake_migration_context.rollback_called_with
|
162
|
+
|
163
|
+
steps = Factory.integer(3)
|
164
|
+
subject.migrate_db_backward(steps)
|
165
|
+
assert_equal [steps], @fake_migration_context.rollback_called_with
|
166
|
+
end
|
130
167
|
end
|
131
168
|
|
132
169
|
class LoadAndDumpSchemaTests < UnitTests
|
@@ -135,18 +172,15 @@ class Ardb::Adapter::Base
|
|
135
172
|
@captured_stdout = ""
|
136
173
|
$stdout = StringIO.new(@captured_stdout)
|
137
174
|
|
138
|
-
@
|
139
|
-
|
140
|
-
@adapter = SchemaSpyAdapter.new
|
175
|
+
@adapter = SchemaSpyAdapter.new(@config)
|
141
176
|
end
|
142
177
|
teardown do
|
143
|
-
Ardb.config.schema_format = @orig_schema_format
|
144
178
|
$stdout = @orig_stdout
|
145
179
|
end
|
146
180
|
|
147
181
|
should "load a ruby schema using `load_schema` when the format is ruby" do
|
148
|
-
|
149
|
-
adapter = SchemaSpyAdapter.new
|
182
|
+
@config.schema_format = Ardb::Config::RUBY_SCHEMA_FORMAT
|
183
|
+
adapter = SchemaSpyAdapter.new(@config)
|
150
184
|
|
151
185
|
assert_false adapter.load_ruby_schema_called
|
152
186
|
assert_false adapter.load_sql_schema_called
|
@@ -156,8 +190,8 @@ class Ardb::Adapter::Base
|
|
156
190
|
end
|
157
191
|
|
158
192
|
should "load a SQL schema using `load_schema` when the format is sql" do
|
159
|
-
|
160
|
-
adapter = SchemaSpyAdapter.new
|
193
|
+
@config.schema_format = Ardb::Config::SQL_SCHEMA_FORMAT
|
194
|
+
adapter = SchemaSpyAdapter.new(@config)
|
161
195
|
|
162
196
|
assert_false adapter.load_ruby_schema_called
|
163
197
|
assert_false adapter.load_sql_schema_called
|
@@ -172,8 +206,8 @@ class Ardb::Adapter::Base
|
|
172
206
|
end
|
173
207
|
|
174
208
|
should "always dump a ruby schema using `dump_schema`" do
|
175
|
-
|
176
|
-
adapter = SchemaSpyAdapter.new
|
209
|
+
@config.schema_format = Ardb::Config::RUBY_SCHEMA_FORMAT
|
210
|
+
adapter = SchemaSpyAdapter.new(@config)
|
177
211
|
|
178
212
|
assert_false adapter.dump_ruby_schema_called
|
179
213
|
assert_false adapter.dump_sql_schema_called
|
@@ -181,8 +215,8 @@ class Ardb::Adapter::Base
|
|
181
215
|
assert_true adapter.dump_ruby_schema_called
|
182
216
|
assert_false adapter.dump_sql_schema_called
|
183
217
|
|
184
|
-
|
185
|
-
adapter = SchemaSpyAdapter.new
|
218
|
+
@config.schema_format = Ardb::Config::SQL_SCHEMA_FORMAT
|
219
|
+
adapter = SchemaSpyAdapter.new(@config)
|
186
220
|
|
187
221
|
assert_false adapter.dump_ruby_schema_called
|
188
222
|
adapter.dump_schema
|
@@ -190,8 +224,8 @@ class Ardb::Adapter::Base
|
|
190
224
|
end
|
191
225
|
|
192
226
|
should "dump a SQL schema using `dump_schema` when the format is sql" do
|
193
|
-
|
194
|
-
adapter = SchemaSpyAdapter.new
|
227
|
+
@config.schema_format = Ardb::Config::SQL_SCHEMA_FORMAT
|
228
|
+
adapter = SchemaSpyAdapter.new(@config)
|
195
229
|
|
196
230
|
assert_false adapter.dump_ruby_schema_called
|
197
231
|
adapter.dump_schema
|
@@ -202,18 +236,12 @@ class Ardb::Adapter::Base
|
|
202
236
|
subject.load_schema
|
203
237
|
assert_empty @captured_stdout
|
204
238
|
end
|
205
|
-
|
206
239
|
end
|
207
240
|
|
208
241
|
class LoadRubySchemaTests < UnitTests
|
209
242
|
setup do
|
210
|
-
@
|
211
|
-
Ardb.config
|
212
|
-
|
213
|
-
@adapter = Ardb::Adapter::Base.new
|
214
|
-
end
|
215
|
-
teardown do
|
216
|
-
Ardb.config.schema_path = @orig_schema_path
|
243
|
+
@config.schema_path = File.join(TEST_SUPPORT_PATH, "fake_schema")
|
244
|
+
@adapter = Ardb::Adapter::Base.new(@config)
|
217
245
|
end
|
218
246
|
|
219
247
|
should "load a ruby schema file using `load_ruby_schema`" do
|
@@ -224,9 +252,40 @@ class Ardb::Adapter::Base
|
|
224
252
|
subject.load_ruby_schema
|
225
253
|
assert_equal 2, FAKE_SCHEMA.load_count
|
226
254
|
end
|
255
|
+
end
|
256
|
+
|
257
|
+
class DumpRubySchemaTests < UnitTests
|
258
|
+
setup do
|
259
|
+
@config.schema_path = File.join(TMP_PATH, "testdb", "test_dump_ruby_schema")
|
260
|
+
FileUtils.rm_rf(File.dirname(@config.schema_path))
|
261
|
+
|
262
|
+
@schema_dumper_connection, @schema_dumper_file = [nil, nil]
|
263
|
+
Assert.stub(ActiveRecord::SchemaDumper, :dump) do |connection, file|
|
264
|
+
@schema_dumper_connection = connection
|
265
|
+
@schema_dumper_file = file
|
266
|
+
end
|
267
|
+
|
268
|
+
@fake_connection = FakeConnection.new
|
269
|
+
Assert.stub(ActiveRecord::Base, :connection){ @fake_connection }
|
270
|
+
|
271
|
+
@adapter = Ardb::Adapter::Base.new(@config)
|
272
|
+
end
|
273
|
+
teardown do
|
274
|
+
FileUtils.rm_rf(File.dirname(@config.schema_path))
|
275
|
+
end
|
227
276
|
|
277
|
+
should "dump a ruby schema file using `dump_ruby_schema`" do
|
278
|
+
assert_false File.exists?(subject.ruby_schema_path)
|
279
|
+
subject.dump_ruby_schema
|
280
|
+
assert_true File.exists?(subject.ruby_schema_path)
|
281
|
+
assert_equal @fake_connection, @schema_dumper_connection
|
282
|
+
assert_instance_of File, @schema_dumper_file
|
283
|
+
assert_equal subject.ruby_schema_path, @schema_dumper_file.path
|
284
|
+
end
|
228
285
|
end
|
229
286
|
|
287
|
+
class FakeConnection; end
|
288
|
+
|
230
289
|
class SchemaSpyAdapter < Ardb::Adapter::Base
|
231
290
|
attr_reader :load_ruby_schema_called, :dump_ruby_schema_called
|
232
291
|
attr_reader :load_sql_schema_called, :dump_sql_schema_called
|
@@ -260,4 +319,33 @@ class Ardb::Adapter::Base
|
|
260
319
|
end
|
261
320
|
end
|
262
321
|
|
322
|
+
class FakeConnectionPool
|
323
|
+
def with_connection(&block); end
|
324
|
+
end
|
325
|
+
|
326
|
+
class FakeMigrationContext
|
327
|
+
attr_reader :init_with
|
328
|
+
attr_reader :up_called_with, :down_called_with
|
329
|
+
attr_reader :forward_called_with, :rollback_called_with
|
330
|
+
|
331
|
+
def initialize(*args)
|
332
|
+
@init_with = args
|
333
|
+
end
|
334
|
+
|
335
|
+
def up(*args)
|
336
|
+
@up_called_with = args
|
337
|
+
end
|
338
|
+
|
339
|
+
def down(*args)
|
340
|
+
@down_called_with = args
|
341
|
+
end
|
342
|
+
|
343
|
+
def forward(*args)
|
344
|
+
@forward_called_with = args
|
345
|
+
end
|
346
|
+
|
347
|
+
def rollback(*args)
|
348
|
+
@rollback_called_with = args
|
349
|
+
end
|
350
|
+
end
|
263
351
|
end
|