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.
Files changed (54) hide show
  1. checksums.yaml +7 -7
  2. data/Gemfile +4 -5
  3. data/README.md +252 -3
  4. data/ardb.gemspec +8 -8
  5. data/bin/ardb +1 -1
  6. data/lib/ardb.rb +155 -72
  7. data/lib/ardb/adapter/base.rb +67 -47
  8. data/lib/ardb/adapter/mysql.rb +3 -19
  9. data/lib/ardb/adapter/postgresql.rb +33 -37
  10. data/lib/ardb/adapter/sqlite.rb +7 -16
  11. data/lib/ardb/adapter_spy.rb +58 -92
  12. data/lib/ardb/cli.rb +18 -226
  13. data/lib/ardb/{clirb.rb → cli/clirb.rb} +16 -18
  14. data/lib/ardb/cli/commands.rb +365 -0
  15. data/lib/ardb/db_tests.rb +2 -4
  16. data/lib/ardb/default_order_by.rb +3 -13
  17. data/lib/ardb/migration.rb +18 -20
  18. data/lib/ardb/record_spy.rb +7 -26
  19. data/lib/ardb/relation_spy.rb +0 -6
  20. data/lib/ardb/require_autoloaded_active_record_files.rb +103 -58
  21. data/lib/ardb/test_helpers.rb +2 -5
  22. data/lib/ardb/use_db_default.rb +4 -15
  23. data/lib/ardb/version.rb +1 -1
  24. data/script/determine_autoloaded_active_record_files.rb +11 -8
  25. data/test/helper.rb +9 -6
  26. data/test/support/factory.rb +17 -2
  27. data/test/support/fake_schema.rb +5 -0
  28. data/test/support/postgresql/migrations/.keep +0 -0
  29. data/test/support/postgresql/schema.rb +2 -0
  30. data/test/support/postgresql/setup_test_db.rb +51 -0
  31. data/test/support/relative_require_test_db_file.rb +2 -0
  32. data/test/support/require_test_db_file.rb +1 -0
  33. data/test/system/.keep +0 -0
  34. data/test/unit/adapter/base_tests.rb +163 -75
  35. data/test/unit/adapter/mysql_tests.rb +4 -20
  36. data/test/unit/adapter/postgresql_tests.rb +20 -28
  37. data/test/unit/adapter/sqlite_tests.rb +9 -12
  38. data/test/unit/adapter_spy_tests.rb +48 -71
  39. data/test/unit/ardb_tests.rb +338 -38
  40. data/test/unit/cli_tests.rb +334 -225
  41. data/test/unit/db_tests_tests.rb +3 -6
  42. data/test/unit/default_order_by_tests.rb +4 -8
  43. data/test/unit/migration_tests.rb +20 -17
  44. data/test/unit/record_spy_tests.rb +18 -23
  45. data/test/unit/relation_spy_tests.rb +17 -46
  46. data/test/unit/test_helpers_tests.rb +5 -20
  47. data/test/unit/use_db_default_tests.rb +9 -13
  48. metadata +111 -100
  49. data/lib/ardb/has_slug.rb +0 -107
  50. data/lib/ardb/migration_helpers.rb +0 -77
  51. data/lib/ardb/root_path.rb +0 -15
  52. data/test/unit/config_tests.rb +0 -58
  53. data/test/unit/has_slug_tests.rb +0 -341
  54. data/test/unit/migration_helpers_tests.rb +0 -59
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
- ---
2
- SHA1:
3
- metadata.gz: efed4edb38eade9eaa2de6263e30f163b4ffa3db
4
- data.tar.gz: 41bb43c7936a806124cdeb747d78c6a4de2393e4
5
- SHA512:
6
- metadata.gz: ba2ed871805feac6de258476b78dc906c63b6a4491b8ab24925dc87447e19f4e89f073b6642729d8ec863a3b760257293da95ed4aa7e8d2b3f7d09aedc86cefe
7
- data.tar.gz: f521735072f0ce180c0073593af0aefc5ae16cc3bcab8ed5c0dcf7677f1da6d818fa8b051c1f91fa07b18626582b4beeec021810a51223f6ca538d503c9fb7bb
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 81b830715964b5aace51929da208df3bf357a35c42e5c38aea50b4d98d625d96
4
+ data.tar.gz: f4014e705ae352722d6a16f08061767d31c5851b7c3e0cdc5c6592abcd74d034
5
+ SHA512:
6
+ metadata.gz: '08a7091251f11c2969aae47148185eae17efe0996b7dd0d79f63ac9648ba13c7d60694fe6b3f46ef43e77924e928f209d0f13cdbdbbd249578e143fc3f6d18a9'
7
+ data.tar.gz: 77f04eda98916783b4c1fb076a7bc461fd71f114547d62030f2379be7c5687219e2c5b3e3e925d42ead55d5e8b5e1a6651c0841710665d3313888b3c96935adc
data/Gemfile CHANGED
@@ -1,9 +1,8 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gemspec
4
-
5
- gem 'pry', "~> 0.9.0"
3
+ ruby "~> 2.4"
6
4
 
