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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ed1f139f521063e30992649b32a67bc125d5cd2ae549e56da21c0e88b600455b
4
- data.tar.gz: 3994612c8c3856d246e6a28a5656e23033aa4cfe8433ca6d8d75dfaaa7d5d41b
3
+ metadata.gz: cbdc13b881e0f4d821ef1472fa129962cc30d3662ee912efa8f1b8b33b564074
4
+ data.tar.gz: a7fa85d5ae31e7e03cce4852436396a6082a4454c4d7f70557b8f25cd6a0dc61
5
5
  SHA512:
6
- metadata.gz: a5957d0bb3e4921d457726aaae131ee0356f5aac2cfe8dcd0d2df658742822026fd84f098c6da3d62078d27bf70bc3096b98d7a9c625f5464f1d5efb51ce3874
7
- data.tar.gz: 9294d02de72588841dac47a066b7833e25bd0532d5c3a92a3f7ac7d1f59acd1b51277f1f127c897cae023b57dceea6e4a210bc2dcedcab416db8518397bd0709
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-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
@@ -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
- '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
- ]
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
- qbash(
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
- "-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) }
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
@@ -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
@@ -61,9 +61,9 @@ class Pgtk::PgsqlTask < Rake::TaskLib
61
61
  # @return [Hash]
62
62
  attr_accessor :config
63
63
 
64
- # Use force docker
65
- # @return [Boolean]
66
- attr_accessor :force_docker
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 @force_docker && !docker
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 && !@force_docker
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
- 'docker',
150
- 'run',
151
- "--publish #{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
- ],
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("docker ps --format '{{.ID}}' --no-trunc | grep '#{container}'", both: true, accept: nil)[1].zero?
166
- qbash("docker stop #{container}")
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
- 'initdb',
184
- '--auth=trust',
185
- '-D',
186
- Shellwords.escape(home),
187
- '--username',
188
- Shellwords.escape(@user),
189
- '--pwfile',
190
- Shellwords.escape(pwfile.path)
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}", log: stdout)
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
- 'createdb',
223
- '--host', 'localhost',
224
- '--port', Shellwords.escape(port),
225
- '--username', Shellwords.escape(@user),
226
- Shellwords.escape(@dbname)
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-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.3'
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-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.
@@ -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-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.3
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