pgtk 0.29.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.
- checksums.yaml +4 -4
- data/Gemfile +3 -1
- data/Gemfile.lock +27 -17
- data/LICENSE.txt +1 -1
- data/LICENSES/MIT.txt +1 -1
- data/README.md +0 -1
- data/Rakefile +14 -2
- data/cucumber.yml +1 -1
- data/lib/pgtk/impatient.rb +2 -2
- data/lib/pgtk/liquibase_task.rb +51 -36
- data/lib/pgtk/liquicheck_task.rb +5 -3
- data/lib/pgtk/pgsql_task.rb +41 -42
- data/lib/pgtk/pool.rb +2 -2
- data/lib/pgtk/retry.rb +2 -2
- data/lib/pgtk/spy.rb +2 -2
- data/lib/pgtk/stash.rb +2 -2
- data/lib/pgtk/version.rb +3 -3
- data/lib/pgtk/wire.rb +5 -5
- data/lib/pgtk.rb +2 -2
- data/pgtk.gemspec +2 -1
- data/resources/pom.xml +2 -2
- data/test-resources/2019/01-test.xml +1 -1
- data/test-resources/master.xml +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cbdc13b881e0f4d821ef1472fa129962cc30d3662ee912efa8f1b8b33b564074
|
|
4
|
+
data.tar.gz: a7fa85d5ae31e7e03cce4852436396a6082a4454c4d7f70557b8f25cd6a0dc61
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5b9e7911574caa29d8377b290b59ff15f5f522d019382da39f0c2501bf7fbdfa7397667af94415f0c3937c7eb441d68f62a4a2661fc79573527f01438438c51d
|
|
7
|
+
data.tar.gz: 1da06567aaf82aaab703f23753cd1bb3b548ae01ddebc560c60674345d494f2196e8060017ee237cb69a858f817baf1ae0daf1dd4964839c0dbb5f7465da409a
|
data/Gemfile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
source 'https://rubygems.org'
|
|
@@ -10,6 +10,8 @@ gem 'minitest', '~>6.0', require: false
|
|
|
10
10
|
gem 'minitest-mock', '~>5.27', require: false
|
|
11
11
|
gem 'minitest-reporters', '~>1.7', require: false
|
|
12
12
|
gem 'minitest-stub-const', '~>0.6', require: false
|
|
13
|
+
gem 'os', '~>1.1', require: false
|
|
14
|
+
gem 'qbash', '~>0.0', require: false
|
|
13
15
|
gem 'rack', '~>3.1', require: false
|
|
14
16
|
gem 'rake', '~>13.2', require: false
|
|
15
17
|
gem 'rubocop', '~>1.73', require: false
|
data/Gemfile.lock
CHANGED
|
@@ -4,6 +4,7 @@ PATH
|
|
|
4
4
|
pgtk (0.0.0)
|
|
5
5
|
backtrace (~> 0.4)
|
|
6
6
|
concurrent-ruby (~> 1.3)
|
|
7
|
+
donce (~> 0.0)
|
|
7
8
|
joined (~> 0.3)
|
|
8
9
|
logger (~> 1.7)
|
|
9
10
|
loog (~> 0.6)
|
|
@@ -23,17 +24,23 @@ GEM
|
|
|
23
24
|
concurrent-ruby (1.3.6)
|
|
24
25
|
differ (0.1.2)
|
|
25
26
|
docile (1.4.1)
|
|
26
|
-
|
|
27
|
+
donce (0.6.0)
|
|
28
|
+
backtrace (~> 0.3)
|
|
29
|
+
os (~> 1.1)
|
|
30
|
+
qbash (~> 0.3)
|
|
31
|
+
elapsed (0.2.2)
|
|
27
32
|
loog (~> 0.6)
|
|
28
33
|
tago (~> 0.1)
|
|
34
|
+
ellipsized (0.3.0)
|
|
29
35
|
joined (0.4.0)
|
|
30
36
|
json (2.18.0)
|
|
31
37
|
language_server-protocol (3.17.0.5)
|
|
32
38
|
lint_roller (1.1.0)
|
|
33
39
|
logger (1.7.0)
|
|
34
|
-
loog (0.
|
|
40
|
+
loog (0.7.2)
|
|
41
|
+
ellipsized
|
|
35
42
|
logger (~> 1.0)
|
|
36
|
-
minitest (6.0.
|
|
43
|
+
minitest (6.0.1)
|
|
37
44
|
prism (~> 1.5)
|
|
38
45
|
minitest-mock (5.27.0)
|
|
39
46
|
minitest-reporters (1.7.1)
|
|
@@ -42,21 +49,22 @@ GEM
|
|
|
42
49
|
minitest (>= 5.0)
|
|
43
50
|
ruby-progressbar
|
|
44
51
|
minitest-stub-const (0.6)
|
|
45
|
-
nokogiri (1.
|
|
52
|
+
nokogiri (1.19.0-arm64-darwin)
|
|
46
53
|
racc (~> 1.4)
|
|
47
|
-
nokogiri (1.
|
|
54
|
+
nokogiri (1.19.0-x64-mingw-ucrt)
|
|
48
55
|
racc (~> 1.4)
|
|
49
|
-
nokogiri (1.
|
|
56
|
+
nokogiri (1.19.0-x86_64-linux-gnu)
|
|
50
57
|
racc (~> 1.4)
|
|
58
|
+
os (1.1.4)
|
|
51
59
|
parallel (1.27.0)
|
|
52
|
-
parser (3.3.10.
|
|
60
|
+
parser (3.3.10.1)
|
|
53
61
|
ast (~> 2.4.1)
|
|
54
62
|
racc
|
|
55
|
-
pg (1.6.
|
|
56
|
-
pg (1.6.
|
|
57
|
-
pg (1.6.
|
|
58
|
-
prism (1.
|
|
59
|
-
qbash (0.
|
|
63
|
+
pg (1.6.3-arm64-darwin)
|
|
64
|
+
pg (1.6.3-x64-mingw-ucrt)
|
|
65
|
+
pg (1.6.3-x86_64-linux)
|
|
66
|
+
prism (1.8.0)
|
|
67
|
+
qbash (0.7.1)
|
|
60
68
|
backtrace (> 0)
|
|
61
69
|
elapsed (> 0)
|
|
62
70
|
loog (> 0)
|
|
@@ -69,7 +77,7 @@ GEM
|
|
|
69
77
|
tago (~> 0.0)
|
|
70
78
|
regexp_parser (2.11.3)
|
|
71
79
|
rexml (3.4.4)
|
|
72
|
-
rubocop (1.
|
|
80
|
+
rubocop (1.84.0)
|
|
73
81
|
json (~> 2.3)
|
|
74
82
|
language_server-protocol (~> 3.17.0.2)
|
|
75
83
|
lint_roller (~> 1.1.0)
|
|
@@ -77,12 +85,12 @@ GEM
|
|
|
77
85
|
parser (>= 3.3.0.2)
|
|
78
86
|
rainbow (>= 2.2.2, < 4.0)
|
|
79
87
|
regexp_parser (>= 2.9.3, < 3.0)
|
|
80
|
-
rubocop-ast (>= 1.
|
|
88
|
+
rubocop-ast (>= 1.49.0, < 2.0)
|
|
81
89
|
ruby-progressbar (~> 1.7)
|
|
82
90
|
unicode-display_width (>= 2.4.0, < 4.0)
|
|
83
|
-
rubocop-ast (1.
|
|
91
|
+
rubocop-ast (1.49.0)
|
|
84
92
|
parser (>= 3.3.7.2)
|
|
85
|
-
prism (~> 1.
|
|
93
|
+
prism (~> 1.7)
|
|
86
94
|
rubocop-minitest (0.38.2)
|
|
87
95
|
lint_roller (~> 1.1)
|
|
88
96
|
rubocop (>= 1.75.0, < 2.0)
|
|
@@ -105,7 +113,7 @@ GEM
|
|
|
105
113
|
simplecov-html (0.13.2)
|
|
106
114
|
simplecov_json_formatter (0.1.4)
|
|
107
115
|
slop (4.10.1)
|
|
108
|
-
tago (0.
|
|
116
|
+
tago (0.7.0)
|
|
109
117
|
threads (0.5.0)
|
|
110
118
|
backtrace (~> 0)
|
|
111
119
|
concurrent-ruby (~> 1.0)
|
|
@@ -133,7 +141,9 @@ DEPENDENCIES
|
|
|
133
141
|
minitest-mock (~> 5.27)
|
|
134
142
|
minitest-reporters (~> 1.7)
|
|
135
143
|
minitest-stub-const (~> 0.6)
|
|
144
|
+
os (~> 1.1)
|
|
136
145
|
pgtk!
|
|
146
|
+
qbash (~> 0.0)
|
|
137
147
|
rack (~> 3.1)
|
|
138
148
|
rake (~> 13.2)
|
|
139
149
|
rubocop (~> 1.73)
|
data/LICENSE.txt
CHANGED
data/LICENSES/MIT.txt
CHANGED
data/README.md
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
[](https://github.com/yegor256/pgtk/actions/workflows/rake.yml)
|
|
8
8
|
[](https://www.0pdd.com/p?name=yegor256/pgtk)
|
|
9
9
|
[](https://badge.fury.io/rb/pgtk)
|
|
10
|
-
[](https://codeclimate.com/github/yegor256/pgtk/maintainability)
|
|
11
10
|
[](https://github.com/yegor256/pgtk/blob/master/LICENSE.txt)
|
|
12
11
|
[](https://codecov.io/github/yegor256/pgtk?branch=master)
|
|
13
12
|
[](https://hitsofcode.com/view/github/yegor256/pgtk)
|
data/Rakefile
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
|
+
require 'os'
|
|
7
|
+
require 'qbash'
|
|
6
8
|
require 'rubygems'
|
|
7
9
|
require 'rake'
|
|
8
10
|
require 'rake/clean'
|
|
@@ -15,7 +17,7 @@ def version
|
|
|
15
17
|
Gem::Specification.load(Dir['*.gemspec'].first).version
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
task default: %i[clean test rubocop xcop yard]
|
|
20
|
+
task default: %i[clean test picks rubocop xcop yard]
|
|
19
21
|
|
|
20
22
|
require 'rake/testtask'
|
|
21
23
|
desc 'Run all unit tests'
|
|
@@ -26,6 +28,16 @@ Rake::TestTask.new(:test) do |test|
|
|
|
26
28
|
test.verbose = false
|
|
27
29
|
end
|
|
28
30
|
|
|
31
|
+
desc 'Run them via Ruby, one by one'
|
|
32
|
+
task :picks do
|
|
33
|
+
next if OS.windows?
|
|
34
|
+
%w[lib].each do |d|
|
|
35
|
+
Dir["#{d}/**/*.rb"].each do |f|
|
|
36
|
+
qbash("bundle exec ruby #{Shellwords.escape(f)}", stdout: $stdout, env: { 'PICKS' => 'yes' })
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
29
41
|
require 'yard'
|
|
30
42
|
desc 'Build Yard documentation'
|
|
31
43
|
YARD::Rake::YardocTask.new do |t|
|
data/cucumber.yml
CHANGED
data/lib/pgtk/impatient.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
require 'securerandom'
|
|
@@ -51,7 +51,7 @@ require_relative '../pgtk'
|
|
|
51
51
|
# spy.exec('SELECT * FROM users')
|
|
52
52
|
#
|
|
53
53
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
54
|
-
# Copyright:: Copyright (c) 2019-
|
|
54
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
55
55
|
# License:: MIT
|
|
56
56
|
class Pgtk::Impatient
|
|
57
57
|
# If timed out
|
data/lib/pgtk/liquibase_task.rb
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
|
+
require 'donce'
|
|
6
7
|
require 'English'
|
|
8
|
+
require 'loog'
|
|
9
|
+
require 'os'
|
|
7
10
|
require 'qbash'
|
|
8
11
|
require 'rake'
|
|
9
12
|
require 'rake/tasklib'
|
|
@@ -13,7 +16,7 @@ require_relative '../pgtk'
|
|
|
13
16
|
|
|
14
17
|
# Liquibase rake task.
|
|
15
18
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
16
|
-
# Copyright:: Copyright (c) 2019-
|
|
19
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
17
20
|
# License:: MIT
|
|
18
21
|
class Pgtk::LiquibaseTask < Rake::TaskLib
|
|
19
22
|
# Task name
|
|
@@ -48,12 +51,17 @@ class Pgtk::LiquibaseTask < Rake::TaskLib
|
|
|
48
51
|
# @return [String]
|
|
49
52
|
attr_accessor :contexts
|
|
50
53
|
|
|
54
|
+
# Use docker (set to either :never, :always, or :maybe)
|
|
55
|
+
# @return [Symbol]
|
|
56
|
+
attr_accessor :docker
|
|
57
|
+
|
|
51
58
|
# Initialize a new Liquibase task.
|
|
52
59
|
#
|
|
53
60
|
# @param [Array] args Task arguments
|
|
54
61
|
# @yield [Pgtk::LiquibaseTask, Object] Yields self and task arguments
|
|
55
62
|
def initialize(*args, &task_block)
|
|
56
63
|
super()
|
|
64
|
+
@docker ||= :maybe
|
|
57
65
|
@name = args.shift || :liquibase
|
|
58
66
|
@quiet = false
|
|
59
67
|
@contexts = ''
|
|
@@ -99,47 +107,54 @@ class Pgtk::LiquibaseTask < Rake::TaskLib
|
|
|
99
107
|
raise "The 'password' is not set in the config (YAML)" if password.nil?
|
|
100
108
|
Dir.chdir(File.dirname(@master)) do
|
|
101
109
|
qbash(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
110
|
+
'mvn', 'verify',
|
|
111
|
+
'--errors',
|
|
112
|
+
'--batch-mode',
|
|
113
|
+
'--fail-fast',
|
|
114
|
+
@quiet ? '--quiet' : '--debug',
|
|
115
|
+
'--file',
|
|
116
|
+
Shellwords.escape(pom),
|
|
117
|
+
'--define',
|
|
118
|
+
"liquibase.version=#{@liquibase_version}",
|
|
119
|
+
'--define',
|
|
120
|
+
"postgresql.version=#{@postgresql_version}",
|
|
121
|
+
'--define',
|
|
122
|
+
Shellwords.escape("liquibase.searchPath=#{File.dirname(@master)}"),
|
|
123
|
+
'--define',
|
|
124
|
+
Shellwords.escape("liquibase.changeLogFile=#{old ? @master : File.basename(@master)}"),
|
|
125
|
+
'--define',
|
|
126
|
+
Shellwords.escape("liquibase.url=#{url}"),
|
|
127
|
+
'--define',
|
|
128
|
+
Shellwords.escape("liquibase.password=#{password}"),
|
|
129
|
+
'--define',
|
|
130
|
+
Shellwords.escape("liquibase.contexts=#{@contexts}"),
|
|
131
|
+
stdout: @quiet ? Loog::NULL : Loog::REGULAR,
|
|
132
|
+
stderr: Loog::REGULAR
|
|
125
133
|
)
|
|
126
134
|
end
|
|
127
135
|
return unless @schema
|
|
136
|
+
raise 'Cannot generate schema without docker' if @docker == :never
|
|
128
137
|
@schema = File.expand_path(@schema)
|
|
138
|
+
host = yml.dig('pgsql', 'host')
|
|
139
|
+
host = donce_host if OS.mac? && ['localhost', '127.0.0.1'].include?(host)
|
|
129
140
|
Dir.chdir(File.dirname(@schema)) do
|
|
130
|
-
|
|
131
|
-
|
|
141
|
+
out = donce(
|
|
142
|
+
image: 'postgres:18.1',
|
|
143
|
+
args: OS.mac? ? '' : '--network=host',
|
|
144
|
+
env: { 'PGPASSWORD' => password },
|
|
145
|
+
command: [
|
|
132
146
|
'pg_dump',
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
'-n public',
|
|
138
|
-
'--schema-only'
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
147
|
+
'-h', host,
|
|
148
|
+
'-p', yml.dig('pgsql', 'port').to_s,
|
|
149
|
+
'-U', yml.dig('pgsql', 'user'),
|
|
150
|
+
'-d', yml.dig('pgsql', 'dbname'),
|
|
151
|
+
'-n', 'public',
|
|
152
|
+
'--schema-only'
|
|
153
|
+
].shelljoin,
|
|
154
|
+
stdout: @quiet ? Loog::NULL : Loog::REGULAR,
|
|
155
|
+
stderr: Loog::REGULAR
|
|
142
156
|
)
|
|
157
|
+
File.write(@schema, out)
|
|
143
158
|
end
|
|
144
159
|
end
|
|
145
160
|
end
|
data/lib/pgtk/liquicheck_task.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
require 'nokogiri'
|
|
@@ -9,7 +9,7 @@ require_relative '../pgtk'
|
|
|
9
9
|
|
|
10
10
|
# Liquicheck rake task for check Liquibase XML files.
|
|
11
11
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
12
|
-
# Copyright:: Copyright (c) 2019-
|
|
12
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
13
13
|
# License:: MIT
|
|
14
14
|
class Pgtk::LiquicheckTask < Rake::TaskLib
|
|
15
15
|
# Task name
|
|
@@ -113,6 +113,8 @@ class Pgtk::LiquicheckTask < Rake::TaskLib
|
|
|
113
113
|
(raise MustError, msg) unless prop.match?(regex)
|
|
114
114
|
end
|
|
115
115
|
|
|
116
|
-
MustError
|
|
116
|
+
class MustError < StandardError
|
|
117
|
+
# empty by design
|
|
118
|
+
end
|
|
117
119
|
private_constant :MustError
|
|
118
120
|
end
|
data/lib/pgtk/pgsql_task.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
require 'cgi'
|
|
@@ -18,7 +18,7 @@ require_relative '../pgtk'
|
|
|
18
18
|
|
|
19
19
|
# Pgsql rake task.
|
|
20
20
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
21
|
-
# Copyright:: Copyright (c) 2019-
|
|
21
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
22
22
|
# License:: MIT
|
|
23
23
|
class Pgtk::PgsqlTask < Rake::TaskLib
|
|
24
24
|
# Task name
|
|
@@ -61,9 +61,9 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
61
61
|
# @return [Hash]
|
|
62
62
|
attr_accessor :config
|
|
63
63
|
|
|
64
|
-
# Use
|
|
65
|
-
# @return [
|
|
66
|
-
attr_accessor :
|
|
64
|
+
# Use docker (set to either :never, :always, or :maybe)
|
|
65
|
+
# @return [Symbol]
|
|
66
|
+
attr_accessor :docker
|
|
67
67
|
|
|
68
68
|
# Initialize a new PostgreSQL server task.
|
|
69
69
|
#
|
|
@@ -71,6 +71,7 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
71
71
|
# @yield [Pgtk::PgsqlTask, Object] Yields self and task arguments
|
|
72
72
|
def initialize(*args, &task_block)
|
|
73
73
|
super()
|
|
74
|
+
@docker ||= :maybe
|
|
74
75
|
@name = args.shift || :pgsql
|
|
75
76
|
@fresh_start = false
|
|
76
77
|
@quiet = false
|
|
@@ -99,7 +100,7 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
99
100
|
raise \
|
|
100
101
|
"Failed to find either PostgreSQL or Docker:\n#{pg_out.first}\n#{docker_out.first}"
|
|
101
102
|
end
|
|
102
|
-
raise 'You cannot force Docker to run, because it is not installed locally' if @
|
|
103
|
+
raise 'You cannot force Docker to run, because it is not installed locally' if @docker == :always && !docker
|
|
103
104
|
raise "Option 'dir' is mandatory" unless @dir
|
|
104
105
|
raise "Option 'yaml' is mandatory" unless @yaml
|
|
105
106
|
home = File.expand_path(@dir)
|
|
@@ -113,7 +114,7 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
113
114
|
else
|
|
114
115
|
puts "Required TCP port #{port} is used for PostgreSQL server" unless @quiet
|
|
115
116
|
end
|
|
116
|
-
if local &&
|
|
117
|
+
if (local && @docker != :always) || @docker == :never
|
|
117
118
|
pid = run_local(home, stdout, port)
|
|
118
119
|
place = "in process ##{pid}"
|
|
119
120
|
else
|
|
@@ -145,25 +146,26 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
145
146
|
FileUtils.mkdir_p(home)
|
|
146
147
|
out =
|
|
147
148
|
qbash(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
],
|
|
160
|
-
log: stdout
|
|
149
|
+
'docker',
|
|
150
|
+
'run',
|
|
151
|
+
"--publish #{Shellwords.escape("#{port}:5432")}",
|
|
152
|
+
"-e POSTGRES_USER=#{Shellwords.escape(@user)}",
|
|
153
|
+
"-e POSTGRES_PASSWORD=#{Shellwords.escape(@password)}",
|
|
154
|
+
"-e POSTGRES_DB=#{Shellwords.escape(@dbname)}",
|
|
155
|
+
'--detach',
|
|
156
|
+
'--rm',
|
|
157
|
+
'postgres:18.1',
|
|
158
|
+
@config.map { |k, v| "-c #{Shellwords.escape("#{k}=#{v}")}" },
|
|
159
|
+
stdout:
|
|
161
160
|
)
|
|
162
161
|
container = out.scan(/[a-f0-9]+\Z/).first
|
|
163
162
|
File.write(File.join(home, 'docker-container'), container)
|
|
164
163
|
at_exit do
|
|
165
|
-
if qbash(
|
|
166
|
-
|
|
164
|
+
if qbash(
|
|
165
|
+
"docker ps --format '{{.ID}}' --no-trunc | grep '#{Shellwords.escape(container)}'",
|
|
166
|
+
both: true, accept: nil
|
|
167
|
+
)[1].zero?
|
|
168
|
+
qbash("docker stop #{Shellwords.escape(container)}")
|
|
167
169
|
puts "PostgreSQL docker container #{container.inspect} was stopped" unless @quiet
|
|
168
170
|
end
|
|
169
171
|
end
|
|
@@ -179,17 +181,16 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
179
181
|
Tempfile.open do |pwfile|
|
|
180
182
|
File.write(pwfile.path, @password)
|
|
181
183
|
qbash(
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
log: stdout
|
|
184
|
+
'initdb',
|
|
185
|
+
'--auth=trust',
|
|
186
|
+
'--locale=en_US.UTF-8',
|
|
187
|
+
'-D',
|
|
188
|
+
Shellwords.escape(home),
|
|
189
|
+
'--username',
|
|
190
|
+
Shellwords.escape(@user),
|
|
191
|
+
'--pwfile',
|
|
192
|
+
Shellwords.escape(pwfile.path),
|
|
193
|
+
stdout:
|
|
193
194
|
)
|
|
194
195
|
end
|
|
195
196
|
cmd = [
|
|
@@ -206,7 +207,7 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
206
207
|
)
|
|
207
208
|
File.write(File.join(@dir, 'pid'), pid)
|
|
208
209
|
at_exit do
|
|
209
|
-
qbash("kill -TERM #{pid}",
|
|
210
|
+
qbash("kill -TERM #{Shellwords.escape(pid)}", stdout:)
|
|
210
211
|
puts "PostgreSQL killed in PID #{pid}" unless @quiet
|
|
211
212
|
end
|
|
212
213
|
begin
|
|
@@ -218,14 +219,12 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
218
219
|
raise "Failed to start PostgreSQL database server on port #{port}: #{e.message}"
|
|
219
220
|
end
|
|
220
221
|
qbash(
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
],
|
|
228
|
-
log: stdout
|
|
222
|
+
'createdb',
|
|
223
|
+
'--host', 'localhost',
|
|
224
|
+
'--port', Shellwords.escape(port),
|
|
225
|
+
'--username', Shellwords.escape(@user),
|
|
226
|
+
Shellwords.escape(@dbname),
|
|
227
|
+
stdout:
|
|
229
228
|
)
|
|
230
229
|
pid
|
|
231
230
|
end
|
data/lib/pgtk/pool.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
require 'pg'
|
|
@@ -46,7 +46,7 @@ require_relative 'wire'
|
|
|
46
46
|
# end
|
|
47
47
|
#
|
|
48
48
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
49
|
-
# Copyright:: Copyright (c) 2019-
|
|
49
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
50
50
|
# License:: MIT
|
|
51
51
|
class Pgtk::Pool
|
|
52
52
|
# Constructor.
|
data/lib/pgtk/retry.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
require_relative '../pgtk'
|
|
@@ -45,7 +45,7 @@ require_relative '../pgtk'
|
|
|
45
45
|
# end
|
|
46
46
|
#
|
|
47
47
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
48
|
-
# Copyright:: Copyright (c) 2019-
|
|
48
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
49
49
|
# License:: MIT
|
|
50
50
|
class Pgtk::Retry
|
|
51
51
|
# Constructor.
|
data/lib/pgtk/spy.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
require 'pg'
|
|
@@ -44,7 +44,7 @@ require_relative 'wire'
|
|
|
44
44
|
# puts "First query: #{queries.first}"
|
|
45
45
|
#
|
|
46
46
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
47
|
-
# Copyright:: Copyright (c) 2019-
|
|
47
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
48
48
|
# License:: MIT
|
|
49
49
|
class Pgtk::Spy
|
|
50
50
|
# Constructor.
|
data/lib/pgtk/stash.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
require 'concurrent-ruby'
|
|
@@ -26,7 +26,7 @@ require_relative '../pgtk'
|
|
|
26
26
|
# result = stash.exec('SELECT * FROM users WHERE id = $1', [42])
|
|
27
27
|
#
|
|
28
28
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
29
|
-
# Copyright:: Copyright (c) 2019-
|
|
29
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
30
30
|
# License:: MIT
|
|
31
31
|
class Pgtk::Stash
|
|
32
32
|
MODS = %w[INSERT DELETE UPDATE LOCK VACUUM TRANSACTION COMMIT ROLLBACK REINDEX TRUNCATE CREATE ALTER DROP SET].freeze
|
data/lib/pgtk/version.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
require_relative '../pgtk'
|
|
7
7
|
|
|
8
8
|
# Pgtk version.
|
|
9
9
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
10
|
-
# Copyright:: Copyright (c) 2019-
|
|
10
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
11
11
|
# License:: MIT
|
|
12
12
|
module Pgtk
|
|
13
13
|
# Current version of the library.
|
|
14
|
-
VERSION = '0.
|
|
14
|
+
VERSION = '0.30.0' unless defined?(VERSION)
|
|
15
15
|
end
|
data/lib/pgtk/wire.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
require 'pg'
|
|
@@ -10,14 +10,14 @@ require_relative '../pgtk'
|
|
|
10
10
|
|
|
11
11
|
# Wires.
|
|
12
12
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
13
|
-
# Copyright:: Copyright (c) 2019-
|
|
13
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
14
14
|
# License:: MIT
|
|
15
15
|
module Pgtk::Wire
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
# Simple wire with details.
|
|
19
19
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
20
|
-
# Copyright:: Copyright (c) 2019-
|
|
20
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
21
21
|
# License:: MIT
|
|
22
22
|
class Pgtk::Wire::Direct
|
|
23
23
|
# Constructor.
|
|
@@ -53,7 +53,7 @@ end
|
|
|
53
53
|
# postgres://user:password@host:port/dbname
|
|
54
54
|
#
|
|
55
55
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
56
|
-
# Copyright:: Copyright (c) 2019-
|
|
56
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
57
57
|
# License:: MIT
|
|
58
58
|
class Pgtk::Wire::Env
|
|
59
59
|
# Constructor.
|
|
@@ -81,7 +81,7 @@ end
|
|
|
81
81
|
|
|
82
82
|
# Using configuration from YAML file.
|
|
83
83
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
84
|
-
# Copyright:: Copyright (c) 2019-
|
|
84
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
85
85
|
# License:: MIT
|
|
86
86
|
class Pgtk::Wire::Yaml
|
|
87
87
|
# Constructor.
|
data/lib/pgtk.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
# Pgtk main module.
|
|
7
7
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
|
8
|
-
# Copyright:: Copyright (c) 2019-
|
|
8
|
+
# Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
9
9
|
# License:: MIT
|
|
10
10
|
module Pgtk
|
|
11
11
|
# Nothing here.
|
data/pgtk.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
|
5
5
|
|
|
6
6
|
require 'English'
|
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
|
28
28
|
s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
|
|
29
29
|
s.add_dependency 'backtrace', '~>0.4'
|
|
30
30
|
s.add_dependency 'concurrent-ruby', '~>1.3'
|
|
31
|
+
s.add_dependency 'donce', '~>0.0'
|
|
31
32
|
s.add_dependency 'joined', '~>0.3'
|
|
32
33
|
s.add_dependency 'logger', '~>1.7'
|
|
33
34
|
s.add_dependency 'loog', '~>0.6'
|
data/resources/pom.xml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<!--
|
|
3
|
-
* SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
* SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
-->
|
|
6
6
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<version>0.0.0</version>
|
|
11
11
|
<packaging>pom</packaging>
|
|
12
12
|
<properties>
|
|
13
|
-
<postgresql.version>42.7.
|
|
13
|
+
<postgresql.version>42.7.9</postgresql.version>
|
|
14
14
|
<liquibase.version>5.0.1</liquibase.version>
|
|
15
15
|
</properties>
|
|
16
16
|
<dependencies>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<!--
|
|
3
|
-
* SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
* SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
-->
|
|
6
6
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd" logicalFilePath="001-initial-schema.xml">
|
data/test-resources/master.xml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
2
|
<!--
|
|
3
|
-
* SPDX-FileCopyrightText: Copyright (c) 2019-
|
|
3
|
+
* SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
-->
|
|
6
6
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pgtk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.30.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yegor Bugayenko
|
|
@@ -37,6 +37,20 @@ dependencies:
|
|
|
37
37
|
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
39
|
version: '1.3'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: donce
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0.0'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0.0'
|
|
40
54
|
- !ruby/object:Gem::Dependency
|
|
41
55
|
name: joined
|
|
42
56
|
requirement: !ruby/object:Gem::Requirement
|