7
- # Lock down gem versions because they require a newer version of ruby
8
- gem 'i18n', "< 0.7"
5
+ gemspec
9
6
 
7
+ gem "pg", "~> 1.1.4"
8
+ gem "pry", "~> 0.12.2"
data/README.md CHANGED
@@ -1,16 +1,265 @@
1
1
  # Ardb
2
2
 
3
- Activerecord database tools.
3
+ Tools for using ActiveRecord with or without Rails.
4
4
 
5
5
  ## Usage
6
6
 
7
- TODO: Write code samples and usage instructions here
7
+ Given configured database connection parameters, Ardb provides a CLI and assorted tools for working with an ActiveRecord database. Ardb is designed to be used with or without Rails.
8
+
9
+ ### Configuration
10
+
11
+ By default, Ardb looks for database configuration in the `config/db.rb` file. You can override this using the `ENV["ARDB_DB_FILE"]` env var.
12
+
13
+ The configuration includes typical database configuration parameters:
14
+
15
+ ```ruby
16
+ # in config/db.rb
17
+ require "ardb"
18
+
19
+ Ardb.configure do |c|
20
+ c.logger Logger.new($stdout)
21
+ c.root_path File.expand_path("../..", __FILE__)
22
+
23
+ c.db.adapter "postgresql"
24
+ c.db.encoding "unicode"
25
+ c.db.min_messages "WARNING"
26
+ c.db.url "localhost:5432"
27
+ c.db.username "testuser"
28
+ c.db.password "secret"
29
+ c.db.database "testdb"
30
+ end
31
+ ```
32
+
33
+ #### Rails configuration
34
+
35
+ If using Ardb with Rails, add a `config/db.rb` file to have Ardb use Rails's configuration settings:
36
+
37
+ ```ruby
38
+ # in config/db.rb
39
+ require_relative "./environment"
40
+ require "ardb"
41
+
42
+ # This Ardb configuration matches Rails's settings.
43
+ Ardb.configure do |c|
44
+ rails_db_config = Rails.application.config_for("database")
45
+ c.root_path = Rails.root
46
+ c.logger = Rails.logger
47
+ c.schema_format = Rails.application.config.active_record.schema_format || :ruby
48
+ c.default_timezone = :utc
49
+ c.adapter = rails_db_config["adapter"]
50
+ c.host = rails_db_config["host"]
51
+ c.port = rails_db_config["port"]
52
+ c.username = rails_db_config["username"]
53
+ c.password = rails_db_config["password"]
54
+ c.database = rails_db_config["database"]
55
+ c.encoding = rails_db_config["encoding"]
56
+ c.min_messages = rails_db_config["min_messages"]
57
+
58
+ c.migrations_path = "db/migrate"
59
+ c.schema_path = "db/schema"
60
+ end
61
+ ```
62
+
63
+ ### CLI
64
+
65
+ ```
66
+ $ ardb --help
67
+ Usage: ardb [COMMAND] [options]
68
+
69
+ Options:
70
+ --version
71
+ --help
72
+
73
+ Commands:
74
+ connect Connect to the configured DB
75
+ create Create the configured DB
76
+ drop Drop the configured DB
77
+ generate-migration Generate a MIGRATION-NAME migration file
78
+ migrate Migrate the configured DB
79
+ migrate-up Migrate the configured DB up
80
+ migrate-down Migrate the configured DB down
81
+ migrate-forward Migrate the configured DB forward
82
+ migrate-backward Migrate the configured DB backward
83
+ ```
84
+
85
+ #### `connect` command
86
+
87
+ ```
88
+ $ ardb connect --help
89
+ Usage: ardb connect [options]
90
+
91
+ Options:
92
+ --version
93
+ --help
94
+
95
+ Description:
96
+ Connect to the configured DB
97
+ $ ardb connect
98
+ error: database "some_database" does not exist
99
+ $ ardb create
100
+ created postgresql db "some_database"
101
+ $ ardb connect
102
+ connected to postgresql db "some_database"
103
+ ```
104
+
105
+ Use this command to verify the connection parameter configuration is correct.
106
+
107
+ #### `create` command
108
+
109
+ ```
110
+ $ ardb create --help
111
+ Usage: ardb create [options]
112
+
113
+ Options:
114
+ --version
115
+ --help
116
+
117
+ Description:
118
+ Create the configured DB
119
+ $ ardb create
120
+ created postgresql db "some_database"
121
+ $ ardb create
122
+ error: database "some_database" already exists
123
+ ```
124
+
125
+ #### `drop` command
126
+
127
+ ```
128
+ $ ardb drop --help
129
+ Usage: ardb drop [options]
130
+
131
+ Options:
132
+ --version
133
+ --help
134
+
135
+ Description:
136
+ Drop the configured DB
137
+ $ ardb drop
138
+ dropped postgresql db "some_database"
139
+ $ ardb drop
140
+ error: database "some_database" does not exist
141
+ ```
142
+
143
+ #### `generate-migration` command
144
+
145
+ ```
146
+ $ ardb generate-migration add_projects --help
147
+ Usage: ardb generate-migration MIGRATION-NAME [options]
148
+
149
+ Options:
150
+ --version
151
+ --help
152
+
153
+ Description:
154
+ Generate a MIGRATION-NAME migration file
155
+ $ ardb generate-migration add_projects
156
+ generated /path/to/app/db/migrate/20191222074043_add_projects.rb
157
+ ```
158
+
159
+ #### `migrate` command
160
+
161
+ ```
162
+ $ ardb migrate --help
163
+ Usage: ardb migrate [options]
164
+
165
+ Options:
166
+ --version
167
+ --help
168
+
169
+ Description:
170
+ Migrate the configured DB
171
+ $ ardb migrate
172
+ == 20191222074043 AddProjects: migrating ======================================
173
+ -- create_table(:projects)
174
+ -> 0.0276s
175
+ == 20191222074043 AddProjects: migrated (0.0277s) =============================
176
+ ```
177
+
178
+ #### `migrate-up` command
179
+
180
+ ```
181
+ $ ardb migrate-up --help
182
+ Usage: ardb migrate-up [options]
183
+
184
+ Options:
185
+ -t, --target-version VALUE version to migrate to
186
+ --version
187
+ --help
188
+
189
+ Description:
190
+ Migrate the configured DB up
191
+ $ ardb migrate-up
192
+ == 20191222074043 AddProjects: migrating ======================================
193
+ -- create_table(:projects)
194
+ -> 0.0510s
195
+ == 20191222074043 AddProjects: migrated (0.0511s) =============================
196
+ ```
197
+
198
+ #### `migrate-down` command
199
+
200
+ ```
201
+ $ ardb migrate-down --help
202
+ Usage: ardb migrate-down [options]
203
+
204
+ Options:
205
+ -t, --target-version VALUE version to migrate to
206
+ --version
207
+ --help
208
+
209
+ Description:
210
+ Migrate the configured DB down
211
+ $ ardb migrate-down
212
+ == 20191222074043 AddProjects: reverting ======================================
213
+ -- drop_table(:projects)
214
+ -> 0.0092s
215
+ == 20191222074043 AddProjects: reverted (0.0132s) =============================
216
+ ```
217
+
218
+ #### `migrate-forward` command
219
+
220
+ ```
221
+ $ ardb migrate-forward --help
222
+ Usage: ardb migrate-forward [options]
223
+
224
+ Options:
225
+ -s, --steps VALUE number of migrations to migrate
226
+ --version
227
+ --help
228
+
229
+ Description:
230
+ Migrate the configured DB forward
231
+ $ ardb migrate-forward
232
+ == 20191222074043 AddProjects: migrating ======================================
233
+ -- create_table(:projects)
234
+ -> 0.0510s
235
+ == 20191222074043 AddProjects: migrated (0.0511s) =============================
236
+ ```
237
+
238
+ #### `migrate-backward` command
239
+
240
+ ```
241
+ $ ardb migrate-backward --help
242
+ Usage: ardb migrate-backward [options]
243
+
244
+ Options:
245
+ -s, --steps VALUE number of migrations to migrate
246
+ --version
247
+ --help
248
+
249
+ Description:
250
+ Migrate the configured DB backward
251
+ $ ardb migrate-backward
252
+ == 20191222074043 AddProjects: reverting ======================================
253
+ -- drop_table(:projects)
254
+ -> 0.0092s
255
+ == 20191222074043 AddProjects: reverted (0.0132s) =============================
256
+ ```
8
257
 
