pgtk 0.29.2 → 0.29.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88629ebcfef471a523b2b9cbec16eab60a49cc8c08a3a277c293db1b49babb3c
4
- data.tar.gz: 3a6b0a8a313fac7d034f6714b3a6c2b5d5801788e21794a2bd3e642eb85968ee
3
+ metadata.gz: 296344ebe7c8fbd455e8c8276e5d4ce27765974b83a16ef001b4d699f7d63977
4
+ data.tar.gz: df63b7c1b2efdd245c4e167d70cbb85d1c4ecde026a402b51687256bb1d76695
5
5
  SHA512:
6
- metadata.gz: 874afd6bc48dc18a48ec686c396f73f7dbd999802ec9f67236e11576808451642bdcb36a0d9a2938eb9cee35e8c00140e3cd75193d75b8301c0eae36cb7e9408
7
- data.tar.gz: 97e5c27aacbc29a04805b24304766a2bc329829ecff64f0032dc84287d0b47656582ecb4f3c63dfc4870796fd2664d9df9057b7d09b08d84c75a1d6fb9c6ac52
6
+ metadata.gz: 969917c4590972ecfbda2701f1275d9ba3b0f8d63d4ff3492068509d22914a0c56fac94d4999703d0f03dbe4a2bf1a5d5d7371b77c31ca852bed47c72606ef84
7
+ data.tar.gz: 204bdc905dc18bf7addba0e01b4689b88a2d039cfbb96e77d3c5ed18a6c96e18b27d4f4a8fc38b62e4028f51c0690ccbeebf7d6a8ca3f269d45135cf3049a884
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
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
- elapsed (0.2.1)
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.6.1)
40
+ loog (0.7.2)
41
+ ellipsized
35
42
  logger (~> 1.0)
36
- minitest (6.0.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.18.10-arm64-darwin)
52
+ nokogiri (1.19.0-arm64-darwin)
46
53
  racc (~> 1.4)
47
- nokogiri (1.18.10-x64-mingw-ucrt)
54
+ nokogiri (1.19.0-x64-mingw-ucrt)
48
55
  racc (~> 1.4)
49
- nokogiri (1.18.10-x86_64-linux-gnu)
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.0)
60
+ parser (3.3.10.1)
53
61
  ast (~> 2.4.1)
54
62
  racc
55
- pg (1.6.2-arm64-darwin)
56
- pg (1.6.2-x64-mingw-ucrt)
57
- pg (1.6.2-x86_64-linux)
58
- prism (1.7.0)
59
- qbash (0.4.8)
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.82.0)
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.48.0, < 2.0)
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.48.0)
91
+ rubocop-ast (1.49.0)
84
92
  parser (>= 3.3.7.2)
