ardb 0.28.3 → 0.30.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.
Files changed (60) hide show
  1. checksums.yaml +7 -7
  2. data/.l.yml +9 -0
  3. data/.rubocop.yml +3 -0
  4. data/.ruby-version +1 -0
  5. data/.t.yml +6 -0
  6. data/Gemfile +24 -8
  7. data/README.md +252 -3
  8. data/ardb.gemspec +14 -10
  9. data/bin/ardb +3 -1
  10. data/lib/ardb/adapter/base.rb +72 -47
  11. data/lib/ardb/adapter/mysql.rb +4 -17
  12. data/lib/ardb/adapter/postgresql.rb +51 -46
  13. data/lib/ardb/adapter/sqlite.rb +11 -15
  14. data/lib/ardb/adapter_spy.rb +18 -30
  15. data/lib/ardb/cli/clirb.rb +16 -18
  16. data/lib/ardb/cli/commands.rb +308 -129
  17. data/lib/ardb/cli.rb +29 -24
  18. data/lib/ardb/db_tests.rb +4 -4
  19. data/lib/ardb/default_order_by.rb +13 -21
  20. data/lib/ardb/migration.rb +15 -16
  21. data/lib/ardb/record_spy.rb +46 -61
  22. data/lib/ardb/relation_spy.rb +28 -32
  23. data/lib/ardb/require_autoloaded_active_record_files.rb +258 -57
  24. data/lib/ardb/test_helpers.rb +33 -29
  25. data/lib/ardb/use_db_default.rb +13 -21
  26. data/lib/ardb/version.rb +3 -1
  27. data/lib/ardb.rb +105 -86
  28. data/script/determine_autoloaded_active_record_files.rb +31 -24
  29. data/test/helper.rb +6 -13
  30. data/test/support/factory.rb +4 -3
  31. data/test/support/fake_schema.rb +3 -1
  32. data/test/support/postgresql/migrations/{.gitkeep → .keep} +0 -0
  33. data/test/support/postgresql/schema.rb +2 -1
  34. data/test/support/postgresql/setup_test_db.rb +23 -21
  35. data/test/support/relative_require_test_db_file.rb +1 -0
  36. data/test/support/require_test_db_file.rb +1 -0
  37. data/test/system/.keep +0 -0
  38. data/test/unit/adapter/base_tests.rb +80 -55
  39. data/test/unit/adapter/mysql_tests.rb +4 -19
  40. data/test/unit/adapter/postgresql_tests.rb +21 -30
  41. data/test/unit/adapter/sqlite_tests.rb +5 -11
  42. data/test/unit/adapter_spy_tests.rb +6 -17
  43. data/test/unit/ardb_tests.rb +75 -53
  44. data/test/unit/cli_tests.rb +234 -158
  45. data/test/unit/db_tests_tests.rb +7 -7
  46. data/test/unit/default_order_by_tests.rb +26 -24
  47. data/test/unit/migration_tests.rb +17 -18
  48. data/test/unit/record_spy_tests.rb +45 -41
  49. data/test/unit/relation_spy_tests.rb +40 -63
  50. data/test/unit/test_helpers_tests.rb +7 -15
  51. data/test/unit/use_db_default_tests.rb +35 -27
  52. metadata +109 -87
  53. data/lib/ardb/has_slug.rb +0 -107
  54. data/lib/ardb/migration_helpers.rb +0 -77
  55. data/lib/ardb/pg_json.rb +0 -90
  56. data/test/support/postgresql/pg_json_migrations/20160519133432_create_pg_json_migrate_test.rb +0 -13
  57. data/test/system/pg_json_tests.rb +0 -85
  58. data/test/unit/has_slug_tests.rb +0 -341
  59. data/test/unit/migration_helpers_tests.rb +0 -65
  60. data/test/unit/pg_json_tests.rb +0 -39
@@ -1,14 +1,15 @@
1
- require 'assert'
2
- require 'ardb'
1
+ # frozen_string_literal: true
3
2
 
4
- require 'logger'
5
- require 'ardb/adapter_spy'
6
- require 'ardb/adapter/mysql'
7
- require 'ardb/adapter/postgresql'
8
- require 'ardb/adapter/sqlite'
3
+ require "assert"
4
+ require "ardb"
9
5
 