9
258
  ## Installation
10
259
 
11
260
  Add this line to your application's Gemfile:
12
261
 
13
- gem 'ardb'
262
+ gem "ardb"
14
263
 
15
264
  And then execute:
16
265
 
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require "ardb/version"
5
5
 
@@ -11,19 +11,19 @@ Gem::Specification.new do |gem|
11
11
  gem.summary = %q{Activerecord database tools.}
12
12
  gem.description = %q{Activerecord database tools.}
13
13
  gem.homepage = "http://github.com/redding/ardb"
14
- gem.license = 'MIT'
14
+ gem.license = "MIT"
15
15
 
16
16
  gem.files = `git ls-files`.split($/)
17
17
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_development_dependency("assert", ["~> 2.15.1"])
21
+ gem.required_ruby_version = "~> 2.4"
22
22
 
23
- gem.add_dependency('activerecord', ["~> 3.2"])
24
- gem.add_dependency('activesupport', ["~> 3.2"])
25
- gem.add_dependency('much-plugin', ["~> 0.1.0"])
26
- gem.add_dependency('ns-options', ["~> 1.1.6"])
27
- gem.add_dependency('scmd', ["~> 3.0.1"])
23
+ gem.add_development_dependency("assert", ["~> 2.18.1"])
28
24
 
