ardb 0.28.0 → 0.29.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 +7 -7
- data/Gemfile +19 -8
- data/README.md +252 -3
- data/ardb.gemspec +8 -7
- data/bin/ardb +1 -1
- data/lib/ardb.rb +55 -39
- data/lib/ardb/adapter/base.rb +35 -30
- data/lib/ardb/adapter/mysql.rb +2 -17
- data/lib/ardb/adapter/postgresql.rb +24 -30
- data/lib/ardb/adapter/sqlite.rb +4 -8
- data/lib/ardb/adapter_spy.rb +2 -16
- data/lib/ardb/cli.rb +15 -15
- data/lib/ardb/cli/clirb.rb +14 -17
- data/lib/ardb/cli/commands.rb +204 -114
- data/lib/ardb/db_tests.rb +2 -4
- data/lib/ardb/default_order_by.rb +3 -13
- data/lib/ardb/migration.rb +9 -13
- 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 +172 -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 +14 -9
- data/test/helper.rb +4 -13
- data/test/support/factory.rb +2 -2
- data/test/support/postgresql/migrations/{.gitkeep → .keep} +0 -0
- data/test/support/postgresql/schema.rb +0 -1
- data/test/support/postgresql/setup_test_db.rb +15 -15
- data/test/system/.keep +0 -0
- data/test/unit/adapter/base_tests.rb +76 -52
- data/test/unit/adapter/mysql_tests.rb +2 -19
- data/test/unit/adapter/postgresql_tests.rb +14 -23
- data/test/unit/adapter/sqlite_tests.rb +3 -11
- data/test/unit/adapter_spy_tests.rb +2 -16
- data/test/unit/ardb_tests.rb +57 -44
- data/test/unit/cli_tests.rb +220 -158
- 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 +11 -15
- data/test/unit/record_spy_tests.rb +17 -22
- data/test/unit/relation_spy_tests.rb +17 -46
- data/test/unit/test_helpers_tests.rb +3 -14
- data/test/unit/use_db_default_tests.rb +7 -11
- metadata +100 -83
- data/lib/ardb/has_slug.rb +0 -107
- data/lib/ardb/migration_helpers.rb +0 -77
- data/lib/ardb/pg_json.rb +0 -90
- data/test/support/postgresql/pg_json_migrations/20160519133432_create_pg_json_migrate_test.rb +0 -13
- data/test/system/pg_json_tests.rb +0 -85
- data/test/unit/has_slug_tests.rb +0 -341
- data/test/unit/migration_helpers_tests.rb +0 -65
- data/test/unit/pg_json_tests.rb +0 -39
data/lib/ardb/test_helpers.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "active_record"
|
2
|
+
require "ardb"
|
3
3
|
|
4
4
|
# Use theses helpers in your test suite. They all generally assume Ardb has
|
5
5
|
# already been initialized by calling `Ardb.init`.
|
6
6
|
|
7
7
|
module Ardb
|
8
|
-
|
9
8
|
module TestHelpers
|
10
9
|
module_function
|
11
10
|
|
@@ -73,7 +72,5 @@ module Ardb
|
|
73
72
|
true
|
74
73
|
end
|
75
74
|
end
|
76
|
-
|
77
75
|
end
|
78
|
-
|
79
76
|
end
|
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,16 +11,21 @@ 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/,
|
23
|
-
/active_record\/
|
24
|
+
/active_record\/test_databases/,
|
25
|
+
/active_record\/test_fixtures/,
|
26
|
+
/active_record\/coders\/yaml_column/,
|
27
|
+
# `destroy_association_async_job` requires `ActiveJob` to be required.
|
28
|
+
/active_record\/destroy_association_async_job/,
|
24
29
|
]
|
25
30
|
|
26
31
|
Result = Struct.new(:file, :state, :reason)
|
@@ -31,12 +36,12 @@ ignored = []
|
|
31
36
|
errored = []
|
32
37
|
|
33
38
|
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/,
|
39
|
+
relative_path_with_rb = full_path.gsub("#{gemspec.lib_dirs_glob}/", "")
|
40
|
+
relative_path = relative_path_with_rb.gsub(/\.rb\z/, "")
|
36
41
|
|
37
42
|
result = Result.new(relative_path)
|
38
43
|
|
39
|
-
# see if it
|
44
|
+
# see if it"s ignored
|
40
45
|
ignored_regexes.each do |regex|
|
41
46
|
if relative_path =~ regex
|
42
47
|
result.state = :ignored
|
@@ -87,5 +92,5 @@ puts "\n"
|
|
87
92
|
|
88
93
|
puts "Needs To Be Required:\n"
|
89
94
|
needs_to_be_required.each do |result|
|
90
|
-
puts "require
|
95
|
+
puts "require \"#{result.file}\""
|
91
96
|
end
|
data/test/helper.rb
CHANGED
@@ -7,19 +7,10 @@ $LOAD_PATH.unshift(File.expand_path("../..", __FILE__))
|
|
7
7
|
TEST_SUPPORT_PATH = File.expand_path("../support", __FILE__)
|
8
8
|
TMP_PATH = File.expand_path("../../tmp", __FILE__)
|
9
9
|
|
10
|
-
require
|
10
|
+
require "logger"
|
11
11
|
log_path = File.expand_path("../../log/test.log", __FILE__)
|
12
|
-
TEST_LOGGER = Logger.new(File.open(log_path,
|
12
|
+
TEST_LOGGER = Logger.new(File.open(log_path, "w"))
|
13
13
|
|
14
14
|
# require pry for debugging (`binding.pry`)
|
15
|
-
require
|
16
|
-
require
|
17
|
-
|
18
|
-
# 1.8.7 backfills
|
19
|
-
|
20
|
-
# Array#sample
|
21
|
-
if !(a = Array.new).respond_to?(:sample) && a.respond_to?(:choice)
|
22
|
-
class Array
|
23
|
-
alias_method :sample, :choice
|
24
|
-
end
|
25
|
-
end
|
15
|
+
require "pry"
|
16
|
+
require "test/support/factory"
|
data/test/support/factory.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
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
|
|
File without changes
|
@@ -1,24 +1,24 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "assert"
|
2
|
+
require "ardb"
|
3
3
|
|
4
4
|
class PostgresqlDbTests < Assert::Context
|
5
5
|
setup do
|
6
|
-
@orig_env_ardb_db_file = ENV[
|
6
|
+
@orig_env_ardb_db_file = ENV["ARDB_DB_FILE"]
|
7
7
|
ActiveRecord::Base.logger = @orig_ar_loggerF
|
8
8
|
|
9
|
-
# no-op, we
|
10
|
-
ENV[
|
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
11
|
|
12
12
|
@ardb_config = Ardb::Config.new.tap do |c|
|
13
|
-
c.adapter =
|
14
|
-
c.database =
|
15
|
-
c.encoding =
|
16
|
-
c.min_messages =
|
13
|
+
c.adapter = "postgresql"
|
14
|
+
c.database = "redding_ardb_test"
|
15
|
+
c.encoding = "unicode"
|
16
|
+
c.min_messages = "WARNING"
|
17
17
|
|
18
18
|
c.logger = TEST_LOGGER
|
19
|
-
c.root_path = File.join(TEST_SUPPORT_PATH,
|
20
|
-
c.migrations_path =
|
21
|
-
c.schema_path =
|
19
|
+
c.root_path = File.join(TEST_SUPPORT_PATH, "postgresql")
|
20
|
+
c.migrations_path = "migrations"
|
21
|
+
c.schema_path = "schema"
|
22
22
|
c.schema_format = :ruby
|
23
23
|
end
|
24
24
|
Assert.stub(Ardb, :config){ @ardb_config }
|
@@ -31,8 +31,9 @@ class PostgresqlDbTests < Assert::Context
|
|
31
31
|
Ardb.adapter.connect_db
|
32
32
|
end
|
33
33
|
teardown do
|
34
|
+
Ardb.reset_adapter
|
34
35
|
ActiveRecord::Base.logger = @orig_ar_logger
|
35
|
-
ENV[
|
36
|
+
ENV["ARDB_DB_FILE"] = @orig_env_ardb_db_file
|
36
37
|
end
|
37
38
|
|
38
39
|
private
|
@@ -40,12 +41,11 @@ class PostgresqlDbTests < Assert::Context
|
|
40
41
|
# useful when testing creating/dropping/migrating DBs
|
41
42
|
def silence_stdout
|
42
43
|
current_stdout = $stdout.dup
|
43
|
-
$stdout = File.new(
|
44
|
+
$stdout = File.new("/dev/null", "w")
|
44
45
|
begin
|
45
46
|
yield
|
46
47
|
ensure
|
47
48
|
$stdout = current_stdout
|
48
49
|
end
|
49
50
|
end
|
50
|
-
|
51
51
|
end
|
data/test/system/.keep
ADDED
File without changes
|
@@ -1,14 +1,14 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "assert"
|
2
|
+
require "ardb/adapter/base"
|
3
3
|
|
4
|
-
require
|
4
|
+
require "active_record/migration"
|
5
|
+
require "ardb"
|
5
6
|
# This is needed by the schema dumper but it doesn't handle requiring it so we
|
6
7
|
# have to manually, otherwise this errors when you try to run the adapter base
|
7
8
|
# tests by themselves
|
8
|
-
require
|
9
|
+
require "active_support/core_ext/class/attribute_accessors"
|
9
10
|
|
10
11
|
class Ardb::Adapter::Base
|
11
|
-
|
12
12
|
class UnitTests < Assert::Context
|
13
13
|
desc "Ardb::Adapter::Base"
|
14
14
|
setup do
|
@@ -21,7 +21,6 @@ class Ardb::Adapter::Base
|
|
21
21
|
should have_imeths :connect_hash, :database, :migrations_path
|
22
22
|
should have_imeths :schema_format, :ruby_schema_path, :sql_schema_path
|
23
23
|
should have_imeths :escape_like_pattern
|
24
|
-
should have_imeths :foreign_key_add_sql, :foreign_key_drop_sql
|
25
24
|
should have_imeths :create_db, :drop_db, :drop_tables
|
26
25
|
should have_imeths :connect_db, :migrate_db
|
27
26
|
should have_imeths :load_schema, :load_ruby_schema, :load_sql_schema
|
@@ -49,12 +48,15 @@ class Ardb::Adapter::Base
|
|
49
48
|
"#{Factory.string}\\" \
|
50
49
|
"#{Factory.string} " \
|
51
50
|
"#{Factory.string}"
|
52
|
-
exp = pattern.gsub("\\"){ "\\\\" }.gsub(
|
51
|
+
exp = pattern.gsub("\\"){ "\\\\" }.gsub("%", "\\%").gsub("_", "\\_")
|
53
52
|
assert_equal exp, subject.escape_like_pattern(pattern)
|
53
|
+
|
54
|
+
pattern = Factory.string
|
55
|
+
assert_equal pattern, subject.escape_like_pattern(pattern)
|
54
56
|
end
|
55
57
|
|
56
58
|
should "allow using a custom escape char when escaping like patterns" do
|
57
|
-
escape_char =
|
59
|
+
escape_char = "#"
|
58
60
|
pattern = "#{Factory.string}%" \
|
59
61
|
"#{Factory.string}_" \
|
60
62
|
"#{Factory.string}\\" \
|
@@ -62,15 +64,10 @@ class Ardb::Adapter::Base
|
|
62
64
|
"#{Factory.string} " \
|
63
65
|
"#{Factory.string}"
|
64
66
|
exp = pattern.gsub(escape_char, "#{escape_char}#{escape_char}")
|
65
|
-
exp = exp.gsub(
|
67
|
+
exp = exp.gsub("%", "#{escape_char}%").gsub("_", "#{escape_char}_")
|
66
68
|
assert_equal exp, subject.escape_like_pattern(pattern, escape_char)
|
67
69
|
end
|
68
70
|
|
69
|
-
should "not implement the foreign key sql meths" do
|
70
|
-
assert_raises(NotImplementedError){ subject.foreign_key_add_sql }
|
71
|
-
assert_raises(NotImplementedError){ subject.foreign_key_drop_sql }
|
72
|
-
end
|
73
|
-
|
74
71
|
should "not implement the create and drop db methods" do
|
75
72
|
assert_raises(NotImplementedError){ subject.create_db }
|
76
73
|
assert_raises(NotImplementedError){ subject.drop_db }
|
@@ -92,7 +89,6 @@ class Ardb::Adapter::Base
|
|
92
89
|
non_matching_adapter = Ardb::Adapter::Base.new(Factory.ardb_config)
|
93
90
|
assert_not_equal non_matching_adapter, subject
|
94
91
|
end
|
95
|
-
|
96
92
|
end
|
97
93
|
|
98
94
|
class ConnectDbTests < UnitTests
|
@@ -111,58 +107,64 @@ class Ardb::Adapter::Base
|
|
111
107
|
@ar_with_connection_called = true
|
112
108
|
end
|
113
109
|
|
114
|
-
|
110
|
+
subject.connect_db
|
115
111
|
end
|
116
112
|
|
117
113
|
should "use activerecord to establish and then checkout a connection" do
|
118
114
|
assert_equal subject.connect_hash, @ar_establish_connection_called_with
|
119
115
|
assert_true @ar_with_connection_called
|
120
116
|
end
|
121
|
-
|
122
117
|
end
|
123
118
|
|
124
|
-
class
|
125
|
-
desc "`migrate_db`"
|
119
|
+
class MigrateTests < UnitTests
|
126
120
|
setup do
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
ENV["MIGRATE_VERSION"] = Factory.integer.to_s if Factory.boolean
|
131
|
-
ENV["MIGRATE_QUIET"] = Factory.boolean.to_s if Factory.boolean
|
132
|
-
|
133
|
-
@migrator_called_with = []
|
134
|
-
Assert.stub(ActiveRecord::Migrator, :migrate) do |*args|
|
135
|
-
@migrator_called_with = args
|
121
|
+
Assert.stub(ActiveRecord::MigrationContext, :new) do |*args, &block|
|
122
|
+
@fake_migration_context ||= FakeMigrationContext.new(*args)
|
136
123
|
end
|
137
|
-
|
138
|
-
@adapter.migrate_db
|
139
|
-
end
|
140
|
-
teardown do
|
141
|
-
ENV['MIGRATE_VERSION'] = @orig_migrate_version_env_var
|
142
|
-
ENV['MIGRATE_QUIET'] = @orig_migrate_query_env_var
|
143
124
|
end
|
144
125
|
|
145
|
-
should "
|
146
|
-
|
147
|
-
|
126
|
+
should "migrate the db with `migrate_db`" do
|
127
|
+
subject.migrate_db
|
128
|
+
|
129
|
+
assert_equal [subject.migrations_path], @fake_migration_context.init_with
|
130
|
+
assert_equal [nil], @fake_migration_context.up_called_with
|
148
131
|
end
|
149
132
|
|
150
|
-
should "
|
151
|
-
|
152
|
-
assert_equal
|
133
|
+
should "migrate the db with `migrate_db_up`" do
|
134
|
+
subject.migrate_db_up
|
135
|
+
assert_equal [nil], @fake_migration_context.up_called_with
|
136
|
+
|
137
|
+
target = Factory.string
|
138
|
+
subject.migrate_db_up(target)
|
139
|
+
assert_equal [target], @fake_migration_context.up_called_with
|
153
140
|
end
|
154
141
|
|
155
|
-
should "
|
156
|
-
|
157
|
-
assert_equal
|
142
|
+
should "migrate the db with `migrate_db_down`" do
|
143
|
+
subject.migrate_db_down
|
144
|
+
assert_equal [nil], @fake_migration_context.down_called_with
|
145
|
+
|
146
|
+
target = Factory.string
|
147
|
+
subject.migrate_db_down(target)
|
148
|
+
assert_equal [target], @fake_migration_context.down_called_with
|
158
149
|
end
|
159
150
|
|
160
|
-
should "
|
161
|
-
|
162
|
-
|
163
|
-
|
151
|
+
should "migrate the db with `migrate_db_forward`" do
|
152
|
+
subject.migrate_db_forward
|
153
|
+
assert_equal [1], @fake_migration_context.forward_called_with
|
154
|
+
|
155
|
+
steps = Factory.integer(3)
|
156
|
+
subject.migrate_db_forward(steps)
|
157
|
+
assert_equal [steps], @fake_migration_context.forward_called_with
|
164
158
|
end
|
165
159
|
|
160
|
+
should "migrate the db with `migrate_db_backward`" do
|
161
|
+
subject.migrate_db_backward
|
162
|
+
assert_equal [1], @fake_migration_context.rollback_called_with
|
163
|
+
|
164
|
+
steps = Factory.integer(3)
|
165
|
+
subject.migrate_db_backward(steps)
|
166
|
+
assert_equal [steps], @fake_migration_context.rollback_called_with
|
167
|
+
end
|
166
168
|
end
|
167
169
|
|
168
170
|
class LoadAndDumpSchemaTests < UnitTests
|
@@ -235,12 +237,11 @@ class Ardb::Adapter::Base
|
|
235
237
|
subject.load_schema
|
236
238
|
assert_empty @captured_stdout
|
237
239
|
end
|
238
|
-
|
239
240
|
end
|
240
241
|
|
241
242
|
class LoadRubySchemaTests < UnitTests
|
242
243
|
setup do
|
243
|
-
@config.schema_path = File.join(TEST_SUPPORT_PATH,
|
244
|
+
@config.schema_path = File.join(TEST_SUPPORT_PATH, "fake_schema")
|
244
245
|
@adapter = Ardb::Adapter::Base.new(@config)
|
245
246
|
end
|
246
247
|
|
@@ -252,12 +253,11 @@ class Ardb::Adapter::Base
|
|
252
253
|
subject.load_ruby_schema
|
253
254
|
assert_equal 2, FAKE_SCHEMA.load_count
|
254
255
|
end
|
255
|
-
|
256
256
|
end
|
257
257
|
|
258
258
|
class DumpRubySchemaTests < UnitTests
|
259
259
|
setup do
|
260
|
-
@config.schema_path = File.join(TMP_PATH,
|
260
|
+
@config.schema_path = File.join(TMP_PATH, "testdb", "test_dump_ruby_schema")
|
261
261
|
FileUtils.rm_rf(File.dirname(@config.schema_path))
|
262
262
|
|
263
263
|
@schema_dumper_connection, @schema_dumper_file = [nil, nil]
|
@@ -283,7 +283,6 @@ class Ardb::Adapter::Base
|
|
283
283
|
assert_instance_of File, @schema_dumper_file
|
284
284
|
assert_equal subject.ruby_schema_path, @schema_dumper_file.path
|
285
285
|
end
|
286
|
-
|
287
286
|
end
|
288
287
|
|
289
288
|
class FakeConnection; end
|
@@ -325,4 +324,29 @@ class Ardb::Adapter::Base
|
|
325
324
|
def with_connection(&block); end
|
326
325
|
end
|
327
326
|
|
327
|
+
class FakeMigrationContext
|
328
|
+
attr_reader :init_with
|
329
|
+
attr_reader :up_called_with, :down_called_with
|
330
|
+
attr_reader :forward_called_with, :rollback_called_with
|
331
|
+
|
332
|
+
def initialize(*args)
|
333
|
+
@init_with = args
|
334
|
+
end
|
335
|
+
|
336
|
+
def up(*args)
|
337
|
+
@up_called_with = args
|
338
|
+
end
|
339
|
+
|
340
|
+
def down(*args)
|
341
|
+
@down_called_with = args
|
342
|
+
end
|
343
|
+
|
344
|
+
def forward(*args)
|
345
|
+
@forward_called_with = args
|
346
|
+
end
|
347
|
+
|
348
|
+
def rollback(*args)
|
349
|
+
@rollback_called_with = args
|
350
|
+
end
|
351
|
+
end
|
328
352
|
end
|