ardb 0.27.3 → 0.29.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|