pgtk 0.29.0 → 0.29.1
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 +18 -11
- data/lib/pgtk/pgsql_task.rb +86 -38
- data/lib/pgtk/version.rb +1 -1
- data/pgtk.gemspec +1 -0
- data/resources/pom.xml +1 -0
- 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: 9058b06e680aa6404b1c6f9dc3bdd1f908ac24bc60068e413f979ffa92b7bc07
|
|
4
|
+
data.tar.gz: 59e67475bb42279e43ef93cda5930a89edf2e0f4006fd3601a6b5f48f1c32692
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9e827f631278939888b20c21ff7bd7961db5017f845ca4864144334044b44cb96d4814518c93b55f04a41897fcf52fa90c9e37a2058f1e18d5f555eda553c8b8
|
|
7
|
+
data.tar.gz: d97fa97e0981a3164aa721f56e28c991fc11661ae83b67f0dbabd651cdb0eaceb15f650fe4d27ad5781fe61b95d04895f820be328a0b39c6f7ba7ee6b02b4abb
|
data/Gemfile
CHANGED
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
source 'https://rubygems.org'
|
|
7
7
|
gemspec
|
|
8
8
|
|
|
9
|
-
gem 'minitest', '~>
|
|
9
|
+
gem 'minitest', '~>6.0', require: false
|
|
10
|
+
gem 'minitest-mock', '~>5.27', require: false
|
|
10
11
|
gem 'minitest-reporters', '~>1.7', require: false
|
|
12
|
+
gem 'minitest-stub-const', '~>0.6', require: false
|
|
11
13
|
gem 'rack', '~>3.1', require: false
|
|
12
14
|
gem 'rake', '~>13.2', require: false
|
|
13
15
|
gem 'rubocop', '~>1.73', require: false
|
data/Gemfile.lock
CHANGED
|
@@ -11,6 +11,7 @@ PATH
|
|
|
11
11
|
qbash (~> 0.4)
|
|
12
12
|
random-port (~> 0.7)
|
|
13
13
|
tago (~> 0.1)
|
|
14
|
+
waitutil (~> 0.2)
|
|
14
15
|
|
|
15
16
|
GEM
|
|
16
17
|
remote: https://rubygems.org/
|
|
@@ -19,25 +20,28 @@ GEM
|
|
|
19
20
|
ast (2.4.3)
|
|
20
21
|
backtrace (0.4.1)
|
|
21
22
|
builder (3.3.0)
|
|
22
|
-
concurrent-ruby (1.3.
|
|
23
|
+
concurrent-ruby (1.3.6)
|
|
23
24
|
differ (0.1.2)
|
|
24
25
|
docile (1.4.1)
|
|
25
|
-
elapsed (0.2.
|
|
26
|
+
elapsed (0.2.1)
|
|
26
27
|
loog (~> 0.6)
|
|
27
28
|
tago (~> 0.1)
|
|
28
29
|
joined (0.4.0)
|
|
29
|
-
json (2.
|
|
30
|
+
json (2.18.0)
|
|
30
31
|
language_server-protocol (3.17.0.5)
|
|
31
32
|
lint_roller (1.1.0)
|
|
32
33
|
logger (1.7.0)
|
|
33
34
|
loog (0.6.1)
|
|
34
35
|
logger (~> 1.0)
|
|
35
|
-
minitest (
|
|
36
|
+
minitest (6.0.0)
|
|
37
|
+
prism (~> 1.5)
|
|
38
|
+
minitest-mock (5.27.0)
|
|
36
39
|
minitest-reporters (1.7.1)
|
|
37
40
|
ansi
|
|
38
41
|
builder
|
|
39
42
|
minitest (>= 5.0)
|
|
40
43
|
ruby-progressbar
|
|
44
|
+
minitest-stub-const (0.6)
|
|
41
45
|
nokogiri (1.18.10-arm64-darwin)
|
|
42
46
|
racc (~> 1.4)
|
|
43
47
|
nokogiri (1.18.10-x64-mingw-ucrt)
|
|
@@ -51,7 +55,7 @@ GEM
|
|
|
51
55
|
pg (1.6.2-arm64-darwin)
|
|
52
56
|
pg (1.6.2-x64-mingw-ucrt)
|
|
53
57
|
pg (1.6.2-x86_64-linux)
|
|
54
|
-
prism (1.
|
|
58
|
+
prism (1.7.0)
|
|
55
59
|
qbash (0.4.8)
|
|
56
60
|
backtrace (> 0)
|
|
57
61
|
elapsed (> 0)
|
|
@@ -65,7 +69,7 @@ GEM
|
|
|
65
69
|
tago (~> 0.0)
|
|
66
70
|
regexp_parser (2.11.3)
|
|
67
71
|
rexml (3.4.4)
|
|
68
|
-
rubocop (1.
|
|
72
|
+
rubocop (1.82.0)
|
|
69
73
|
json (~> 2.3)
|
|
70
74
|
language_server-protocol (~> 3.17.0.2)
|
|
71
75
|
lint_roller (~> 1.1.0)
|
|
@@ -73,7 +77,7 @@ GEM
|
|
|
73
77
|
parser (>= 3.3.0.2)
|
|
74
78
|
rainbow (>= 2.2.2, < 4.0)
|
|
75
79
|
regexp_parser (>= 2.9.3, < 3.0)
|
|
76
|
-
rubocop-ast (>= 1.
|
|
80
|
+
rubocop-ast (>= 1.48.0, < 2.0)
|
|
77
81
|
ruby-progressbar (~> 1.7)
|
|
78
82
|
unicode-display_width (>= 2.4.0, < 4.0)
|
|
79
83
|
rubocop-ast (1.48.0)
|
|
@@ -101,14 +105,15 @@ GEM
|
|
|
101
105
|
simplecov-html (0.13.2)
|
|
102
106
|
simplecov_json_formatter (0.1.4)
|
|
103
107
|
slop (4.10.1)
|
|
104
|
-
tago (0.
|
|
108
|
+
tago (0.6.0)
|
|
105
109
|
threads (0.5.0)
|
|
106
110
|
backtrace (~> 0)
|
|
107
111
|
concurrent-ruby (~> 1.0)
|
|
108
|
-
timeout (0.
|
|
112
|
+
timeout (0.6.0)
|
|
109
113
|
unicode-display_width (3.2.0)
|
|
110
114
|
unicode-emoji (~> 4.1)
|
|
111
|
-
unicode-emoji (4.
|
|
115
|
+
unicode-emoji (4.2.0)
|
|
116
|
+
waitutil (0.2.1)
|
|
112
117
|
xcop (0.8.0)
|
|
113
118
|
differ (~> 0.1.2)
|
|
114
119
|
nokogiri (~> 1.10)
|
|
@@ -124,8 +129,10 @@ PLATFORMS
|
|
|
124
129
|
x86_64-linux
|
|
125
130
|
|
|
126
131
|
DEPENDENCIES
|
|
127
|
-
minitest (~>
|
|
132
|
+
minitest (~> 6.0)
|
|
133
|
+
minitest-mock (~> 5.27)
|
|
128
134
|
minitest-reporters (~> 1.7)
|
|
135
|
+
minitest-stub-const (~> 0.6)
|
|
129
136
|
pgtk!
|
|
130
137
|
rack (~> 3.1)
|
|
131
138
|
rake (~> 13.2)
|
data/lib/pgtk/pgsql_task.rb
CHANGED
|
@@ -10,8 +10,10 @@ require 'rake'
|
|
|
10
10
|
require 'rake/tasklib'
|
|
11
11
|
require 'random-port'
|
|
12
12
|
require 'shellwords'
|
|
13
|
+
require 'securerandom'
|
|
13
14
|
require 'tempfile'
|
|
14
15
|
require 'yaml'
|
|
16
|
+
require 'waitutil'
|
|
15
17
|
require_relative '../pgtk'
|
|
16
18
|
|
|
17
19
|
# Pgsql rake task.
|
|
@@ -59,6 +61,10 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
59
61
|
# @return [Hash]
|
|
60
62
|
attr_accessor :config
|
|
61
63
|
|
|
64
|
+
# Use force docker
|
|
65
|
+
# @return [Boolean]
|
|
66
|
+
attr_accessor :force_docker
|
|
67
|
+
|
|
62
68
|
# Initialize a new PostgreSQL server task.
|
|
63
69
|
#
|
|
64
70
|
# @param [Array] args Task arguments
|
|
@@ -85,12 +91,85 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
85
91
|
private
|
|
86
92
|
|
|
87
93
|
def run
|
|
94
|
+
local = qbash('postgres -V').start_with?('postgres') && qbash('initdb -V').start_with?('initdb')
|
|
95
|
+
docker = qbash('docker -v').start_with?('Docker')
|
|
96
|
+
raise 'You must have PostgreSQL or Docker installed locally' unless local && docker
|
|
97
|
+
raise 'You cannot force Docker to run, because it is not installed locally' if @force_docker && !docker
|
|
88
98
|
raise "Option 'dir' is mandatory" unless @dir
|
|
89
99
|
raise "Option 'yaml' is mandatory" unless @yaml
|
|
90
100
|
home = File.expand_path(@dir)
|
|
91
101
|
FileUtils.rm_rf(home) if @fresh_start
|
|
92
102
|
raise "Directory/file #{home} is present, use fresh_start=true" if File.exist?(home)
|
|
93
103
|
stdout = @quiet ? nil : $stdout
|
|
104
|
+
port = @port
|
|
105
|
+
if port.nil?
|
|
106
|
+
port = RandomPort::Pool::SINGLETON.acquire
|
|
107
|
+
puts "Random TCP port #{port} is used for PostgreSQL server" unless @quiet
|
|
108
|
+
else
|
|
109
|
+
puts "Required TCP port #{port} is used for PostgreSQL server" unless @quiet
|
|
110
|
+
end
|
|
111
|
+
if local && !@force_docker
|
|
112
|
+
pid = run_local(home, stdout, port)
|
|
113
|
+
place = "in process ##{pid}"
|
|
114
|
+
else
|
|
115
|
+
container = run_docker(home, stdout, port)
|
|
116
|
+
place = "in container #{container}"
|
|
117
|
+
end
|
|
118
|
+
File.write(
|
|
119
|
+
@yaml,
|
|
120
|
+
{
|
|
121
|
+
'pgsql' => {
|
|
122
|
+
'host' => 'localhost',
|
|
123
|
+
'port' => port,
|
|
124
|
+
'dbname' => @dbname,
|
|
125
|
+
'user' => @user,
|
|
126
|
+
'password' => @password,
|
|
127
|
+
'url' => [
|
|
128
|
+
"jdbc:postgresql://localhost:#{port}/",
|
|
129
|
+
"#{CGI.escape(@dbname)}?user=#{CGI.escape(@user)}"
|
|
130
|
+
].join
|
|
131
|
+
}
|
|
132
|
+
}.to_yaml
|
|
133
|
+
)
|
|
134
|
+
return if @quiet
|
|
135
|
+
puts "PostgreSQL has been started #{place}, port #{port}"
|
|
136
|
+
puts "YAML config saved to #{@yaml}"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def run_docker(home, stdout, port)
|
|
140
|
+
FileUtils.mkdir_p(home)
|
|
141
|
+
out =
|
|
142
|
+
qbash(
|
|
143
|
+
[
|
|
144
|
+
'docker',
|
|
145
|
+
'run',
|
|
146
|
+
'--name pgtk',
|
|
147
|
+
"--publish #{port}:5432",
|
|
148
|
+
"-e POSTGRES_USER=#{Shellwords.escape(@user)}",
|
|
149
|
+
"-e POSTGRES_PASSWORD=#{Shellwords.escape(@password)}",
|
|
150
|
+
"-e POSTGRES_DB=#{Shellwords.escape(@dbname)}",
|
|
151
|
+
'--detach',
|
|
152
|
+
'--rm',
|
|
153
|
+
'postgres:18.1',
|
|
154
|
+
@config.map { |k, v| "-c #{Shellwords.escape("#{k}=#{v}")}" }
|
|
155
|
+
],
|
|
156
|
+
log: stdout
|
|
157
|
+
)
|
|
158
|
+
container = out.scan(/[a-f0-9]+\Z/).first
|
|
159
|
+
File.write(File.join(home, 'docker-container'), container)
|
|
160
|
+
at_exit do
|
|
161
|
+
qbash("docker stop #{container}")
|
|
162
|
+
puts "PostgreSQL docker container #{container.inspect} was stopped" unless @quiet
|
|
163
|
+
end
|
|
164
|
+
begin
|
|
165
|
+
WaitUtil.wait_for_service('PG in Docker', 'localhost', port, timeout_sec: 10, delay_sec: 0.1)
|
|
166
|
+
rescue WaitUtil::TimeoutError => e
|
|
167
|
+
raise "Failed to start PostgreSQL Docker container #{container.inspect}: #{e.message}"
|
|
168
|
+
end
|
|
169
|
+
container
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def run_local(home, stdout, port)
|
|
94
173
|
Tempfile.open do |pwfile|
|
|
95
174
|
File.write(pwfile.path, @password)
|
|
96
175
|
qbash(
|
|
@@ -107,13 +186,6 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
107
186
|
log: stdout
|
|
108
187
|
)
|
|
109
188
|
end
|
|
110
|
-
port = @port
|
|
111
|
-
if port.nil?
|
|
112
|
-
port = RandomPort::Pool::SINGLETON.acquire
|
|
113
|
-
puts "Random TCP port #{port} is used for PostgreSQL server" unless @quiet
|
|
114
|
-
else
|
|
115
|
-
puts "Required TCP port #{port} is used for PostgreSQL server" unless @quiet
|
|
116
|
-
end
|
|
117
189
|
cmd = [
|
|
118
190
|
'postgres',
|
|
119
191
|
'-k', Shellwords.escape(home),
|
|
@@ -131,19 +203,13 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
131
203
|
qbash("kill -TERM #{pid}", log: stdout)
|
|
132
204
|
puts "PostgreSQL killed in PID #{pid}" unless @quiet
|
|
133
205
|
end
|
|
134
|
-
attempt = 0
|
|
135
206
|
begin
|
|
136
|
-
|
|
137
|
-
rescue
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
puts "stdout:\n#{File.read(File.join(home, 'stdout.txt'))}"
|
|
143
|
-
puts "stderr:\n#{File.read(File.join(home, 'stderr.txt'))}"
|
|
144
|
-
raise "Failed to start PostgreSQL database server on port #{port}: #{e.message}"
|
|
145
|
-
end
|
|
146
|
-
retry
|
|
207
|
+
WaitUtil.wait_for_service('PG in local', 'localhost', port, timeout_sec: 10, delay_sec: 0.1)
|
|
208
|
+
rescue WaitUtil::TimeoutError => e
|
|
209
|
+
puts "+ #{cmd}"
|
|
210
|
+
puts "stdout:\n#{File.read(File.join(home, 'stdout.txt'))}"
|
|
211
|
+
puts "stderr:\n#{File.read(File.join(home, 'stderr.txt'))}"
|
|
212
|
+
raise "Failed to start PostgreSQL database server on port #{port}: #{e.message}"
|
|
147
213
|
end
|
|
148
214
|
qbash(
|
|
149
215
|
[
|
|
@@ -155,24 +221,6 @@ class Pgtk::PgsqlTask < Rake::TaskLib
|
|
|
155
221
|
],
|
|
156
222
|
log: stdout
|
|
157
223
|
)
|
|
158
|
-
|
|
159
|
-
@yaml,
|
|
160
|
-
{
|
|
161
|
-
'pgsql' => {
|
|
162
|
-
'host' => 'localhost',
|
|
163
|
-
'port' => port,
|
|
164
|
-
'dbname' => @dbname,
|
|
165
|
-
'user' => @user,
|
|
166
|
-
'password' => @password,
|
|
167
|
-
'url' => [
|
|
168
|
-
"jdbc:postgresql://localhost:#{port}/",
|
|
169
|
-
"#{CGI.escape(@dbname)}?user=#{CGI.escape(@user)}"
|
|
170
|
-
].join
|
|
171
|
-
}
|
|
172
|
-
}.to_yaml
|
|
173
|
-
)
|
|
174
|
-
return if @quiet
|
|
175
|
-
puts "PostgreSQL has been started in process ##{pid}, port #{port}"
|
|
176
|
-
puts "YAML config saved to #{@yaml}"
|
|
224
|
+
pid
|
|
177
225
|
end
|
|
178
226
|
end
|
data/lib/pgtk/version.rb
CHANGED
data/pgtk.gemspec
CHANGED
data/resources/pom.xml
CHANGED
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.29.
|
|
4
|
+
version: 0.29.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yegor Bugayenko
|
|
@@ -135,6 +135,20 @@ dependencies:
|
|
|
135
135
|
- - "~>"
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
137
|
version: '0.1'
|
|
138
|
+
- !ruby/object:Gem::Dependency
|
|
139
|
+
name: waitutil
|
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
|
141
|
+
requirements:
|
|
142
|
+
- - "~>"
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: '0.2'
|
|
145
|
+
type: :runtime
|
|
146
|
+
prerelease: false
|
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
+
requirements:
|
|
149
|
+
- - "~>"
|
|
150
|
+
- !ruby/object:Gem::Version
|
|
151
|
+
version: '0.2'
|
|
138
152
|
description: This small Ruby gem helps you integrate PostgreSQL with your Ruby web
|
|
139
153
|
app, through Liquibase. It also adds a simple connection pool and query processor,
|
|
140
154
|
to make SQL manipulation simpler.
|