pgtk 0.12.0 → 0.13.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.
data/Gemfile.lock CHANGED
@@ -47,11 +47,11 @@ GEM
47
47
  benchmark (0.4.0)
48
48
  bigdecimal (3.1.9)
49
49
  builder (3.3.0)
50
- concurrent-ruby (1.3.4)
51
- connection_pool (2.4.1)
50
+ concurrent-ruby (1.3.5)
51
+ connection_pool (2.5.0)
52
52
  crass (1.0.6)
53
53
  date (3.4.1)
54
- diff-lcs (1.5.1)
54
+ diff-lcs (1.6.0)
55
55
  differ (0.1.2)
56
56
  docile (1.4.1)
57
57
  drb (2.2.1)
@@ -59,16 +59,18 @@ GEM
59
59
  loog (> 0)
60
60
  tago (> 0)
61
61
  erubi (1.13.1)
62
- i18n (1.14.6)
62
+ i18n (1.14.7)
63
63
  concurrent-ruby (~> 1.0)
64
64
  io-console (0.8.0)
65
- irb (1.14.3)
65
+ irb (1.15.1)
66
+ pp (>= 0.6.0)
66
67
  rdoc (>= 4.0.0)
67
68
  reline (>= 0.4.2)
68
- json (2.9.1)
69
- language_server-protocol (3.17.0.3)
70
- logger (1.6.4)
71
- loofah (2.23.1)
69
+ json (2.10.1)
70
+ language_server-protocol (3.17.0.4)
71
+ lint_roller (1.1.0)
72
+ logger (1.6.6)
73
+ loofah (2.24.0)
72
74
  crass (~> 1.0.2)
73
75
  nokogiri (>= 1.12.0)
74
76
  loog (0.6.0)
@@ -78,26 +80,33 @@ GEM
78
80
  builder
79
81
  minitest (>= 5.0)
80
82
  ruby-progressbar
81
- nokogiri (1.18.0-arm64-darwin)
83
+ nokogiri (1.18.3-arm64-darwin)
82
84
  racc (~> 1.4)
83
- nokogiri (1.18.0-x86_64-linux-gnu)
85
+ nokogiri (1.18.3-x64-mingw-ucrt)
86
+ racc (~> 1.4)
87
+ nokogiri (1.18.3-x86_64-linux-gnu)
84
88
  racc (~> 1.4)
85
89
  parallel (1.26.3)
86
- parser (3.3.6.0)
90
+ parser (3.3.7.1)
87
91
  ast (~> 2.4.1)
88
92
  racc
89
93
  pg (1.5.9)
90
- psych (5.2.2)
94
+ pg (1.5.9-x64-mingw-ucrt)
95
+ pp (0.6.2)
96
+ prettyprint
97
+ prettyprint (0.2.0)
98
+ psych (5.2.3)
91
99
  date
92
100
  stringio
93
- qbash (0.2.2)
101
+ qbash (0.4.0)
94
102
  backtrace (> 0)
95
103
  elapsed (> 0)
96
104
  loog (> 0)
97
105
  tago (> 0)
98
106
  racc (1.8.1)
99
- rack (3.1.8)
100
- rack-session (2.0.0)
107
+ rack (3.1.10)
108
+ rack-session (2.1.0)
109
+ base64 (>= 0.1.0)
101
110
  rack (>= 3.0.0)
102
111
  rack-test (2.2.0)
103
112
  rack (>= 1.3)
@@ -120,14 +129,15 @@ GEM
120
129
  zeitwerk (~> 2.6)
121
130
  rainbow (3.1.1)
122
131
  rake (13.2.1)
123
- random-port (0.7.1)
124
- rdoc (6.10.0)
132
+ random-port (0.7.5)
133
+ tago (> 0)
134
+ rdoc (6.12.0)
125
135
  psych (>= 4.0.0)
126
136
  regexp_parser (2.10.0)
127
137
  reline (0.6.0)
128
138
  io-console (~> 0.5)
129
- rexml (3.4.0)
130
- rspec-core (3.13.2)
139
+ rexml (3.4.1)
140
+ rspec-core (3.13.3)
131
141
  rspec-support (~> 3.13.0)