10
- module Ardb
6
+ require "logger"
7
+ require "ardb/adapter_spy"
8
+ require "ardb/adapter/mysql"
9
+ require "ardb/adapter/postgresql"
10
+ require "ardb/adapter/sqlite"
11
11
 
12
+ module Ardb
12
13
  class UnitTests < Assert::Context
13
14
  desc "Ardb"
14
15
  setup do
@@ -23,7 +24,7 @@ module Ardb
23
24
  should have_imeths :init, :escape_like_pattern
24
25
 
25
26
  should "default the db file env var" do
26
- assert_equal 'config/db', ENV['ARDB_DB_FILE']
27
+ assert_equal "config/db", ENV["ARDB_DB_FILE"]
27
28
  end
28
29
 
29
30
  should "know its config" do
@@ -37,17 +38,16 @@ module Ardb
37
38
  subject.configure{ |c| yielded = c }
38
39
  assert_same subject.config, yielded
39
40
  end
40
-
41
41
  end
42
42
 
43
43
  class InitMethodSetupTests < UnitTests
44
44
  setup do
45
- @orig_env_pwd = ENV['PWD']
46
- @orig_env_ardb_db_file = ENV['ARDB_DB_FILE']
45
+ @orig_env_pwd = ENV["PWD"]
46
+ @orig_env_ardb_db_file = ENV["ARDB_DB_FILE"]
47
47
  @orig_ar_logger = ActiveRecord::Base.logger
48
48
 
49
49
  # stub in a temporary config, this allows us to modify it and not worry
50
- # about affecting Ardb's global config which could cause issues on other
50
+ # about affecting Ardb"s global config which could cause issues on other
51
51
  # tests
52
52
  @ardb_config = Config.new
53
53
  Assert.stub(Ardb, :config){ @ardb_config }
@@ -57,16 +57,15 @@ module Ardb
57
57
  @ardb_adapter ||= Ardb::AdapterSpy.new(*args)
58
58
  end
59
59
 
60
- ENV['ARDB_DB_FILE'] = 'test/support/require_test_db_file'
60
+ ENV["ARDB_DB_FILE"] = "test/support/require_test_db_file"
61
61
  @ardb_config.adapter = Adapter::VALID_ADAPTERS.sample
62
62
  @ardb_config.database = Factory.string
63
63
  end
64
64
  teardown do
65
65
  ActiveRecord::Base.logger = @orig_ar_logger
66
- ENV['ARDB_DB_FILE'] = @orig_env_ardb_db_file
67
- ENV['PWD'] = @orig_env_pwd
66
+ ENV["ARDB_DB_FILE"] = @orig_env_ardb_db_file
67
+ ENV["PWD"] = @orig_env_pwd
68
68
  end
69
-
70
69
  end
71
70
 
72
71
  class InitMethodTests < InitMethodSetupTests
@@ -74,25 +73,25 @@ module Ardb
74
73
 
75
74
  should "require the autoloaded active record files" do
76
75
  subject.init
77
- assert_false require('ardb/require_autoloaded_active_record_files')
76
+ assert_false require("ardb/require_autoloaded_active_record_files")
78
77
  end
79
78
 
80
79
  should "require the db file" do
81
80
  subject.init
82
- assert_false require(ENV['ARDB_DB_FILE'])
81
+ assert_false require(ENV["ARDB_DB_FILE"])
83
82
  end
84
83
 
85
84
  should "require the db file relative to the working directory if needed" do
86
- ENV['PWD'] = 'test/support'
87
- ENV['ARDB_DB_FILE'] = 'relative_require_test_db_file'
85
+ ENV["PWD"] = "test/support"
86
+ ENV["ARDB_DB_FILE"] = "relative_require_test_db_file"
88
87
  subject.init
89
- assert_false require(File.expand_path(ENV['ARDB_DB_FILE'], ENV['PWD']))
88
+ assert_false require(File.expand_path(ENV["ARDB_DB_FILE"], ENV["PWD"]))
90
89
  end
91
90
 
92
91
  should "raise an invalid db file error when it can't require it" do
