ardb 0.28.1 → 0.29.2
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/.l.yml +8 -0
- data/.rubocop.yml +3 -0
- data/.t.yml +6 -0
- data/Gemfile +21 -8
- data/README.md +252 -3
- data/ardb.gemspec +14 -10
- data/bin/ardb +3 -1
- data/lib/ardb.rb +110 -80
- data/lib/ardb/adapter/base.rb +73 -47
- data/lib/ardb/adapter/mysql.rb +4 -17
- data/lib/ardb/adapter/postgresql.rb +51 -46
- data/lib/ardb/adapter/sqlite.rb +11 -15
- data/lib/ardb/adapter_spy.rb +18 -30
- data/lib/ardb/cli.rb +29 -24
- data/lib/ardb/cli/clirb.rb +19 -17
- data/lib/ardb/cli/commands.rb +308 -129
- data/lib/ardb/db_tests.rb +4 -4
- data/lib/ardb/default_order_by.rb +13 -21
- data/lib/ardb/migration.rb +15 -16
- data/lib/ardb/record_spy.rb +46 -61
- data/lib/ardb/relation_spy.rb +27 -31
- data/lib/ardb/require_autoloaded_active_record_files.rb +174 -58
- data/lib/ardb/test_helpers.rb +13 -14
- data/lib/ardb/use_db_default.rb +10 -19
- data/lib/ardb/version.rb +3 -1
- data/script/determine_autoloaded_active_record_files.rb +31 -24
- data/test/helper.rb +6 -13
- data/test/support/factory.rb +4 -3
- data/test/support/fake_schema.rb +3 -1
- data/test/support/postgresql/migrations/{.gitkeep → .keep} +0 -0
- data/test/support/postgresql/schema.rb +2 -1
- data/test/support/postgresql/setup_test_db.rb +17 -15
- data/test/support/relative_require_test_db_file.rb +1 -0
- data/test/support/require_test_db_file.rb +1 -0
- data/test/system/.keep +0 -0
- data/test/unit/adapter/base_tests.rb +83 -55
- data/test/unit/adapter/mysql_tests.rb +4 -19
- data/test/unit/adapter/postgresql_tests.rb +21 -30
- data/test/unit/adapter/sqlite_tests.rb +5 -11
- data/test/unit/adapter_spy_tests.rb +6 -17
- data/test/unit/ardb_tests.rb +81 -53
- data/test/unit/cli_tests.rb +232 -157
- data/test/unit/db_tests_tests.rb +7 -7
- data/test/unit/default_order_by_tests.rb +21 -20
- data/test/unit/migration_tests.rb +17 -18
- data/test/unit/record_spy_tests.rb +36 -34
- data/test/unit/relation_spy_tests.rb +40 -63
- data/test/unit/test_helpers_tests.rb +7 -15
- data/test/unit/use_db_default_tests.rb +22 -17
- metadata +117 -84
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
5
|
-
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 49a5b06420fd7d8b670267fd508d46efe7d600838a5808c33d25e166739e453d
|
4
|
+
data.tar.gz: cee5d9470ee881423fb3783b5607a9be982b45a34637f936a39590912241ce79
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1f3581d3e82f86af6b6dfcb79adab4560c577c907ac3c908febdf1b1216b7bfd473715053b87790083e4db7b44e7a0a6e0c35b0e512cdb652e75fec8c846d1e0
|
7
|
+
data.tar.gz: a63b4a6eef47151c9e22edff4177b25dce35e4a9be4914ad2a49cba22a7d785e8ac42d19e7eb0e51615d549c0f52d6a290a46e8847fd3701789261d1b10b7252
|
data/.l.yml
ADDED
data/.rubocop.yml
ADDED
data/.t.yml
ADDED
data/Gemfile
CHANGED
@@ -1,13 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source "https://rubygems.org"
|
2
4
|
|
3
|
-
|
5
|
+
ruby "~> 2.5"
|
4
6
|
|
5
|
-
|
6
|
-
gem 'pry', "~> 0.9.0"
|
7
|
+
gemspec
|
7
8
|
|
8
|
-
#
|
9
|
-
|
9
|
+
# Uncomment one of these and run:
|
10
|
+
#
|
11
|
+
# bundle update activerecord activesupport
|
12
|
+
#
|
13
|
+
# to test a specific version.
|
14
|
+
#
|
15
|
+
# Rails 6.1
|
16
|
+
gem "activerecord", "~> 6.1"
|
17
|
+
gem "activesupport", "~> 6.1"
|
18
|
+
# Rails 6.0
|
19
|
+
# gem "activerecord", "~> 6.0.3"
|
20
|
+
# gem "activesupport", "~> 6.0.3"
|
21
|
+
# Rails 5.2
|
22
|
+
# gem "activerecord", "~> 5.2.4"
|
23
|
+
# gem "activesupport", "~> 5.2.4"
|
10
24
|
|
11
|
-
|
12
|
-
|
13
|
-
end
|
25
|
+
gem "pg", "~> 1.1.4"
|
26
|
+
gem "pry"
|
data/README.md
CHANGED
@@ -1,16 +1,265 @@
|
|
1
1
|
# Ardb
|
2
2
|
|
3
|
-
|
3
|
+
Tools for using ActiveRecord with or without Rails.
|
4
4
|
|
5
5
|
## Usage
|
6
6
|
|
7
|
-
|
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
|
262
|
+
gem "ardb"
|
14
263
|
|
15
264
|
And then execute:
|
16
265
|
|
data/ardb.gemspec
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
6
|
require "ardb/version"
|
5
7
|
|
@@ -8,21 +10,23 @@ Gem::Specification.new do |gem|
|
|
8
10
|
gem.version = Ardb::VERSION
|
9
11
|
gem.authors = ["Kelly Redding", "Collin Redding"]
|
10
12
|
gem.email = ["kelly@kellyredding.com", "collin.redding@me.com"]
|
11
|
-
gem.summary =
|
12
|
-
gem.description =
|
13
|
+
gem.summary = "Activerecord database tools."
|
14
|
+
gem.description = "Activerecord database tools."
|
13
15
|
gem.homepage = "http://github.com/redding/ardb"
|
14
|
-
gem.license =
|
16
|
+
gem.license = "MIT"
|
15
17
|
|
16
|
-
gem.files
|
18
|
+
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
19
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
20
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
21
|
gem.require_paths = ["lib"]
|
20
22
|
|
21
|
-
gem.
|
23
|
+
gem.required_ruby_version = "~> 2.5"
|
22
24
|
|
23
|
-
gem.
|
24
|
-
gem.
|
25
|
-
gem.add_dependency('much-plugin', ["~> 0.2.0"])
|
26
|
-
gem.add_dependency('scmd', ["~> 3.0.2"])
|
25
|
+
gem.add_development_dependency("much-style-guide", ["~> 0.6.0"])
|
26
|
+
gem.add_development_dependency("assert", ["~> 2.19.3"])
|
27
27
|
|
28
|
+
gem.add_dependency("activerecord", ["> 5.0", "< 7.0"])
|
29
|
+
gem.add_dependency("activesupport", ["> 5.0", "< 7.0"])
|
30
|
+
gem.add_dependency("much-mixin", ["~> 0.2.4"])
|
31
|
+
gem.add_dependency("scmd", ["~> 3.0.4"])
|
28
32
|
end
|
data/bin/ardb
CHANGED
data/lib/ardb.rb
CHANGED
@@ -1,89 +1,105 @@
|
|
1
|
-
|
2
|
-
require 'logger'
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
|
-
require
|
3
|
+
require "active_record"
|
4
|
+
require "logger"
|
5
5
|
|
6
|
-
|
6
|
+
require "ardb/version"
|
7
7
|
|
8
|
-
|
8
|
+
ENV["ARDB_DB_FILE"] ||= "config/db"
|
9
9
|
|
10
|
+
module Ardb
|
10
11
|
def self.config
|
11
12
|
@config ||= Config.new
|
12
13
|
end
|
13
14
|
|
14
15
|
def self.configure(&block)
|
15
|
-
|
16
|
+
config.tap(&block)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.adapter
|
20
|
+
@adapter || raise(NotInitializedError.new(caller))
|
16
21
|
end
|
17
22
|
|
18
|
-
def self.
|
23
|
+
def self.reset_adapter
|
24
|
+
@adapter = nil
|
25
|
+
end
|
19
26
|
|
20
27
|
def self.init(establish_connection = true)
|
21
|
-
require
|
28
|
+
require "ardb/require_autoloaded_active_record_files"
|
22
29
|
begin
|
23
30
|
require_db_file
|
24
|
-
rescue InvalidDBFileError =>
|
25
|
-
|
31
|
+
rescue InvalidDBFileError => ex
|
32
|
+
ex.set_backtrace(caller)
|
33
|
+
raise ex
|
26
34
|
end
|
27
35
|
|
28
|
-
|
29
|
-
@adapter = Adapter.new(
|
36
|
+
config.validate!
|
37
|
+
@adapter = Adapter.new(config)
|
30
38
|
|
31
39
|
# setup AR
|
32
|
-
ActiveRecord::Base.
|
33
|
-
|
40
|
+
ActiveRecord::Base.default_timezone = config.default_timezone
|
41
|
+
ActiveRecord::Base.logger = config.logger
|
42
|
+
adapter.connect_db if establish_connection
|
34
43
|
end
|
35
44
|
|
36
45
|
def self.escape_like_pattern(pattern, escape_char = nil)
|
37
|
-
|
46
|
+
adapter.escape_like_pattern(pattern, escape_char)
|
47
|
+
rescue NotInitializedError => ex
|
48
|
+
ex.set_backtrace(caller)
|
49
|
+
raise ex
|
38
50
|
end
|
39
51
|
|
40
|
-
private
|
41
|
-
|
42
52
|
# try requiring the db file via the load path or as an absolute path, if
|
43
53
|
# that fails it tries requiring relative to the current working directory
|
44
54
|
def self.require_db_file
|
45
55
|
begin
|
46
|
-
|
56
|
+
begin
|
57
|
+
require ENV["ARDB_DB_FILE"]
|
58
|
+
rescue LoadError
|
59
|
+
require File.expand_path(ENV["ARDB_DB_FILE"], ENV["PWD"])
|
60
|
+
end
|
47
61
|
rescue LoadError
|
48
|
-
|
62
|
+
raise(
|
63
|
+
InvalidDBFileError,
|
64
|
+
"can't require `#{ENV["ARDB_DB_FILE"]}`, check that the ARDB_DB_FILE "\
|
65
|
+
"env var is set to the file path of your db file",
|
66
|
+
)
|
49
67
|
end
|
50
|
-
rescue LoadError
|
51
|
-
raise InvalidDBFileError, "can't require `#{ENV['ARDB_DB_FILE']}`, " \
|
52
|
-
"check that the ARDB_DB_FILE env var is set to " \
|
53
|
-
"the file path of your db file"
|
54
68
|
end
|
55
69
|
|
56
70
|
class Config
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
ACTIVERECORD_ATTRS =
|
72
|
+
[
|
73
|
+
:adapter,
|
74
|
+
:database,
|
75
|
+
:encoding,
|
76
|
+
:host,
|
77
|
+
:port,
|
78
|
+
:username,
|
79
|
+
:password,
|
80
|
+
:pool,
|
81
|
+
:checkout_timeout,
|
82
|
+
:min_messages,
|
83
|
+
].freeze
|
84
|
+
|
85
|
+
DEFAULT_MIGRATIONS_PATH = "db/migrations"
|
86
|
+
DEFAULT_SCHEMA_PATH = "db/schema"
|
87
|
+
RUBY_SCHEMA_FORMAT = :ruby
|
88
|
+
SQL_SCHEMA_FORMAT = :sql
|
74
89
|
VALID_SCHEMA_FORMATS = [RUBY_SCHEMA_FORMAT, SQL_SCHEMA_FORMAT].freeze
|
75
90
|
|
76
|
-
attr_accessor
|
77
|
-
attr_accessor :logger, :root_path
|
91
|
+
attr_accessor(*ACTIVERECORD_ATTRS)
|
92
|
+
attr_accessor :default_timezone, :logger, :root_path
|
78
93
|
attr_reader :schema_format
|
79
94
|
attr_writer :migrations_path, :schema_path
|
80
95
|
|
81
96
|
def initialize
|
82
|
-
@
|
83
|
-
@
|
84
|
-
@
|
85
|
-
@
|
86
|
-
@
|
97
|
+
@default_timezone = :utc
|
98
|
+
@logger = Logger.new(STDOUT)
|
99
|
+
@root_path = ENV["PWD"]
|
100
|
+
@migrations_path = DEFAULT_MIGRATIONS_PATH
|
101
|
+
@schema_path = DEFAULT_SCHEMA_PATH
|
102
|
+
@schema_format = RUBY_SCHEMA_FORMAT
|
87
103
|
end
|
88
104
|
|
89
105
|
def migrations_path
|
@@ -95,88 +111,102 @@ module Ardb
|
|
95
111
|
end
|
96
112
|
|
97
113
|
def schema_format=(new_value)
|
98
|
-
@schema_format =
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
114
|
+
@schema_format =
|
115
|
+
begin
|
116
|
+
new_value.to_sym
|
117
|
+
rescue NoMethodError
|
118
|
+
raise ArgumentError, "schema format must be a `Symbol`", caller
|
119
|
+
end
|
103
120
|
end
|
104
121
|
|
105
122
|
def activerecord_connect_hash
|
106
123
|
ACTIVERECORD_ATTRS.inject({}) do |h, attr_name|
|
107
|
-
value =
|
124
|
+
value = send(attr_name)
|
108
125
|
!value.nil? ? h.merge!(attr_name.to_s => value) : h
|
109
126
|
end
|
110
127
|
end
|
111
128
|
|
112
129
|
def validate!
|
113
|
-
if
|
130
|
+
if adapter.to_s.empty? || database.to_s.empty?
|
114
131
|
raise ConfigurationError, "an adapter and database must be provided"
|
115
|
-
|
132
|
+
end
|
133
|
+
|
134
|
+
unless VALID_SCHEMA_FORMATS.include?(schema_format)
|
116
135
|
raise ConfigurationError, "schema format must be one of: " \
|
117
|
-
"#{VALID_SCHEMA_FORMATS.join(
|
136
|
+
"#{VALID_SCHEMA_FORMATS.join(", ")}"
|
118
137
|
end
|
138
|
+
|
119
139
|
true
|
120
140
|
end
|
121
141
|
|
122
142
|
def ==(other)
|
123
|
-
if other.
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
143
|
+
if other.is_a?(self.class)
|
144
|
+
activerecord_connect_hash == other.activerecord_connect_hash &&
|
145
|
+
default_timezone == other.default_timezone &&
|
146
|
+
logger == other.logger &&
|
147
|
+
root_path == other.root_path &&
|
148
|
+
schema_format == other.schema_format &&
|
149
|
+
migrations_path == other.migrations_path &&
|
150
|
+
schema_path == other.schema_path
|
130
151
|
else
|
131
152
|
super
|
132
153
|
end
|
133
154
|
end
|
134
|
-
|
135
155
|
end
|
136
156
|
|
137
157
|
module Adapter
|
138
|
-
|
139
158
|
VALID_ADAPTERS = [
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
159
|
+
"sqlite",
|
160
|
+
"sqlite3",
|
161
|
+
"postgresql",
|
162
|
+
"postgres",
|
163
|
+
"mysql",
|
164
|
+
"mysql2",
|
146
165
|
].freeze
|
147
166
|
|
148
167
|
def self.new(config)
|
149
|
-
|
168
|
+
unless VALID_ADAPTERS.include?(config.adapter)
|
150
169
|
raise InvalidAdapterError, "invalid adapter: `#{config.adapter}`"
|
151
170
|
end
|
152
|
-
|
171
|
+
send(config.adapter, config)
|
153
172
|
end
|
154
173
|
|
155
174
|
def self.sqlite(config)
|
156
|
-
require
|
175
|
+
require "ardb/adapter/sqlite"
|
157
176
|
Adapter::Sqlite.new(config)
|
158
177
|
end
|
159
178
|
|
160
|
-
def self.sqlite3(config)
|
179
|
+
def self.sqlite3(config)
|
180
|
+
sqlite(config)
|
181
|
+
end
|
161
182
|
|
162
183
|
def self.postgresql(config)
|
163
|
-
require
|
184
|
+
require "ardb/adapter/postgresql"
|
164
185
|
Adapter::Postgresql.new(config)
|
165
186
|
end
|
166
187
|
|
167
|
-
def self.postgres(config)
|
188
|
+
def self.postgres(config)
|
189
|
+
postgresql(config)
|
190
|
+
end
|
168
191
|
|
169
192
|
def self.mysql(config)
|
170
|
-
require
|
193
|
+
require "ardb/adapter/mysql"
|
171
194
|
Adapter::Mysql.new(config)
|
172
195
|
end
|
173
196
|
|
174
|
-
def self.mysql2(config)
|
175
|
-
|
197
|
+
def self.mysql2(config)
|
198
|
+
mysql(config)
|
199
|
+
end
|
176
200
|
end
|
177
201
|
|
178
202
|
InvalidDBFileError = Class.new(ArgumentError)
|
179
203
|
ConfigurationError = Class.new(ArgumentError)
|
180
204
|
InvalidAdapterError = Class.new(RuntimeError)
|
181
205
|
|
206
|
+
class NotInitializedError < RuntimeError
|
207
|
+
def initialize(backtrace)
|
208
|
+
super("ardb hasn't been initialized yet, run `Ardb.init`")
|
209
|
+
set_backtrace(backtrace)
|
210
|
+
end
|
211
|
+
end
|
182
212
|
end
|