132
142
  rspec-expectations (3.13.3)
133
143
  diff-lcs (>= 1.2.0, < 2.0)
@@ -144,20 +154,33 @@ GEM
144
154
  rspec-mocks (~> 3.13)
145
155
  rspec-support (~> 3.13)
146
156
  rspec-support (3.13.2)
147
- rubocop (1.69.2)
157
+ rubocop (1.72.2)
148
158
  json (~> 2.3)
149
- language_server-protocol (>= 3.17.0)
159
+ language_server-protocol (~> 3.17.0.2)
160
+ lint_roller (~> 1.1.0)
150
161
  parallel (~> 1.10)
151
162
  parser (>= 3.3.0.2)
152
163
  rainbow (>= 2.2.2, < 4.0)
153
164
  regexp_parser (>= 2.9.3, < 3.0)
154
- rubocop-ast (>= 1.36.2, < 2.0)
165
+ rubocop-ast (>= 1.38.0, < 2.0)
155
166
  ruby-progressbar (~> 1.7)
156
167
  unicode-display_width (>= 2.4.0, < 4.0)
157
- rubocop-ast (1.37.0)
168
+ rubocop-ast (1.38.0)
158
169
  parser (>= 3.3.1.0)
159
- rubocop-rspec (3.3.0)
160
- rubocop (~> 1.61)
170
+ rubocop-minitest (0.37.1)
171
+ lint_roller (~> 1.1)
172
+ rubocop (>= 1.72.1, < 2.0)
173
+ rubocop-ast (>= 1.38.0, < 2.0)
174
+ rubocop-performance (1.24.0)
175
+ lint_roller (~> 1.1)
176
+ rubocop (>= 1.72.1, < 2.0)
177
+ rubocop-ast (>= 1.38.0, < 2.0)
178
+ rubocop-rake (0.7.1)
179
+ lint_roller (~> 1.1)
180
+ rubocop (>= 1.72.1)
181
+ rubocop-rspec (3.5.0)
182
+ lint_roller (~> 1.1)
183
+ rubocop (~> 1.72, >= 1.72.1)
161
184
  ruby-progressbar (1.13.0)
162
185
  securerandom (0.4.1)
163
186
  simplecov (0.22.0)
@@ -170,40 +193,47 @@ GEM
170
193
  simplecov-html (0.13.1)
171
194
  simplecov_json_formatter (0.1.4)
172
195
  slop (4.10.1)
173
- stringio (3.1.2)
196
+ stringio (3.1.3)
174
197
  tago (0.0.2)
175
198
  thor (1.3.2)
176
199
  tzinfo (2.0.6)
177
200
  concurrent-ruby (~> 1.0)
178
- unicode-display_width (3.1.3)
201
+ unicode-display_width (3.1.4)
179
202
  unicode-emoji (~> 4.0, >= 4.0.4)
180
203
  unicode-emoji (4.0.4)
181
204
  uri (1.0.2)
182
205
  useragent (0.16.11)
183
- xcop (0.7.1)
206
+ xcop (0.8.0)
184
207
  differ (~> 0.1.2)
185
208
  nokogiri (~> 1.10)
186
209
  rainbow (~> 3.0)
187
210
  slop (~> 4.4)
188
- zeitwerk (2.7.1)
211
+ yard (0.9.37)
212
+ zeitwerk (2.7.2)
189
213
 
190
214
  PLATFORMS
191
215
  arm64-darwin-22
216
+ arm64-darwin-23
192
217
  arm64-darwin-24
218
+ x64-mingw-ucrt
193
219
  x86_64-linux
194
220
 
195
221
  DEPENDENCIES
196
222
  minitest (= 5.25.4)
197
223
  minitest-reporters (~> 1.7)
198
224
  pgtk!
199
- rack (= 3.1.8)
225
+ rack (= 3.1.10)
200
226
  rake (= 13.2.1)
201
227
  rspec-rails (= 7.1.0)