93
- ENV['ARDB_DB_FILE'] = Factory.file_path
92
+ ENV["ARDB_DB_FILE"] = Factory.file_path
94
93
  error = assert_raises(InvalidDBFileError){ subject.init }
95
- exp = "can't require `#{ENV['ARDB_DB_FILE']}`, check that the " \
94
+ exp = "can't require `#{ENV["ARDB_DB_FILE"]}`, check that the " \
96
95
  "ARDB_DB_FILE env var is set to the file path of your db file"
97
96
  assert_equal exp, error.message
98
97
  end
@@ -113,6 +112,23 @@ module Ardb
113
112
  assert_same @ardb_adapter, subject.adapter
114
113
  end
115
114
 
115
+ should "set ActiveRecord::Base attributes" do
116
+ subject.init
117
+
118
+ assert_equal subject.config.logger, ActiveRecord::Base.logger
119
+ if ActiveRecord.respond_to?(:default_timezone=)
120
+ assert_equal(
121
+ subject.config.default_timezone,
122
+ ActiveRecord.default_timezone,
123
+ )
124
+ else
125
+ assert_equal(
126
+ subject.config.default_timezone,
127
+ ActiveRecord::Base.default_timezone,
128
+ )
129
+ end
130
+ end
131
+
116
132
  should "optionally establish an AR connection" do
117
133
  assert_nil @ardb_adapter
118
134
  subject.init
@@ -128,13 +144,14 @@ module Ardb
128
144
  should "raise a not initialized error using its adapter before init" do
129
145
  subject.reset_adapter
130
146
  assert_raises(NotInitializedError){ subject.adapter }
131
- assert_raises(NotInitializedError){ subject.escape_like_pattern(Factory.string) }
147
+ assert_raises(NotInitializedError) do
148
+ subject.escape_like_pattern(Factory.string)
149
+ end
132
150
 
133
151
  subject.init
134
152
  assert_nothing_raised{ subject.adapter }
135
153
  assert_nothing_raised{ subject.escape_like_pattern(Factory.string) }
136
154
  end
137
-
138
155
  end
139
156
 
140
157
  class InitTests < InitMethodSetupTests
@@ -148,7 +165,6 @@ module Ardb
148
165
  exp = subject.adapter.escape_like_pattern(pattern)
149
166
  assert_equal exp, subject.escape_like_pattern(pattern)
150
167
  end
151
-
152
168
  end
153
169
 
154
170
  class ConfigTests < UnitTests
@@ -169,17 +185,17 @@ module Ardb
169
185
  :password,
170
186
  :pool,
171
187
  :checkout_timeout,
172
- :min_messages
188
+ :min_messages,
173
189
  ]
174
190
  assert_equal exp, subject::ACTIVERECORD_ATTRS
175
191
  end
176
192
 
177
193
  should "know its default migrations path" do
178
- assert_equal 'db/migrations', subject::DEFAULT_MIGRATIONS_PATH
194
+ assert_equal "db/migrations", subject::DEFAULT_MIGRATIONS_PATH
179
195
  end
180
196
 
181
197
  should "know its default schema path" do
182
- assert_equal 'db/schema', subject::DEFAULT_SCHEMA_PATH
198
+ assert_equal "db/schema", subject::DEFAULT_SCHEMA_PATH
183
199
  end
184
200
 
185
201
  should "know its schema formats" do
@@ -188,7 +204,6 @@ module Ardb
188
204
  exp = [subject::RUBY_SCHEMA_FORMAT, subject::SQL_SCHEMA_FORMAT]
189
205
  assert_equal exp, subject::VALID_SCHEMA_FORMATS
190
206
  end
191
-
192
207
  end
193
208
 
194
209
  class ConfigInitTests < ConfigTests
@@ -198,18 +213,27 @@ module Ardb
198
213
  end
199
214
  subject{ @config }
200
215
 
201
- should have_accessors *Ardb::Config::ACTIVERECORD_ATTRS
202
- should have_accessors :logger, :root_path
216
+ should have_accessors(*Ardb::Config::ACTIVERECORD_ATTRS)
217
+ should have_accessors :default_timezone, :logger, :root_path
203
218
  should have_readers :schema_format
204
219
  should have_writers :migrations_path, :schema_path