25
+ gem.add_dependency("activerecord", ["> 5.0", "< 7.0"])
26
+ gem.add_dependency("activesupport", ["> 5.0", "< 7.0"])
27
+ gem.add_dependency("much-plugin", ["~> 0.2.1"])
28
+ gem.add_dependency("scmd", ["~> 3.0.3"])
29
29
  end
data/bin/ardb CHANGED
@@ -3,5 +3,5 @@
3
3
  # Copyright (c) 2013-Present Kelly Redding and Collin Redding
4
4
  #
5
5
 
6
- require 'ardb/cli'
6
+ require "ardb/cli"
7
7
  Ardb::CLI.run ARGV
@@ -1,115 +1,198 @@
1
- require 'pathname'
2
- require 'singleton'
3
- require 'active_record'
4
- require 'ns-options'
1
+ require "active_record"
2
+ require "logger"
5
3
 
6
- require 'ardb/version'
7
- require 'ardb/root_path'
4
+ require "ardb/version"
8
5
 
9
- ENV['ARDB_DB_FILE'] ||= 'config/db'
6
+ ENV["ARDB_DB_FILE"] ||= "config/db"
10
7
 
11
8
  module Ardb
12
- NotConfiguredError = Class.new(RuntimeError)
13
-
14
- def self.config; Config; end
15
- def self.configure(&block); Config.define(&block); end
9
+ def self.config
10
+ @config ||= Config.new
11
+ end
16
12
 
17
- def self.adapter; Adapter.current; end
13
+ def self.configure(&block)
14
+ self.config.tap(&block)
15
+ end
18
16
 
19
- def self.validate!
20
- if !self.config.required_set?
21
- raise NotConfiguredError, "missing required configs"
22
- end
17
+ def self.adapter
18
+ @adapter || raise(NotInitializedError.new(caller))
23
19
  end
24
20
 
21
+ def self.reset_adapter; @adapter = nil; end
22
+
25
23
  def self.init(establish_connection = true)