202
- rubocop (= 1.69.2)
203
- rubocop-rspec (= 3.3.0)
228
+ rubocop (= 1.72.2)
229
+ rubocop-minitest (> 0)
230
+ rubocop-performance (> 0)
231
+ rubocop-rake (> 0)
232
+ rubocop-rspec (> 0)
204
233
  simplecov (= 0.22.0)
205
234
  simplecov-cobertura (~> 2.1)
206
- xcop (= 0.7.1)
235
+ xcop (> 0)
236
+ yard (= 0.9.37)
207
237
 
208
238
  BUNDLED WITH
209
239
  2.5.16
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2019-2024 Yegor Bugayenko
3
+ Copyright (c) 2019-2025 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 ADDED
@@ -0,0 +1,21 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2019-2025 Yegor Bugayenko
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the 'Software'), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -32,14 +32,14 @@ sudo apt-get install -y postgresql-10 postgresql-client-10
32
32
  sudo apt-get install -y default-jre maven
33
33
  ```
34
34
 
35
- Then, add this to your [`Gemfile`](https://bundler.io/gemfile.html):
35
+ Then, add this to your [Gemfile](https://bundler.io/gemfile.html):
36
36
 
37
37
  ```ruby
38
38
  gem 'pgtk'
39
39
  ```
40
40
 
41
41
  Then, add this to your
42
- [`Rakefile`](https://github.com/ruby/rake/blob/master/doc/rakefile.rdoc):
42
+ [Rakefile](https://github.com/ruby/rake/blob/master/doc/rakefile.rdoc):
43
43
 
44
44
  ```ruby
45
45
  require 'pgtk/pgsql_task'
@@ -73,7 +73,7 @@ Pgtk::LiquibaseTask.new liquibase: :pgsql do |t|
73
73
  end
74
74
  ```
75
75
 
76
- The config.yml file should be in this format:
76
+ The `config.yml` file should be in this format:
77
77
 
78
78
  ```yaml
79
79
  pgsql:
@@ -151,7 +151,14 @@ module Minitest
151
151
  end