205
220
  should have_imeths :activerecord_connect_hash, :validate!
206
221
 
207
222
  should "default its attributs" do
223
+ assert_equal :utc, subject.default_timezone
208
224
  assert_instance_of Logger, subject.logger
209
- assert_equal ENV['PWD'], subject.root_path
210
- exp = File.expand_path(@config_class::DEFAULT_MIGRATIONS_PATH, subject.root_path)
225
+ assert_equal ENV["PWD"], subject.root_path
226
+ exp =
227
+ File.expand_path(
228
+ @config_class::DEFAULT_MIGRATIONS_PATH,
229
+ subject.root_path,
230
+ )
211
231
  assert_equal exp, subject.migrations_path
212
- exp = File.expand_path(@config_class::DEFAULT_SCHEMA_PATH, subject.root_path)
232
+ exp =
233
+ File.expand_path(
234
+ @config_class::DEFAULT_SCHEMA_PATH,
235
+ subject.root_path,
236
+ )
213
237
  assert_equal exp, subject.schema_path
214
238
  assert_equal @config_class::RUBY_SCHEMA_FORMAT, subject.schema_format
215
239
  end
@@ -248,11 +272,11 @@ module Ardb
248
272
  end
249
273
 
250
274
  should "know its activerecord connection hash" do
251
- attrs_and_values = @config_class::ACTIVERECORD_ATTRS.map do |attr_name|
252
- value = [Factory.string, nil].sample
275
+ attrs_and_values = @config_class::ACTIVERECORD_ATTRS.map{ |attr_name|
276
+ value = [Factory.string, nil].sample
253
277
  subject.send("#{attr_name}=", value)
254
- [attr_name.to_s, value] if !value.nil?
255
- end.compact
278
+ [attr_name.to_s, value] unless value.nil?
279
+ }.compact
256
280
  assert_equal Hash[attrs_and_values], subject.activerecord_connect_hash
257
281
  end
258
282
 
@@ -278,11 +302,12 @@ module Ardb
278
302
 
279
303
  should "know if its equal to another config" do
280
304
  attrs = @config_class::ACTIVERECORD_ATTRS + [
305
+ :default_timezone,
281
306
  :logger,
282
307
  :root_path,
283
308
  :schema_format,
284
309
  :migrations_path,
285
- :schema_path
310
+ :schema_path,
286
311
  ]
287
312
  attrs.each do |attr_name|
288
313
  subject.send("#{attr_name}=", Factory.string)
@@ -298,7 +323,6 @@ module Ardb
298
323
  other_config.send("#{attr_name}=", Factory.string)
299
324
  assert_not_equal other_config, subject
300
325
  end
301
-
302
326
  end
303
327
 
304
328
  class AdapterTests < UnitTests
@@ -317,21 +341,21 @@ module Ardb
317
341
 
318
342
  should "know its valid adapters" do
319
343
  exp = [
320
- 'sqlite',
321
- 'sqlite3',
322
- 'postgresql',
323
- 'postgres',
324
- 'mysql',
325
- 'mysql2'
344
+ "sqlite",
345
+ "sqlite3",
346
+ "postgresql",
347
+ "postgres",
348
+ "mysql",
349
+ "mysql2",
326
350
  ]
327
351
  assert_equal exp, subject::VALID_ADAPTERS
328
352
  end
329
353
 
330
354
  should "build an adapter specific class using the passed config" do
331
355
  adapter_key, exp_adapter_class = [
332
- ['sqlite', Ardb::Adapter::Sqlite],
333
- ['postgresql', Ardb::Adapter::Postgresql],
334
- ['mysql', Ardb::Adapter::Mysql]
356
+ ["sqlite", Ardb::Adapter::Sqlite],
357
+ ["postgresql", Ardb::Adapter::Postgresql],
358
+ ["mysql", Ardb::Adapter::Mysql],
335
359
  ].sample
336
360
  @config.adapter = adapter_key
337
361
 
@@ -369,7 +393,5 @@ module Ardb
369
393
  assert_instance_of Ardb::Adapter::Mysql, adapter
370
394
  assert_equal @config, adapter.config
371
395
  end
372
-
373
396
  end
374
-
375
397
  end