85
- prism (~> 1.4)
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.6.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
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2019-2025 Yegor Bugayenko
3
+ Copyright (c) 2019-2026 Yegor Bugayenko
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the 'Software'), to deal
data/LICENSES/MIT.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2019-2025 Yegor Bugayenko
3
+ Copyright (c) 2019-2026 Yegor Bugayenko
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the 'Software'), to deal
data/README.md CHANGED
@@ -7,7 +7,6 @@
7
7
  [![rake](https://github.com/yegor256/pgtk/actions/workflows/rake.yml/badge.svg)](https://github.com/yegor256/pgtk/actions/workflows/rake.yml)
8
8
  [![PDD status](https://www.0pdd.com/svg?name=yegor256/pgtk)](https://www.0pdd.com/p?name=yegor256/pgtk)
9
9
  [![Gem Version](https://badge.fury.io/rb/pgtk.svg)](https://badge.fury.io/rb/pgtk)
10
- [![Maintainability](https://api.codeclimate.com/v1/badges/3a5bebac001e5288b00d/maintainability)](https://codeclimate.com/github/yegor256/pgtk/maintainability)
11
10
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/yegor256/pgtk/blob/master/LICENSE.txt)
12
11
  [![Test Coverage](https://img.shields.io/codecov/c/github/yegor256/pgtk.svg)](https://codecov.io/github/yegor256/pgtk?branch=master)
13
12
  [![Hits-of-Code](https://hitsofcode.com/github/yegor256/pgtk)](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-2025 Yegor Bugayenko
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
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
1
+ # SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
2
2
  # SPDX-License-Identifier: MIT
3
3
  ---
4
4
  default: --format pretty
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
54
+ # Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
55
55
  # License:: MIT
56
56
  class Pgtk::Impatient
57
57
  # If timed out
@@ -1,9 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
19
+ # Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
17
20
  # License:: MIT
18
21
  class Pgtk::LiquibaseTask < Rake::TaskLib
19
22
  # Task name
@@ -99,47 +102,53 @@ class Pgtk::LiquibaseTask < Rake::TaskLib
99
102
  raise "The 'password' is not set in the config (YAML)" if password.nil?
100
103
  Dir.chdir(File.dirname(@master)) do
101
104
  qbash(
102
- [
103
- 'mvn', 'verify',
104
- '--errors',
105
- '--batch-mode',
106
- '--fail-fast',
107
- @quiet ? '--quiet' : '--debug',
108
- '--file',
109
- Shellwords.escape(pom),
110
- '--define',
111
- "liquibase.version=#{@liquibase_version}",
112
- '--define',
113
- "postgresql.version=#{@postgresql_version}",
114
- '--define',
115
- Shellwords.escape("liquibase.searchPath=#{File.dirname(@master)}"),
116
- '--define',
117
- Shellwords.escape("liquibase.changeLogFile=#{old ? @master : File.basename(@master)}"),
118
- '--define',
119
- Shellwords.escape("liquibase.url=#{url}"),
120
- '--define',
121
- Shellwords.escape("liquibase.password=#{password}"),
122
- '--define',
123
- Shellwords.escape("liquibase.contexts=#{@contexts}")
124
- ]
105
+ 'mvn', 'verify',
106
+ '--errors',
107
+ '--batch-mode',
108
+ '--fail-fast',
109
+ @quiet ? '--quiet' : '--debug',
110
+ '--file',
111
+ Shellwords.escape(pom),
112
+ '--define',
113
+ "liquibase.version=#{@liquibase_version}",
114
+ '--define',
115
+ "postgresql.version=#{@postgresql_version}",
116
+ '--define',
117
+ Shellwords.escape("liquibase.searchPath=#{File.dirname(@master)}"),
118
+ '--define',
119
+ Shellwords.escape("liquibase.changeLogFile=#{old ? @master : File.basename(@master)}"),
120
+ '--define',
121
+ Shellwords.escape("liquibase.url=#{url}"),
122
+ '--define',
123
+ Shellwords.escape("liquibase.password=#{password}"),
124
+ '--define',
125
+ Shellwords.escape("liquibase.contexts=#{@contexts}"),
126
+ stdout: @quiet ? Loog::NULL : Loog::REGULAR,
127
+ stderr: Loog::REGULAR
125
128
  )
126
129
  end
127
130
  return unless @schema
128
131
  @schema = File.expand_path(@schema)
132
+ host = yml.dig('pgsql', 'host')
133
+ host = donce_host if OS.mac? && ['localhost', '127.0.0.1'].include?(host)
129
134
  Dir.chdir(File.dirname(@schema)) do
130
- qbash(
131
- [
135
+ out = donce(
136
+ image: 'postgres:18.1',
137
+ args: OS.mac? ? '' : '--network=host',
138
+ env: { 'PGPASSWORD' => password },
139
+ command: [
132
140
  'pg_dump',
133
- "-h #{Shellwords.escape(yml.dig('pgsql', 'host'))}",
134
- "-p #{Shellwords.escape(yml.dig('pgsql', 'port'))}",
135
- "-U #{Shellwords.escape(yml.dig('pgsql', 'user'))}",
136
- "-d #{Shellwords.escape(yml.dig('pgsql', 'dbname'))}",
137
- '-n public',
138
- '--schema-only',
139
- "-f #{Shellwords.escape(@schema)}"
140
- ],
141
- env: { 'PGPASSWORD' => Shellwords.escape(password) }
141
+ '-h', host,
142
+ '-p', yml.dig('pgsql', 'port').to_s,
143
+ '-U', yml.dig('pgsql', 'user'),
144
+ '-d', yml.dig('pgsql', 'dbname'),
145
+ '-n', 'public',
146
+ '--schema-only'
147
+ ].shelljoin,
148
+ stdout: @quiet ? Loog::NULL : Loog::REGULAR,
149
+ stderr: Loog::REGULAR
142
150
  )
151
+ File.write(@schema, out)
143
152
  end
144
153
  end
145
154
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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 = Class.new(StandardError)
116
+ class MustError < StandardError
117
+ # empty by design
118
+ end
117
119
  private_constant :MustError
118
120
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
21
+ # Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
22
22
  # License:: MIT
23
23
  class Pgtk::PgsqlTask < Rake::TaskLib
24
24
  # Task name
@@ -91,9 +91,14 @@ class Pgtk::PgsqlTask < Rake::TaskLib
91
91
  private
92
92
 
93
93
  def run
94
- local = qbash('postgres -V; initdb -V', accept: nil, both: true)[1].zero?
95
- docker = qbash('docker -v', accept: nil, both: true)[1].zero?
96
- raise 'You must have PostgreSQL or Docker installed locally' unless local && docker
94
+ pg_out = qbash('postgres -V; initdb -V', accept: nil, both: true)
95
+ local = pg_out[1].zero?
96
+ docker_out = qbash('docker -v', accept: nil, both: true)
97
+ docker = docker_out[1].zero?
98
+ unless local || docker
99
+ raise \
100
+ "Failed to find either PostgreSQL or Docker:\n#{pg_out.first}\n#{docker_out.first}"
101
+ end
97
102
  raise 'You cannot force Docker to run, because it is not installed locally' if @force_docker && !docker
98
103
  raise "Option 'dir' is mandatory" unless @dir
99
104
  raise "Option 'yaml' is mandatory" unless @yaml
@@ -140,26 +145,28 @@ class Pgtk::PgsqlTask < Rake::TaskLib
140
145
  FileUtils.mkdir_p(home)
141
146
  out =
142
147
  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
148
+ 'docker',
149
+ 'run',
150
+ "--publish #{Shellwords.escape("#{port}:5432")}",
151
+ "-e POSTGRES_USER=#{Shellwords.escape(@user)}",
152
+ "-e POSTGRES_PASSWORD=#{Shellwords.escape(@password)}",
153
+ "-e POSTGRES_DB=#{Shellwords.escape(@dbname)}",
154
+ '--detach',
155
+ '--rm',
156
+ 'postgres:18.1',
157
+ @config.map { |k, v| "-c #{Shellwords.escape("#{k}=#{v}")}" },
158
+ stdout:
157
159
  )
158
160
  container = out.scan(/[a-f0-9]+\Z/).first
159
161
  File.write(File.join(home, 'docker-container'), container)
160
162
  at_exit do
161
- qbash("docker stop #{container}")
162
- puts "PostgreSQL docker container #{container.inspect} was stopped" unless @quiet
163
+ if qbash(
164
+ "docker ps --format '{{.ID}}' --no-trunc | grep '#{Shellwords.escape(container)}'",
165
+ both: true, accept: nil
166
+ )[1].zero?
167
+ qbash("docker stop #{Shellwords.escape(container)}")
168
+ puts "PostgreSQL docker container #{container.inspect} was stopped" unless @quiet
169
+ end
163
170
  end
164
171
  begin
165
172
  WaitUtil.wait_for_service('PG in Docker', 'localhost', port, timeout_sec: 10, delay_sec: 0.1)
@@ -173,17 +180,16 @@ class Pgtk::PgsqlTask < Rake::TaskLib
173
180
  Tempfile.open do |pwfile|
174
181
  File.write(pwfile.path, @password)
175
182
  qbash(
176
- [
177
- 'initdb',
178
- '--auth=trust',
179
- '-D',
180
- Shellwords.escape(home),
181
- '--username',
182
- Shellwords.escape(@user),
183
- '--pwfile',
184
- Shellwords.escape(pwfile.path)
185
- ],
186
- log: stdout
183
+ 'initdb',
184
+ '--auth=trust',
185
+ '--locale=en_US.UTF-8',
186
+ '-D',
187
+ Shellwords.escape(home),
188
+ '--username',
189
+ Shellwords.escape(@user),
190
+ '--pwfile',
191
+ Shellwords.escape(pwfile.path),
192
+ stdout:
187
193
  )
188
194
  end
189
195
  cmd = [
@@ -200,7 +206,7 @@ class Pgtk::PgsqlTask < Rake::TaskLib
200
206
  )
201
207
  File.write(File.join(@dir, 'pid'), pid)
202
208
  at_exit do
203
- qbash("kill -TERM #{pid}", log: stdout)
209
+ qbash("kill -TERM #{Shellwords.escape(pid)}", stdout:)
204
210
  puts "PostgreSQL killed in PID #{pid}" unless @quiet
205
211
  end
206
212
  begin
@@ -212,14 +218,12 @@ class Pgtk::PgsqlTask < Rake::TaskLib
212
218
  raise "Failed to start PostgreSQL database server on port #{port}: #{e.message}"
213
219
  end
214
220
  qbash(
215
- [
216
- 'createdb',
217
- '--host', 'localhost',
218
- '--port', Shellwords.escape(port),
219
- '--username', Shellwords.escape(@user),
220
- Shellwords.escape(@dbname)
221
- ],
222
- log: stdout
221
+ 'createdb',
222
+ '--host', 'localhost',
223
+ '--port', Shellwords.escape(port),
224
+ '--username', Shellwords.escape(@user),
225
+ Shellwords.escape(@dbname),
226
+ stdout:
223
227
  )
224
228
  pid
225
229
  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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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.29.2'
14
+ VERSION = '0.29.4' 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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
56
+ # Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
57
57
  # License:: MIT
58
58
  class Pgtk::Wire::Env
59
59
  # Constructor.
@@ -70,18 +70,18 @@ class Pgtk::Wire::Env
70
70
  raise "The environment variable #{@var.inspect} is not set" if v.nil?
71
71
  uri = URI(v)
72
72
  Pgtk::Wire::Direct.new(
73
- host: uri.host,
73
+ host: CGI.unescape(uri.host),
74
74
  port: uri.port,
75
- dbname: uri.path[1..],
76
- user: uri.userinfo.split(':')[0],
77
- password: uri.userinfo.split(':')[1]
75
+ dbname: CGI.unescape(uri.path[1..]),
76
+ user: CGI.unescape(uri.userinfo.split(':')[0]),
77
+ password: CGI.unescape(uri.userinfo.split(':')[1])
78
78
  ).connection
79
79
  end
80
80
  end
81
81
 
82
82
  # Using configuration from YAML file.
83
83
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
84
- # Copyright:: Copyright (c) 2019-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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-2025 Yegor Bugayenko
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.8</postgresql.version>
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-2025 Yegor Bugayenko
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">
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <!--
3
- * SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
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.29.2
4
+ version: 0.29.4
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