26
- require 'ardb/require_autoloaded_active_record_files'
27
- require self.config.db_file
28
- validate!
29
- Adapter.init
24
+ require "ardb/require_autoloaded_active_record_files"
25
+ begin
26
+ require_db_file
27
+ rescue InvalidDBFileError => exception
28
+ exception.set_backtrace(caller)
29
+ raise exception
30
+ end
31
+
32
+ self.config.validate!
33
+ @adapter = Adapter.new(self.config)
30
34
 
31
35
  # setup AR
36
+ ActiveRecord::Base.default_timezone = self.config.default_timezone
32
37
  ActiveRecord::Base.logger = self.config.logger
33
- if establish_connection
34
- ActiveRecord::Base.establish_connection(self.config.db_settings)
35
- end
38
+ self.adapter.connect_db if establish_connection
36
39
  end
37
40
 
38
41
  def self.escape_like_pattern(pattern, escape_char = nil)
39
42
  self.adapter.escape_like_pattern(pattern, escape_char)
43
+ rescue NotInitializedError => exception
44
+ exception.set_backtrace(caller)
45
+ raise exception
40
46
  end
41
47
 
42
- class Config
43
- include NsOptions::Proxy
44
-
45
- namespace :db do
46
- option :adapter, String, :required => true
47
- option :database, String, :required => true
48
- option :encoding, String, :required => false
49
- option :host, String, :required => false
50
- option :port, Integer, :required => false
51
- option :username, String, :required => false
52
- option :password, String, :required => false
53
- option :pool, Integer, :required => false
54
- option :checkout_timeout, Integer, :required => false
48
+ private
49
+
50
+ # try requiring the db file via the load path or as an absolute path, if
51
+ # that fails it tries requiring relative to the current working directory
52
+ def self.require_db_file
53
+ begin
54
+ require ENV["ARDB_DB_FILE"]
55
+ rescue LoadError
56
+ require File.expand_path(ENV["ARDB_DB_FILE"], ENV["PWD"])
55
57
  end
58
+ rescue LoadError
59
+ raise InvalidDBFileError, "can't require `#{ENV["ARDB_DB_FILE"]}`, " \
60
+ "check that the ARDB_DB_FILE env var is set to " \
61
+ "the file path of your db file"
62
+ end
56
63
 
57
- option :db_file, Pathname, :default => ENV['ARDB_DB_FILE']
58
- option :root_path, Pathname, :required => true
59
- option :logger, :required => true
60
- option :migrations_path, RootPath, :default => proc{ "db/migrations" }
61
- option :schema_path, RootPath, :default => proc{ "db/schema" }
62
- option :schema_format, Symbol, :default => :ruby
63
-
64
- def self.db_settings
65
- db.to_hash.inject({}) do |settings, (k, v)|
66
- settings[k.to_s] = v if !v.nil?
67
- settings
68
- end
64
+ class Config
65
+ ACTIVERECORD_ATTRS = [
66
+ :adapter,
67
+ :database,
68
+ :encoding,
69
+ :host,
70
+ :port,
71
+ :username,
72
+ :password,
73
+ :pool,
74
+ :checkout_timeout,
75
+ :min_messages
76
+ ].freeze
77
+
78
+ DEFAULT_MIGRATIONS_PATH = "db/migrations".freeze
79
+ DEFAULT_SCHEMA_PATH = "db/schema".freeze
80
+ RUBY_SCHEMA_FORMAT = :ruby.freeze
81
+ SQL_SCHEMA_FORMAT = :sql.freeze
82
+ VALID_SCHEMA_FORMATS = [RUBY_SCHEMA_FORMAT, SQL_SCHEMA_FORMAT].freeze
83
+
84
+ attr_accessor(*ACTIVERECORD_ATTRS)
85
+ attr_accessor :default_timezone, :logger, :root_path
86
+ attr_reader :schema_format
87
+ attr_writer :migrations_path, :schema_path
88
+
89
+ def initialize
90
+ @default_timezone = :utc
91
+ @logger = Logger.new(STDOUT)
92
+ @root_path = ENV["PWD"]
93
+ @migrations_path = DEFAULT_MIGRATIONS_PATH
94
+ @schema_path = DEFAULT_SCHEMA_PATH
95
+ @schema_format = RUBY_SCHEMA_FORMAT
69
96
  end
70
97
 
71
- end
98
+ def migrations_path
99
+ File.expand_path(@migrations_path.to_s, @root_path.to_s)
100
+ end
72
101
 