152
152
  ```
153
153
 
154
- Should work.
154
+ You can also track all SQL queries sent through, with the help of `Pgtk::Pool`:
155
+
156
+ ```ruby
157
+ require 'pgtk/spy'
158
+ pool = Pgtk::Spy.new(pool) do |sql|
159
+ # here, save this "sql" somewhere
160
+ end
161
+ ```
155
162
 
156
163
  Well, it works in
157
164
  [netbout.com](https://github.com/yegor256/netbout),
data/REUSE.toml ADDED
@@ -0,0 +1,17 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 Yegor Bugayenko
2
+ # SPDX-License-Identifier: MIT
3
+
4
+ version = 1
5
+ [[annotations]]
6
+ path = [
7
+ ".gitattributes",
8
+ ".gitignore",
9
+ ".gitleaksignore",
10
+ ".pdd",
11
+ "Gemfile.lock",
12
+ "README.md",
13
+ "renovate.json"
14
+ ]
15
+ precedence = "override"
16
+ SPDX-FileCopyrightText = "Copyright (c) 2025 Yegor Bugayenko"
17
+ SPDX-License-Identifier = "MIT"
data/Rakefile CHANGED
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2024 Yegor Bugayenko
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'rubygems'
24
7
  require 'rake'
@@ -33,7 +16,7 @@ def version
33
16
  Gem::Specification.load(Dir['*.gemspec'].first).version
34
17
  end
35
18
 
36
- task default: %i[clean test rubocop xcop copyright]
19
+ task default: %i[clean test rubocop xcop yard]
37
20
 
38
21
  require 'rake/testtask'
39
22
  desc 'Run all unit tests'
@@ -44,13 +27,10 @@ Rake::TestTask.new(:test) do |test|
44
27
  test.verbose = false
45
28
  end
46
29
 
47
- require 'rdoc/task'
48
- desc 'Build RDoc documentation'
49
- Rake::RDocTask.new do |rdoc|
50
- rdoc.rdoc_dir = 'rdoc'
51
- rdoc.title = "#{name} #{version}"
52
- rdoc.rdoc_files.include('README*')
53
- rdoc.rdoc_files.include('lib/**/*.rb')
30
+ require 'yard'
31
+ desc 'Build Yard documentation'
32
+ YARD::Rake::YardocTask.new do |t|
33
+ t.files = ['lib/**/*.rb']
54
34
  end
55
35
 
56
36
  require 'rubocop/rake_task'
@@ -63,15 +43,6 @@ end
63
43
  require 'xcop/rake_task'
64
44
  desc 'Validate all XML/XSL/XSD/HTML files for formatting'
65
45
  Xcop::RakeTask.new :xcop do |task|
66
- task.license = 'LICENSE.txt'
67
46
  task.includes = ['**/*.xml', '**/*.xsl', '**/*.xsd', '**/*.html']
68
- task.excludes = ['target/**/*', 'coverage/**/*', 'vendor/**/*']
69
- end
70
-
71
- task :copyright do
72
- sh "grep -q -r '2019-#{Date.today.strftime('%Y')}' \
73
- --include '*.rb' \
74
- --include '*.txt' \
75
- --include 'Rakefile' \
76
- ."
47
+ task.excludes = ['target/**/*', 'coverage/**/*', 'vendor/**/*', 'doc/**/*']
77
48
  end
data/cucumber.yml CHANGED
@@ -1,22 +1,5 @@
1
- # Copyright (c) 2019-2024 Yegor Bugayenko
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the 'Software'), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in all
11
- # copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
- # SOFTWARE.
1
+ # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
2
+ # SPDX-License-Identifier: MIT
20
3
  ---
21
4
  default: --format pretty
22
5
  travis: --format progress
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2024 Yegor Bugayenko
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'English'
24
7
  require 'qbash'
@@ -30,7 +13,7 @@ require_relative '../pgtk'
30
13
 
31
14
  # Liquibase rake task.
32
15
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
- # Copyright:: Copyright (c) 2019-2024 Yegor Bugayenko
16
+ # Copyright:: Copyright (c) 2019-2025 Yegor Bugayenko
34
17
  # License:: MIT
35
18
  class Pgtk::LiquibaseTask < Rake::TaskLib
36
19
  attr_accessor :name, :master, :yaml, :quiet, :liquibase_version, :postgresql_version
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2024 Yegor Bugayenko
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'cgi'
24
7
  require 'English'
@@ -33,7 +16,7 @@ require_relative '../pgtk'
33
16
 
34
17
  # Pgsql rake task.
35
18
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
36
- # Copyright:: Copyright (c) 2019-2024 Yegor Bugayenko
19
+ # Copyright:: Copyright (c) 2019-2025 Yegor Bugayenko
37
20
  # License:: MIT
38
21
  class Pgtk::PgsqlTask < Rake::TaskLib
39
22
  attr_accessor :name, :dir, :fresh_start, :user, :password, :dbname, :yaml, :quiet, :port, :config
data/lib/pgtk/pool.rb CHANGED
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2024 Yegor Bugayenko
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require 'pg'
24
7
  require 'loog'
@@ -27,10 +10,13 @@ require_relative 'wire'
27
10
 
28
11
  # Pool.
29
12
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
- # Copyright:: Copyright (c) 2019-2024 Yegor Bugayenko
13
+ # Copyright:: Copyright (c) 2019-2025 Yegor Bugayenko
31
14
  # License:: MIT
32
15
  class Pgtk::Pool
33
16
  # Constructor.
17
+ #
18
+ # @param [Pgtk::Wire] wire The wire
19
+ # @param [Object] log The log
34
20
  def initialize(wire, log: Loog::NULL)
35
21
  @wire = wire
36
22
  @log = log
@@ -38,6 +24,8 @@ class Pgtk::Pool
38
24
  end
39
25
 
40
26
  # Get the version of PostgreSQL server.
27
+ #
28
+ # @return [String] Version of PostgreSQL server
41
29
  def version
42
30
  @version ||= exec('SHOW server_version')[0]['server_version'].split[0]
43
31
  end
@@ -48,6 +36,8 @@ class Pgtk::Pool
48
36
  # keep in mind that not all servers will allow you to have many connections
49
37
  # open at the same time. For example, Heroku free PostgreSQL database
50
38
  # allows only one connection open.
39
+ #
40
+ # @param [Integer] max Total amount of PostgreSQL connections in the pool
51
41
  def start(max = 8)
52
42
  max.times do
53
43
  @pool << @wire.connection
@@ -101,6 +91,11 @@ class Pgtk::Pool
101
91
  #
102
92
  # More details about +exec_params+, which is called here, you can find
103
93
  # here: https://www.rubydoc.info/gems/pg/0.17.1/PG%2FConnection:exec_params
94
+ #
95
+ # @param [String] query The SQL query with params inside (possibly)
96
+ # @param [Array] args List of arguments
97
+ # @param [Integer] result Should be 0 for text results, 1 for binary
98
+ # @yield [Hash] Rows
104
99
  def exec(query, args = [], result = 0, &block)
105
100
  connect do |c|
106
101
  t = Txn.new(c, @log)
@@ -142,17 +137,33 @@ class Pgtk::Pool
142
137
  @log = log
143
138
  end
144
139
 
140
+ # Exec a single parameterized command.
141
+ # @param [String] query The SQL query with params inside (possibly)
142
+ # @param [Array] args List of arguments
143
+ # @param [Integer] result Should be 0 for text results, 1 for binary
144
+ # @yield [Hash] Rows
145
145
  def exec(query, args = [], result = 0)
146
146
  start = Time.now
147
147
  sql = query.is_a?(Array) ? query.join(' ') : query
148
148
  begin
149
- out = @conn.exec_params(sql, args, result) do |res|
150
- if block_given?
151
- yield res
149
+ out =
150
+ if args.empty?
151
+ @conn.exec(sql) do |res|
152
+ if block_given?
153
+ yield res
154
+ else
155
+ res.each.to_a
156
+ end
157
+ end
152
158
  else
153
- res.each.to_a
159
+ @conn.exec_params(sql, args, result) do |res|
160
+ if block_given?
161
+ yield res
162
+ else
163
+ res.each.to_a
164
+ end
165
+ end
154
166
  end
155
- end
156
167
  rescue StandardError => e
157
168
  @log.error("#{sql}: #{e.message}")
158
169
  raise e
data/lib/pgtk/spy.rb ADDED
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
4
+ # SPDX-License-Identifier: MIT
5
+
6
+ require 'pg'
7
+ require 'loog'
8
+ require_relative '../pgtk'
9
+ require_relative 'wire'
10
+
11
+ # A pool tha spies on another pool.
12
+ # Author:: Yegor Bugayenko (yegor256@gmail.com)
13
+ # Copyright:: Copyright (c) 2019-2025 Yegor Bugayenko
14
+ # License:: MIT
15
+ class Pgtk::Spy
16
+ def initialize(pool, &block)
17
+ @pool = pool
18
+ @block = block
19
+ end
20
+
21
+ def version
22
+ @pool.version
23
+ end
24
+
25
+ def exec(sql, *args)
26
+ @block.call(sql)
27
+ @pool.exec(sql, *args)
28
+ end
29
+
30
+ def transaction
31
+ @block.call('txn')
32
+ @pool.transaction do |t|
33
+ yield Spy.new(t, @block)
34
+ end
35
+ end
36
+ end
data/lib/pgtk/version.rb CHANGED
@@ -1,32 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2019-2024 Yegor Bugayenko
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the 'Software'), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in all
13
- # copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- # SOFTWARE.
3
+ # SPDX-FileCopyrightText: Copyright (c) 2019-2025 Yegor Bugayenko
4
+ # SPDX-License-Identifier: MIT
22
5
 
23
6
  require_relative '../pgtk'
24
7
 
25
8
  # Pgtk version.
26
9
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
27
- # Copyright:: Copyright (c) 2019-2024 Yegor Bugayenko
10
+ # Copyright:: Copyright (c) 2019-2025 Yegor Bugayenko
28
11
  # License:: MIT
29
12
  module Pgtk
30
13
  # Current version of the library.
31
- VERSION = '0.12.0'
14
+ VERSION = '0.13.0'
32
15
  end