ardb 0.28.1 → 0.29.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|