73
- class Adapter
74
- include Singleton
102
+ def schema_path
103
+ File.expand_path(@schema_path.to_s, @root_path.to_s)
104
+ end
75
105
 
76
- attr_accessor :current
106
+ def schema_format=(new_value)
107
+ @schema_format = begin
108
+ new_value.to_sym
109
+ rescue NoMethodError
110
+ raise ArgumentError, "schema format must be a `Symbol`", caller
111
+ end
112
+ end
77
113
 
78
- def init
79
- @current = Adapter.send(Ardb.config.db.adapter)
114
+ def activerecord_connect_hash
115
+ ACTIVERECORD_ATTRS.inject({}) do |h, attr_name|
116
+ value = self.send(attr_name)
117
+ !value.nil? ? h.merge!(attr_name.to_s => value) : h
118
+ end
80
119
  end
81
120
 
82
- def reset
83
- @current = nil
121
+ def validate!
122
+ if self.adapter.to_s.empty? || self.database.to_s.empty?
123
+ raise ConfigurationError, "an adapter and database must be provided"
124
+ end
125
+
126
+ if !VALID_SCHEMA_FORMATS.include?(self.schema_format)
127
+ raise ConfigurationError, "schema format must be one of: " \
128
+ "#{VALID_SCHEMA_FORMATS.join(", ")}"
129
+ end
130
+
131
+ true
84
132
  end
85
133
 
86
- def sqlite
87
- require 'ardb/adapter/sqlite'
88
- Adapter::Sqlite.new
134
+ def ==(other)
135
+ if other.kind_of?(self.class)
136
+ self.activerecord_connect_hash == other.activerecord_connect_hash &&
137
+ self.default_timezone == other.default_timezone &&
138
+ self.logger == other.logger &&
139
+ self.root_path == other.root_path &&
140
+ self.schema_format == other.schema_format &&
141
+ self.migrations_path == other.migrations_path &&
142
+ self.schema_path == other.schema_path
143
+ else
144
+ super
145
+ end
89
146
  end
90
- alias_method :sqlite3, :sqlite
147
+ end
91
148
 
92
- def postgresql
93
- require 'ardb/adapter/postgresql'
94
- Adapter::Postgresql.new
149
+ module Adapter
150
+ VALID_ADAPTERS = [
151
+ "sqlite",
152
+ "sqlite3",
153
+ "postgresql",
154
+ "postgres",
155
+ "mysql",
156
+ "mysql2"
157
+ ].freeze
158
+
159
+ def self.new(config)
160
+ if !VALID_ADAPTERS.include?(config.adapter)
161
+ raise InvalidAdapterError, "invalid adapter: `#{config.adapter}`"
162
+ end
163
+ self.send(config.adapter, config)
95
164
  end
96
165
 
97
- def mysql
98
- require 'ardb/adapter/mysql'
99
- Adapter::Mysql.new
166
+ def self.sqlite(config)
167
+ require "ardb/adapter/sqlite"
168
+ Adapter::Sqlite.new(config)
100
169
  end
101
- alias_method :mysql2, :mysql
102
170
 
103
- # nice singleton api
171
+ def self.sqlite3(config); self.sqlite(config); end
104
172
 
105
- def self.method_missing(method, *args, &block)
106
- self.instance.send(method, *args, &block)
173
+ def self.postgresql(config)
174
+ require "ardb/adapter/postgresql"
175
+ Adapter::Postgresql.new(config)
107
176
  end
108
177
 
109
- def self.respond_to?(method)
110
- super || self.instance.respond_to?(method)
178
+ def self.postgres(config); self.postgresql(config); end
179
+
180
+ def self.mysql(config)
181
+ require "ardb/adapter/mysql"
182
+ Adapter::Mysql.new(config)
111
183
  end
112
184
 
185
+ def self.mysql2(config); self.mysql(config); end
113
186
  end
114
187
 
188
+ InvalidDBFileError = Class.new(ArgumentError)
189
+ ConfigurationError = Class.new(ArgumentError)
190
+ InvalidAdapterError = Class.new(RuntimeError)
191
+
192
+ class NotInitializedError < RuntimeError
193
+ def initialize(backtrace)
194
+ super("ardb hasn't been initialized yet, run `Ardb.init`")
195
+ set_backtrace(backtrace)
196
+ end
197
+ end
115
198
  end