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/db_tests.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "active_record"
|
2
|
+
require "assert"
|
3
3
|
|
4
4
|
module Ardb
|
5
|
-
|
6
5
|
class DbTests < Assert::Context
|
7
6
|
around do |block|
|
8
7
|
ActiveRecord::Base.transaction do
|
@@ -11,5 +10,4 @@ module Ardb
|
|
11
10
|
end
|
12
11
|
end
|
13
12
|
end
|
14
|
-
|
15
13
|
end
|
@@ -1,7 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "much-plugin"
|
2
2
|
|
3
3
|
module Ardb
|
4
|
-
|
5
4
|
module DefaultOrderBy
|
6
5
|
include MuchPlugin
|
7
6
|
|
@@ -9,15 +8,10 @@ module Ardb
|
|
9
8
|
DEFAULT_SCOPE_PROC = proc{ self.class.scoped }
|
10
9
|
|
11
10
|
plugin_included do
|
12
|
-
extend ClassMethods
|
13
|
-
include InstanceMethods
|
14
|
-
|
15
11
|
@ardb_default_order_by_config = {}
|
16
|
-
|
17
12
|
end
|
18
13
|
|
19
|
-
|
20
|
-
|
14
|
+
plugin_class_methods do
|
21
15
|
def default_order_by(options = nil)
|
22
16
|
options ||= {}
|
23
17
|
|
@@ -32,11 +26,9 @@ module Ardb
|
|
32
26
|
def ardb_default_order_by_config
|
33
27
|
@ardb_default_order_by_config
|
34
28
|
end
|
35
|
-
|
36
29
|
end
|
37
30
|
|
38
|
-
|
39
|
-
|
31
|
+
plugin_instance_methods do
|
40
32
|
private
|
41
33
|
|
42
34
|
def reset_order_by
|
@@ -52,8 +44,6 @@ module Ardb
|
|
52
44
|
reset_order_by if self.send(attr_name).to_s.empty?
|
53
45
|
true
|
54
46
|
end
|
55
|
-
|
56
47
|
end
|
57
|
-
|
58
48
|
end
|
59
49
|
end
|
data/lib/ardb/migration.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require "fileutils"
|
2
2
|
|
3
3
|
module Ardb
|
4
|
-
|
5
4
|
class Migration
|
5
|
+
NoIdentifierError = Class.new(ArgumentError)
|
6
6
|
|
7
7
|
attr_reader :migrations_path, :identifier
|
8
8
|
attr_reader :class_name, :file_name, :file_path, :source
|
@@ -17,17 +17,17 @@ module Ardb
|
|
17
17
|
@file_name = get_file_name(@identifier)
|
18
18
|
@file_path = File.join(self.migrations_path, "#{@file_name}.rb")
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
20
|
+
migration_version = ActiveRecord::Migration.current_version
|
21
|
+
@source =
|
22
|
+
"class #{@class_name} < ActiveRecord::Migration[#{migration_version}]\n"\
|
23
|
+
" def change\n"\
|
24
|
+
" end\n"\
|
25
|
+
"end\n"
|
26
26
|
end
|
27
27
|
|
28
28
|
def save!
|
29
29
|
FileUtils.mkdir_p self.migrations_path
|
30
|
-
File.open(self.file_path,
|
30
|
+
File.open(self.file_path, "w"){ |f| f.write(self.source) }
|
31
31
|
self
|
32
32
|
end
|
33
33
|
|
@@ -36,9 +36,5 @@ module Ardb
|
|
36
36
|
def get_file_name(identifier)
|
37
37
|
"#{Time.now.strftime("%Y%m%d%H%M%S")}_#{identifier.underscore}"
|
38
38
|
end
|
39
|
-
|
40
|
-
NoIdentifierError = Class.new(ArgumentError)
|
41
|
-
|
42
39
|
end
|
43
|
-
|
44
40
|
end
|
data/lib/ardb/record_spy.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "arel"
|
2
|
+
require "much-plugin"
|
3
|
+
require "ardb/relation_spy"
|
4
4
|
|
5
5
|
module Ardb
|
6
|
-
|
7
6
|
module RecordSpy
|
8
7
|
include MuchPlugin
|
9
8
|
|
@@ -14,13 +13,9 @@ module Ardb
|
|
14
13
|
record_spy
|
15
14
|
end
|
16
15
|
|
17
|
-
|
18
|
-
extend ClassMethods
|
19
|
-
include InstanceMethods
|
20
|
-
end
|
21
|
-
|
22
|
-
module ClassMethods
|
16
|
+
CallbackType = Struct.new(:name, :options)
|
23
17
|
|
18
|
+
plugin_class_methods do
|
24
19
|
attr_accessor :table_name
|
25
20
|
|
26
21
|
# Associations
|
@@ -29,8 +24,7 @@ module Ardb
|
|
29
24
|
@associations ||= []
|
30
25
|
end
|
31
26
|
|
32
|
-
[
|
33
|
-
|
27
|
+
[:belongs_to, :has_one, :has_many].each do |method_name|
|
34
28
|
define_method(method_name) do |assoc_name, *args|
|
35
29
|
define_method(assoc_name) do
|
36
30
|
instance_variable_get("@#{assoc_name}") || (method_name == :has_many ? [] : nil)
|
@@ -41,7 +35,6 @@ module Ardb
|
|
41
35
|
|
42
36
|
self.associations << Association.new(method_name, assoc_name, *args)
|
43
37
|
end
|
44
|
-
|
45
38
|
end
|
46
39
|
|
47
40
|
# Validations
|
@@ -66,7 +59,6 @@ module Ardb
|
|
66
59
|
define_method(method_name) do |*args|
|
67
60
|
self.validations << Validation.new(type, *args)
|
68
61
|
end
|
69
|
-
|
70
62
|
end
|
71
63
|
|
72
64
|
def validates_associated(*args)
|
@@ -110,11 +102,9 @@ module Ardb
|
|
110
102
|
:after_initialize,
|
111
103
|
:after_find
|
112
104
|
].each do |method_name|
|
113
|
-
|
114
105
|
define_method(method_name) do |*args, &block|
|
115
106
|
self.callbacks << Callback.new(method_name, *args, &block)
|
116
107
|
end
|
117
|
-
|
118
108
|
end
|
119
109
|
|
120
110
|
def custom_callback_types
|
@@ -137,8 +127,6 @@ module Ardb
|
|
137
127
|
end
|
138
128
|
end
|
139
129
|
|
140
|
-
CallbackType = Struct.new(:name, :options)
|
141
|
-
|
142
130
|
# Scopes
|
143
131
|
|
144
132
|
attr_writer :relation_spy
|
@@ -170,17 +158,13 @@ module Ardb
|
|
170
158
|
:except,
|
171
159
|
:only
|
172
160
|
].each do |method_name|
|
173
|
-
|
174
161
|
define_method(method_name) do |*args|
|
175
162
|
self.relation_spy.send(method_name, *args)
|
176
163
|
end
|
177
|
-
|
178
164
|
end
|
179
|
-
|
180
165
|
end
|
181
166
|
|
182
|
-
|
183
|
-
|
167
|
+
plugin_instance_methods do
|
184
168
|
attr_accessor :id
|
185
169
|
|
186
170
|
def update_column(col, value)
|
@@ -195,7 +179,6 @@ module Ardb
|
|
195
179
|
self.manually_run_callbacks << name
|
196
180
|
block.call if block
|
197
181
|
end
|
198
|
-
|
199
182
|
end
|
200
183
|
|
201
184
|
class Association
|
@@ -235,7 +218,5 @@ module Ardb
|
|
235
218
|
end
|
236
219
|
end
|
237
220
|
end
|
238
|
-
|
239
221
|
end
|
240
|
-
|
241
222
|
end
|
data/lib/ardb/relation_spy.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
module Ardb
|
2
|
-
|
3
2
|
class RelationSpy
|
4
|
-
|
5
3
|
attr_reader :applied
|
6
4
|
attr_accessor :limit_value, :offset_value
|
7
5
|
attr_accessor :pluck_values, :maximum_values, :minimum_values
|
@@ -50,12 +48,10 @@ module Ardb
|
|
50
48
|
:reverse_order,
|
51
49
|
:readonly
|
52
50
|
].each do |type|
|
53
|
-
|
54
51
|
define_method(type) do |*args|
|
55
52
|
@applied << AppliedExpression.new(type, args)
|
56
53
|
self
|
57
54
|
end
|
58
|
-
|
59
55
|
end
|
60
56
|
|
61
57
|
def limit(value)
|
@@ -152,7 +148,5 @@ module Ardb
|
|
152
148
|
end
|
153
149
|
|
154
150
|
NotFoundError = Class.new(RuntimeError)
|
155
|
-
|
156
151
|
end
|
157
|
-
|
158
152
|
end
|
@@ -1,69 +1,183 @@
|
|
1
1
|
# ActiveRecord makes use of autoload to load some of its components as-needed.
|
2
|
-
# This doesn
|
2
|
+
# This doesn"t work well with threaded environments, and causes uninitialized
|
3
3
|
# constants. To avoid this, this file manually requires the following files that
|
4
|
-
# are not required using `require
|
4
|
+
# are not required using `require "active_record"`. Trying to automatically
|
5
5
|
# require every file in ActiveRecord is slow and inefficient. Many of the files
|
6
|
-
# fail to require and there are some we don
|
6
|
+
# fail to require and there are some we don"t want to require. Thus, this is a
|
7
7
|
# manual list of requires.
|
8
8
|
|
9
9
|
# To re-build this list of requires, run the following:
|
10
10
|
# bundle exec ruby script/determine_autoloaded_active_record_files.rb
|
11
11
|
|
12
12
|
# For compatibility, we require active record first
|
13
|
-
require
|
13
|
+
require "active_record"
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
26
|
-
require
|
27
|
-
require
|
28
|
-
require
|
29
|
-
require
|
30
|
-
require
|
31
|
-
require
|
32
|
-
require
|
33
|
-
require
|
34
|
-
require
|
35
|
-
require
|
36
|
-
require
|
37
|
-
require
|
38
|
-
require
|
39
|
-
require
|
40
|
-
require
|
41
|
-
require
|
42
|
-
require
|
43
|
-
require
|
44
|
-
require
|
45
|
-
require
|
46
|
-
require
|
47
|
-
require
|
48
|
-
require
|
49
|
-
require
|
50
|
-
require
|
51
|
-
require
|
52
|
-
require
|
53
|
-
require
|
54
|
-
require
|
55
|
-
require
|
56
|
-
require
|
57
|
-
require
|
58
|
-
require
|
59
|
-
require
|
60
|
-
require
|
61
|
-
require
|
62
|
-
require
|
63
|
-
require
|
15
|
+
if (
|
16
|
+
ActiveRecord.version.segments[0] == 6 &&
|
17
|
+
ActiveRecord.version.segments[1] > 0
|
18
|
+
)
|
19
|
+
require "active_record/aggregations"
|
20
|
+
require "active_record/association_relation"
|
21
|
+
require "active_record/associations"
|
22
|
+
require "active_record/associations/alias_tracker"
|
23
|
+
require "active_record/associations/association"
|
24
|
+
require "active_record/associations/association_scope"
|
25
|
+
require "active_record/associations/belongs_to_association"
|
26
|
+
require "active_record/associations/belongs_to_polymorphic_association"
|
27
|
+
require "active_record/associations/builder/association"
|
28
|
+
require "active_record/associations/builder/belongs_to"
|
29
|
+
require "active_record/associations/builder/collection_association"
|
30
|
+
require "active_record/associations/builder/has_and_belongs_to_many"
|
31
|
+
require "active_record/associations/builder/has_many"
|
32
|
+
require "active_record/associations/builder/has_one"
|
33
|
+
require "active_record/associations/collection_association"
|
34
|
+
require "active_record/associations/collection_proxy"
|
35
|
+
require "active_record/associations/foreign_association"
|
36
|
+
require "active_record/associations/has_many_association"
|
37
|
+
require "active_record/associations/has_many_through_association"
|
38
|
+
require "active_record/associations/has_one_association"
|
39
|
+
require "active_record/associations/has_one_through_association"
|
40
|
+
require "active_record/associations/join_dependency"
|
41
|
+
require "active_record/associations/join_dependency/join_association"
|
42
|
+
require "active_record/associations/join_dependency/join_base"
|
43
|
+
require "active_record/associations/preloader"
|
44
|
+
require "active_record/associations/preloader/association"
|
45
|
+
require "active_record/associations/preloader/through_association"
|
46
|
+
require "active_record/attribute_assignment"
|
47
|
+
require "active_record/attribute_methods/before_type_cast"
|
48
|
+
require "active_record/attribute_methods/dirty"
|
49
|
+
require "active_record/attribute_methods/primary_key"
|
50
|
+
require "active_record/attribute_methods/query"
|
51
|
+
require "active_record/attribute_methods/read"
|
52
|
+
require "active_record/attribute_methods/serialization"
|
53
|
+
require "active_record/attribute_methods/time_zone_conversion"
|
54
|
+
require "active_record/attribute_methods/write"
|
55
|
+
require "active_record/attributes"
|
56
|
+
require "active_record/autosave_association"
|
57
|
+
require "active_record/base"
|
58
|
+
require "active_record/coders/json"
|
59
|
+
require "active_record/internal_metadata"
|
60
|
+
require "active_record/legacy_yaml_adapter"
|
61
|
+
require "active_record/middleware/database_selector"
|
62
|
+
require "active_record/null_relation"
|
63
|
+
require "active_record/relation/predicate_builder"
|
64
|
+
require "active_record/relation/record_fetch_warning"
|
65
|
+
require "active_record/result"
|
66
|
+
require "active_record/runtime_registry"
|
67
|
+
require "active_record/statement_cache"
|
68
|
+
require "active_record/table_metadata"
|
69
|
+
require "active_record/tasks/database_tasks"
|
70
|
+
require "active_record/tasks/mysql_database_tasks"
|
71
|
+
require "active_record/tasks/postgresql_database_tasks"
|
72
|
+
require "active_record/tasks/sqlite_database_tasks"
|
73
|
+
require "arel/collectors/bind"
|
74
|
+
require "arel/collectors/composite"
|
75
|
+
require "arel/collectors/substitute_binds"
|
76
|
+
elsif (
|
77
|
+
ActiveRecord.version.segments[0] == 6 &&
|
78
|
+
ActiveRecord.version.segments[1] == 0
|
79
|
+
)
|
80
|
+
require "active_record/advisory_lock_base"
|
81
|
+
require "active_record/associations/alias_tracker"
|
82
|
+
require "active_record/associations/association"
|
83
|
+
require "active_record/associations/association_scope"
|
84
|
+
require "active_record/associations/belongs_to_association"
|
85
|
+
require "active_record/associations/belongs_to_polymorphic_association"
|
86
|
+
require "active_record/associations/builder/belongs_to"
|
87
|
+
require "active_record/associations/builder/collection_association"
|
88
|
+
require "active_record/associations/builder/has_and_belongs_to_many"
|
89
|
+
require "active_record/associations/builder/has_many"
|
90
|
+
require "active_record/associations/builder/has_one"
|
91
|
+
require "active_record/associations/collection_association"
|
92
|
+
require "active_record/associations/foreign_association"
|
93
|
+
require "active_record/associations/has_many_association"
|
94
|
+
require "active_record/associations/has_many_through_association"
|
95
|
+
require "active_record/associations/has_one_association"
|
96
|
+
require "active_record/associations/has_one_through_association"
|
97
|
+
require "active_record/associations/join_dependency"
|
98
|
+
require "active_record/associations/join_dependency/join_association"
|
99
|
+
require "active_record/associations/join_dependency/join_base"
|
100
|
+
require "active_record/associations/preloader"
|
101
|
+
require "active_record/associations/preloader/association"
|
102
|
+
require "active_record/associations/preloader/through_association"
|
103
|
+
require "active_record/coders/json"
|
104
|
+
require "active_record/internal_metadata"
|
105
|
+
require "active_record/legacy_yaml_adapter"
|
106
|
+
require "active_record/middleware/database_selector"
|
107
|
+
require "active_record/null_relation"
|
108
|
+
require "active_record/relation/predicate_builder"
|
109
|
+
require "active_record/relation/record_fetch_warning"
|
110
|
+
require "active_record/result"
|
111
|
+
require "active_record/runtime_registry"
|
112
|
+
require "active_record/statement_cache"
|
113
|
+
require "active_record/table_metadata"
|
114
|
+
require "active_record/tasks/database_tasks"
|
115
|
+
require "active_record/tasks/mysql_database_tasks"
|
116
|
+
require "active_record/tasks/postgresql_database_tasks"
|
117
|
+
require "active_record/tasks/sqlite_database_tasks"
|
118
|
+
elsif ActiveRecord.version.segments[0] == 5
|
119
|
+
require "active_record/aggregations"
|
120
|
+
require "active_record/association_relation"
|
121
|
+
require "active_record/associations"
|
122
|
+
require "active_record/associations/alias_tracker"
|
123
|
+
require "active_record/associations/association"
|
124
|
+
require "active_record/associations/association_scope"
|
125
|
+
require "active_record/associations/belongs_to_association"
|
126
|
+
require "active_record/associations/belongs_to_polymorphic_association"
|
127
|
+
require "active_record/associations/builder/association"
|
128
|
+
require "active_record/associations/builder/belongs_to"
|
129
|
+
require "active_record/associations/builder/collection_association"
|
130
|
+
require "active_record/associations/builder/has_and_belongs_to_many"
|
131
|
+
require "active_record/associations/builder/has_many"
|
132
|
+
require "active_record/associations/builder/has_one"
|
133
|
+
require "active_record/associations/collection_association"
|
134
|
+
require "active_record/associations/collection_proxy"
|
135
|
+
require "active_record/associations/foreign_association"
|
136
|
+
require "active_record/associations/has_many_association"
|
137
|
+
require "active_record/associations/has_many_through_association"
|
138
|
+
require "active_record/associations/has_one_association"
|
139
|
+
require "active_record/associations/has_one_through_association"
|
140
|
+
require "active_record/associations/join_dependency"
|
141
|
+
require "active_record/associations/join_dependency/join_association"
|
142
|
+
require "active_record/associations/join_dependency/join_base"
|
143
|
+
require "active_record/associations/preloader"
|
144
|
+
require "active_record/associations/preloader/association"
|
145
|
+
require "active_record/associations/preloader/through_association"
|
146
|
+
require "active_record/attribute_assignment"
|
147
|
+
require "active_record/attribute_decorators"
|
148
|
+
require "active_record/attribute_methods/before_type_cast"
|
149
|
+
require "active_record/attribute_methods/dirty"
|
150
|
+
require "active_record/attribute_methods/primary_key"
|
151
|
+
require "active_record/attribute_methods/query"
|
152
|
+
require "active_record/attribute_methods/read"
|
153
|
+
require "active_record/attribute_methods/serialization"
|
154
|
+
require "active_record/attribute_methods/time_zone_conversion"
|
155
|
+
require "active_record/attribute_methods/write"
|
156
|
+
require "active_record/attributes"
|
157
|
+
require "active_record/autosave_association"
|
158
|
+
require "active_record/base"
|
159
|
+
require "active_record/coders/json"
|
160
|
+
require "active_record/internal_metadata"
|
161
|
+
require "active_record/legacy_yaml_adapter"
|
162
|
+
require "active_record/null_relation"
|
163
|
+
require "active_record/relation/predicate_builder"
|
164
|
+
require "active_record/relation/record_fetch_warning"
|
165
|
+
require "active_record/result"
|
166
|
+
require "active_record/runtime_registry"
|
167
|
+
require "active_record/statement_cache"
|
168
|
+
require "active_record/table_metadata"
|
169
|
+
require "active_record/tasks/database_tasks"
|
170
|
+
require "active_record/tasks/mysql_database_tasks"
|
171
|
+
require "active_record/tasks/postgresql_database_tasks"
|
172
|
+
require "active_record/tasks/sqlite_database_tasks"
|
173
|
+
else
|
174
|
+
raise(
|
175
|
+
"ActiveRecord #{ActiveRecord.version} isn't supported. "\
|
176
|
+
"Switch to 5.X or 6.X"
|
177
|
+
)
|
178
|
+
end
|
64
179
|
|
65
|
-
# There are also issues with requiring ActiveSupport. This doesn
|
66
|
-
# ActiveSupport file though, only ones we
|
67
|
-
require
|
68
|
-
|
69
|
-
require 'active_support/multibyte/chars'
|
180
|
+
# There are also issues with requiring ActiveSupport. This doesn"t require every
|
181
|
+
# ActiveSupport file though, only ones we"ve seen cause problems.
|
182
|
+
require "active_support"
|
183
|
+
require "active_support/multibyte/chars"
|