sequel_tools 0.1.3 → 0.1.8
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 +5 -5
- data/.gitignore +3 -0
- data/.travis.yml +1 -0
- data/README.md +32 -3
- data/lib/sequel_tools.rb +15 -3
- data/lib/sequel_tools/actions/before_task.rb +17 -0
- data/lib/sequel_tools/actions/connect_db.rb +3 -1
- data/lib/sequel_tools/actions/irb.rb +20 -0
- data/lib/sequel_tools/actions/migrate.rb +2 -1
- data/lib/sequel_tools/actions/new_migration.rb +1 -1
- data/lib/sequel_tools/actions/postgresql_support.rb +14 -0
- data/lib/sequel_tools/actions/schema_load.rb +2 -1
- data/lib/sequel_tools/actions/shell.rb +0 -2
- data/lib/sequel_tools/actions/shell_postgres.rb +0 -3
- data/lib/sequel_tools/actions/status.rb +1 -1
- data/lib/sequel_tools/actions_manager.rb +10 -6
- data/lib/sequel_tools/all_actions.rb +2 -2
- data/lib/sequel_tools/migration_utils.rb +5 -4
- data/lib/sequel_tools/version.rb +1 -1
- data/sequel_tools.gemspec +2 -1
- metadata +6 -5
- data/Gemfile.lock +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 17bb9b0da66eb5b99c648c41d902e56e2cb93348d7a1b50d6ab447bfab0cabe8
|
4
|
+
data.tar.gz: 2c066a0179cd2a67127cca5812cc37abb40b02b63ceef28186376540ec2798fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3f10ee727d2b6ae3b8a3b7c0ead5947817fa6f6b9238d3c7708553534936c303bd09665a45519ff4b6cf0041f64c348b5eb117267d22b24b814cb21c8f33057
|
7
|
+
data.tar.gz: 65493ac56d38975f0857a0db28007fd06036c668a035e7de6e1694902025ea2df77d4b6b3e0f82a18115cf77684cd6451035a3d7c71174296b98ef4987be928a
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -21,6 +21,11 @@ Add this line to your application's Gemfile:
|
|
21
21
|
|
22
22
|
```ruby
|
23
23
|
gem 'sequel_tools'
|
24
|
+
gem 'rake'
|
25
|
+
|
26
|
+
# For PostgreSQL:
|
27
|
+
gem 'pg', platform: :mri
|
28
|
+
gem 'jdbc-postgres', platform: :jruby
|
24
29
|
```
|
25
30
|
|
26
31
|
And then execute:
|
@@ -51,10 +56,13 @@ base_config = SequelTools.base_config(
|
|
51
56
|
dump_schema_on_migrate: false, # it's a good idea to enable it for the reference environment
|
52
57
|
pg_dump: 'pg_dump', # command used to run pg_dump
|
53
58
|
pg_dump: 'psql', # command used to run psql when calling rake db:shell if adapter is postgres
|
54
|
-
|
59
|
+
migrations_location: 'db/migrations',
|
55
60
|
schema_location: 'db/migrations/schema.sql',
|
56
61
|
seeds_location: 'db/seeds.rb',
|
57
|
-
|
62
|
+
# for tasks such as creating the database:
|
63
|
+
# when nil, defaults to the value of the :dbadapter config.
|
64
|
+
# This is the database we should connect to before executing "create database dbname"
|
65
|
+
maintenancedb: :default,
|
58
66
|
)
|
59
67
|
|
60
68
|
namespace 'db' do
|
@@ -71,8 +79,29 @@ Then you are able to run several tasks (`rake -T` will list all supported):
|
|
71
79
|
rake db:create
|
72
80
|
rake db:new_migration[migration_name]
|
73
81
|
rake db:migrate
|
82
|
+
# setup creates the database, loads the latest schema
|
83
|
+
# and import seeds when available
|
74
84
|
rake dbtest:setup
|
75
|
-
|
85
|
+
# reset drops (if existing) then recreate the database, run all migrations
|
86
|
+
# and import seeds when available
|
87
|
+
rake dbtest:reset
|
88
|
+
# shell opens a psql section to the database for the PostgreSQL adapter
|
89
|
+
rake db:shell
|
90
|
+
# irb runs "bundle exec sequel" pointing to the database and stores the connection in "DB"
|
91
|
+
rake db:irb
|
92
|
+
rake db:rollback
|
93
|
+
rake db:status
|
94
|
+
# version displays latest applied migration
|
95
|
+
rake db:version
|
96
|
+
rake db:seed
|
97
|
+
rake db:redo[migration_filename]
|
98
|
+
rake db:down[migration_filename]
|
99
|
+
rake db:up[migration_filename]
|
100
|
+
# schema_dump is called automatically after migrate/rollback/up/down/redo
|
101
|
+
# if passing { dump_schema_on_migrate: true } to the config
|
102
|
+
rake db:schema_dump
|
103
|
+
# database must be empty before calling db:schema_load
|
104
|
+
rake db:schema_load
|
76
105
|
|
77
106
|
You may define your own command to open a shell to your database upon the 'db:shell' task.
|
78
107
|
PostgreSQL is supported out-of-the-box, but if it wasn't, here's a sample script that would
|
data/lib/sequel_tools.rb
CHANGED
@@ -7,8 +7,8 @@ module SequelTools
|
|
7
7
|
project_root: nil,
|
8
8
|
pg_dump: 'pg_dump', # command used to run pg_dump
|
9
9
|
psql: 'psql', # command used to run psql
|
10
|
-
maintenancedb:
|
11
|
-
|
10
|
+
maintenancedb: :default, # DB to connect to for creating/dropping databases
|
11
|
+
migrations_location: 'db/migrations',
|
12
12
|
schema_location: 'db/migrations/schema.sql',
|
13
13
|
seeds_location: 'db/seeds.rb',
|
14
14
|
dbname: nil,
|
@@ -20,6 +20,7 @@ module SequelTools
|
|
20
20
|
dump_schema_on_migrate: false,
|
21
21
|
log_level: nil,
|
22
22
|
sql_log_level: :debug,
|
23
|
+
migrations_table: nil,
|
23
24
|
} # unfrozen on purpose so that one might want to update the defaults
|
24
25
|
|
25
26
|
REQUIRED_KEYS = [ :project_root, :dbadapter, :dbname, :username ]
|
@@ -29,7 +30,7 @@ module SequelTools
|
|
29
30
|
REQUIRED_KEYS.each do |key|
|
30
31
|
raise MissingConfigError, "Expected value for #{key} config is missing" if config[key].nil?
|
31
32
|
end
|
32
|
-
[:
|
33
|
+
[:migrations_location, :schema_location, :seeds_location].each do |k|
|
33
34
|
config[k] = File.expand_path config[k], config[:project_root]
|
34
35
|
end
|
35
36
|
config
|
@@ -42,4 +43,15 @@ module SequelTools
|
|
42
43
|
actions_manager.load_all
|
43
44
|
actions_manager.export_as_rake_tasks rake_context
|
44
45
|
end
|
46
|
+
|
47
|
+
def self.suppress_java_output
|
48
|
+
return yield unless RUBY_PLATFORM == 'java'
|
49
|
+
require 'java'
|
50
|
+
require 'stringio'
|
51
|
+
old_err = java.lang.System.err
|
52
|
+
java.lang.System.err = java.io.PrintStream.new(StringIO.new.to_outputstream)
|
53
|
+
yield
|
54
|
+
ensure
|
55
|
+
java.lang.System.err = old_err if RUBY_PLATFORM == 'java'
|
56
|
+
end
|
45
57
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
require_relative '../actions_manager'
|
4
|
+
|
5
|
+
SequelTools::ActionsManager::Action.register :before_task, nil do |args, context|
|
6
|
+
config = context[:config]
|
7
|
+
adapter = config[:dbadapter]
|
8
|
+
action = context[:current_action]
|
9
|
+
hooks = [:before_any, :"before_#{action.name}", :"before_any_#{adapter}",
|
10
|
+
:"before_#{action.name}_#{adapter}"]
|
11
|
+
hooks.each do |h|
|
12
|
+
next unless a = SequelTools::ActionsManager::Action[h]
|
13
|
+
a.run args, context
|
14
|
+
context[:"#{h}_processed"] = true
|
15
|
+
end
|
16
|
+
config[:maintenancedb] = adapter if context[:maintenancedb] == :default
|
17
|
+
end
|
@@ -7,7 +7,9 @@ require_relative '../sequel_tools_logger'
|
|
7
7
|
SequelTools::ActionsManager::Action.register :connect_db, nil do |args, context|
|
8
8
|
next if context[:db]
|
9
9
|
config = context[:config]
|
10
|
-
context[:db] = db =
|
10
|
+
context[:db] = db = SequelTools.suppress_java_output do
|
11
|
+
Sequel.connect context[:uri_builder].call(config), test: true
|
12
|
+
end
|
11
13
|
db.sql_log_level = config[:sql_log_level]
|
12
14
|
db.log_connection_info = false
|
13
15
|
next unless log_level = config[:log_level]
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
require_relative '../actions_manager'
|
4
|
+
|
5
|
+
class SequelTools::ActionsManager
|
6
|
+
description = "Opens an IRB session started as 'sequel uri_to_database' (DB is available to irb)"
|
7
|
+
Action.register :irb, description do |args, context|
|
8
|
+
# This code does the job, but for some reason the test will timeout under JRuby
|
9
|
+
#config = context[:config]
|
10
|
+
#uri = context[:uri_builder][config]
|
11
|
+
#exec "bundle exec sequel #{uri}"
|
12
|
+
|
13
|
+
Action[:connect_db].run({}, context)
|
14
|
+
require 'irb'
|
15
|
+
::DB = context[:db]
|
16
|
+
ARGV.clear
|
17
|
+
puts 'Your database is stored in DB...'
|
18
|
+
IRB.start
|
19
|
+
end
|
20
|
+
end
|
@@ -12,7 +12,8 @@ class SequelTools::ActionsManager
|
|
12
12
|
Sequel.extension :migration unless Sequel.respond_to? :migration
|
13
13
|
options = {}
|
14
14
|
options[:target] = args[:version].to_i if args[:version]
|
15
|
-
|
15
|
+
options[:table] = config[:migrations_table] if config[:migrations_table]
|
16
|
+
Sequel::Migrator.run db, config[:migrations_location], options
|
16
17
|
Action[:schema_dump].run({}, context) if config[:dump_schema_on_migrate]
|
17
18
|
end
|
18
19
|
end
|
@@ -7,7 +7,7 @@ class SequelTools::ActionsManager
|
|
7
7
|
Action.register :new_migration, desc, arg_names: [ :name ] do |args, context|
|
8
8
|
(puts 'Migration name is missing - aborting'; exit 1) unless name = args[:name]
|
9
9
|
require 'time'
|
10
|
-
migrations_path = context[:config][:
|
10
|
+
migrations_path = context[:config][:migrations_location]
|
11
11
|
filename = "#{migrations_path}/#{Time.now.strftime '%Y%m%d%H%M%S'}_#{name}.rb"
|
12
12
|
File.write filename, <<~MIGRATIONS_TEMPLATE_END
|
13
13
|
# documentation available at http://sequel.jeremyevans.net/rdoc/files/doc/migration_rdoc.html
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
require_relative '../actions_manager'
|
4
|
+
require_relative 'schema_dump_postgres'
|
5
|
+
require_relative 'shell_postgres'
|
6
|
+
|
7
|
+
class SequelTools::ActionsManager
|
8
|
+
Action.register :before_any_postgres, nil do |args, context|
|
9
|
+
next if context[:before_any_postgres_processed]
|
10
|
+
config = context[:config]
|
11
|
+
config[:maintenancedb] = 'postgres' if config[:maintenancedb] == :default
|
12
|
+
config[:jdbc_adapter] = 'postgresql' if RUBY_PLATFORM == 'java'
|
13
|
+
end
|
14
|
+
end
|
@@ -16,7 +16,8 @@ class SequelTools::ActionsManager
|
|
16
16
|
puts "Schema file '#{schema_location}' does not exist. Aborting."
|
17
17
|
exit 1
|
18
18
|
end
|
19
|
-
context[:db]
|
19
|
+
context[:db].run File.read(schema_location)
|
20
|
+
context[:db].disconnect # forces reconnection
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
@@ -3,8 +3,6 @@
|
|
3
3
|
require_relative '../actions_manager'
|
4
4
|
|
5
5
|
class SequelTools::ActionsManager
|
6
|
-
# TODO: this action is not currently tested automatically as it's not critical and not
|
7
|
-
# trivial to write a test for
|
8
6
|
Action.register :shell, 'Open an interactive shell to the database' do |args, context|
|
9
7
|
begin
|
10
8
|
Action[:connect_db].run({}, context)
|
@@ -1,11 +1,8 @@
|
|
1
1
|
# frozen-string-literal: true
|
2
2
|
|
3
3
|
require_relative '../actions_manager'
|
4
|
-
require_relative '../pg_helper'
|
5
4
|
|
6
5
|
class SequelTools::ActionsManager
|
7
|
-
# TODO: this action is not currently tested automatically as it's not critical and not
|
8
|
-
# trivial to write a test for
|
9
6
|
Action.register :shell_postgres, nil do |args, context|
|
10
7
|
c = context[:config]
|
11
8
|
psql = c[:psql]
|
@@ -8,7 +8,7 @@ class SequelTools::ActionsManager
|
|
8
8
|
description = 'Show migrations status (applied and missing in migrations path vs unapplied)'
|
9
9
|
Action.register :status, description do |args, context|
|
10
10
|
unapplied, files_missing = MigrationUtils.migrations_differences context
|
11
|
-
path = context[:config][:
|
11
|
+
path = context[:config][:migrations_location]
|
12
12
|
unless files_missing.empty?
|
13
13
|
puts "The following migrations were applied to the database but can't be found in #{path}:"
|
14
14
|
puts files_missing.map{|fn| " - #{fn}" }.join("\n")
|
@@ -6,15 +6,16 @@ module SequelTools
|
|
6
6
|
|
7
7
|
URI_BUILDER = ->(config, dbname = config[:dbname]) do
|
8
8
|
c = config
|
9
|
-
uri_parts = [
|
10
|
-
if
|
11
|
-
|
12
|
-
uri_parts << ':' << c[:password] if c[:password]
|
13
|
-
uri_parts << '@'
|
14
|
-
end
|
9
|
+
uri_parts = []
|
10
|
+
uri_parts << 'jdbc:' if RUBY_PLATFORM == 'java'
|
11
|
+
uri_parts << "#{c[:jdbc_adapter] || c[:dbadapter]}://"
|
15
12
|
uri_parts << c[:dbhost]
|
16
13
|
uri_parts << ':' << c[:dbport] if c[:dbport]
|
17
14
|
uri_parts << '/' << dbname
|
15
|
+
if user = c[:username]
|
16
|
+
uri_parts << '?user=' << user
|
17
|
+
uri_parts << '&password=' << c[:password] if c[:password]
|
18
|
+
end
|
18
19
|
uri_parts.join('')
|
19
20
|
end
|
20
21
|
|
@@ -33,6 +34,9 @@ module SequelTools
|
|
33
34
|
rake_context.instance_eval do
|
34
35
|
desc action.description unless action.description.nil?
|
35
36
|
task action.name, action.arg_names do |t, args|
|
37
|
+
require_relative 'actions/before_task'
|
38
|
+
ctx[:current_action] = action
|
39
|
+
Action[:before_task].run args, ctx
|
36
40
|
action.run args, ctx
|
37
41
|
end
|
38
42
|
end
|
@@ -3,7 +3,6 @@
|
|
3
3
|
require_relative 'actions/connect_db'
|
4
4
|
require_relative 'actions/create_db'
|
5
5
|
require_relative 'actions/drop_db'
|
6
|
-
require_relative 'actions/schema_dump_postgres'
|
7
6
|
require_relative 'actions/schema_dump'
|
8
7
|
require_relative 'actions/schema_load'
|
9
8
|
require_relative 'actions/new_migration'
|
@@ -17,5 +16,6 @@ require_relative 'actions/redo'
|
|
17
16
|
require_relative 'actions/version'
|
18
17
|
require_relative 'actions/rollback'
|
19
18
|
require_relative 'actions/status'
|
20
|
-
require_relative 'actions/shell_postgres'
|
21
19
|
require_relative 'actions/shell'
|
20
|
+
require_relative 'actions/irb'
|
21
|
+
require_relative 'actions/postgresql_support'
|
@@ -22,8 +22,9 @@ class MigrationUtils
|
|
22
22
|
options = { allow_missing_migration_files: true }
|
23
23
|
options[:target] = 0 if direction == :down
|
24
24
|
config = context[:config]
|
25
|
-
|
26
|
-
|
25
|
+
options[:table] = config[:migrations_table] if config[:migrations_table]
|
26
|
+
Sequel::Migrator.migrator_class(config[:migrations_location]).
|
27
|
+
new(context[:db], config[:migrations_location], options)
|
27
28
|
end
|
28
29
|
|
29
30
|
def self.current_version(context)
|
@@ -32,7 +33,7 @@ class MigrationUtils
|
|
32
33
|
end
|
33
34
|
|
34
35
|
def self.last_found_migration(context)
|
35
|
-
migrations_path = context[:config][:
|
36
|
+
migrations_path = context[:config][:migrations_location]
|
36
37
|
migrator = find_migrator(context)
|
37
38
|
migrator.ds.order(Sequel.desc(migrator.column)).select_map(migrator.column).find do |fn|
|
38
39
|
File.exist?("#{migrations_path}/#{fn}")
|
@@ -41,7 +42,7 @@ class MigrationUtils
|
|
41
42
|
|
42
43
|
def self.migrations_differences(context)
|
43
44
|
config = context[:config]
|
44
|
-
migrations_path = config[:
|
45
|
+
migrations_path = config[:migrations_location]
|
45
46
|
existing = Dir["#{migrations_path}/*.rb"].map{|fn| File.basename fn }.sort
|
46
47
|
migrator = find_migrator context
|
47
48
|
migrated = migrator.ds.select_order_map(migrator.column)
|
data/lib/sequel_tools/version.rb
CHANGED
data/sequel_tools.gemspec
CHANGED
@@ -32,7 +32,8 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.require_paths = ['lib']
|
33
33
|
|
34
34
|
spec.add_runtime_dependency 'sequel'
|
35
|
-
spec.add_development_dependency 'pg'
|
35
|
+
spec.add_development_dependency 'pg' unless RUBY_PLATFORM == 'java'
|
36
|
+
spec.add_development_dependency 'jdbc-postgres' if RUBY_PLATFORM == 'java'
|
36
37
|
spec.add_development_dependency 'bundler'
|
37
38
|
spec.add_development_dependency 'rake'
|
38
39
|
spec.add_development_dependency 'rspec'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo Rosenfeld Rosas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -99,19 +99,21 @@ files:
|
|
99
99
|
- ".rspec"
|
100
100
|
- ".travis.yml"
|
101
101
|
- Gemfile
|
102
|
-
- Gemfile.lock
|
103
102
|
- LICENSE.txt
|
104
103
|
- README.md
|
105
104
|
- Rakefile
|
106
105
|
- bin/console
|
107
106
|
- bin/setup
|
108
107
|
- lib/sequel_tools.rb
|
108
|
+
- lib/sequel_tools/actions/before_task.rb
|
109
109
|
- lib/sequel_tools/actions/connect_db.rb
|
110
110
|
- lib/sequel_tools/actions/create_db.rb
|
111
111
|
- lib/sequel_tools/actions/down.rb
|
112
112
|
- lib/sequel_tools/actions/drop_db.rb
|
113
|
+
- lib/sequel_tools/actions/irb.rb
|
113
114
|
- lib/sequel_tools/actions/migrate.rb
|
114
115
|
- lib/sequel_tools/actions/new_migration.rb
|
116
|
+
- lib/sequel_tools/actions/postgresql_support.rb
|
115
117
|
- lib/sequel_tools/actions/redo.rb
|
116
118
|
- lib/sequel_tools/actions/reset.rb
|
117
119
|
- lib/sequel_tools/actions/rollback.rb
|
@@ -152,8 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
154
|
- !ruby/object:Gem::Version
|
153
155
|
version: '0'
|
154
156
|
requirements: []
|
155
|
-
|
156
|
-
rubygems_version: 2.6.13
|
157
|
+
rubygems_version: 3.2.3
|
157
158
|
signing_key:
|
158
159
|
specification_version: 4
|
159
160
|
summary: Add Rake tasks to manage Sequel migrations
|
data/Gemfile.lock
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
sequel_tools (0.1.3)
|
5
|
-
sequel
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
diff-lcs (1.3)
|
11
|
-
pg (0.21.0)
|
12
|
-
rake (12.3.0)
|
13
|
-
rspec (3.7.0)
|
14
|
-
rspec-core (~> 3.7.0)
|
15
|
-
rspec-expectations (~> 3.7.0)
|
16
|
-
rspec-mocks (~> 3.7.0)
|
17
|
-
rspec-core (3.7.0)
|
18
|
-
rspec-support (~> 3.7.0)
|
19
|
-
rspec-expectations (3.7.0)
|
20
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
21
|
-
rspec-support (~> 3.7.0)
|
22
|
-
rspec-mocks (3.7.0)
|
23
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
24
|
-
rspec-support (~> 3.7.0)
|
25
|
-
rspec-support (3.7.0)
|
26
|
-
sequel (5.3.0)
|
27
|
-
|
28
|
-
PLATFORMS
|
29
|
-
ruby
|
30
|
-
|
31
|
-
DEPENDENCIES
|
32
|
-
bundler
|
33
|
-
pg
|
34
|
-
rake
|
35
|
-
rspec
|
36
|
-
sequel_tools!
|
37
|
-
|
38
|
-
BUNDLED WITH
|
39
|
-
1.16.0
|