pgtk 0.2.1 → 0.2.2
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/README.md +27 -3
- data/appveyor.yml +3 -3
- data/lib/pgtk/liquibase_task.rb +7 -1
- data/lib/pgtk/pool.rb +41 -3
- data/lib/pgtk/version.rb +1 -1
- data/test/test_liquibase_task.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43d3924569fc077b07d4db33232357d4d761af2cb81ccdad35d80ef7aae042b7
|
4
|
+
data.tar.gz: 02473caa0bc03c9138afda1213cc128819d72f4e464f9589a17e0f1a940f4dd2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a1796c83e25523b9113591ce9edfc4bd2078c23b3338a417cb2519be34a420545dd8b5fffb3d6fc2f6a351b89d3ca566b758efecb3d51513a3a25836ccbb287
|
7
|
+
data.tar.gz: 13f8ef96a5e44c8230fc7cffc7c3e785a8fdc028d7e897c31e0834217ae3f2b037a9feae704ab466f585f83dd8acb28233c5cd44a72dcce10925a2370d804a3e
|
data/README.md
CHANGED
@@ -46,7 +46,7 @@ Pgtk::PgsqlTask.new :pgsql do |t|
|
|
46
46
|
t.user = 'test'
|
47
47
|
t.password = 'test'
|
48
48
|
t.dbname = 'test'
|
49
|
-
t.yaml = 'target/config.yml' # YAML file to be created with connection details
|
49
|
+
t.yaml = 'target/pgsql-config.yml' # YAML file to be created with connection details
|
50
50
|
end
|
51
51
|
```
|
52
52
|
|
@@ -56,7 +56,7 @@ And this too:
|
|
56
56
|
require 'pgtk/liquibase_task'
|
57
57
|
Pgtk::LiquibaseTask.new liquibase: :pgsql do |t|
|
58
58
|
t.master = 'liquibase/master.xml' # Master XML file path
|
59
|
-
t.yaml = 'target/config.yml' # YAML
|
59
|
+
t.yaml = ['target/pgsql-config.yml', 'config.yml'] # YAML files with connection details
|
60
60
|
end
|
61
61
|
```
|
62
62
|
|
@@ -79,7 +79,7 @@ From inside your app you may find this class useful:
|
|
79
79
|
|
80
80
|
```ruby
|
81
81
|
require 'pgtk/pool'
|
82
|
-
yaml = YAML.load_file('
|
82
|
+
yaml = YAML.load_file('config.yml')
|
83
83
|
pgsql = Pgtk::Pool.new(
|
84
84
|
port: yaml['pgsql']['port'],
|
85
85
|
dbname: yaml['pgsql']['dbname'],
|
@@ -102,6 +102,30 @@ pgsql.connect do |c|
|
|
102
102
|
end
|
103
103
|
```
|
104
104
|
|
105
|
+
To make your PostgreSQL database visible in your unit test, I would
|
106
|
+
recommend you create a method `test_pgsql` in your `test__helper.rb` file
|
107
|
+
(which is `required` in all unit tests) and implement it like this:
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
require 'yaml'
|
111
|
+
require 'minitest/autorun'
|
112
|
+
require 'pgtk/pool'
|
113
|
+
module Minitest
|
114
|
+
class Test
|
115
|
+
def test_pgsql
|
116
|
+
config = YAML.load_file('target/pgsql-config.yml')
|
117
|
+
@test_pgsql ||= Pgtk::Pool.new(
|
118
|
+
host: config['pgsql']['host'],
|
119
|
+
port: config['pgsql']['port'],
|
120
|
+
dbname: config['pgsql']['dbname'],
|
121
|
+
user: config['pgsql']['user'],
|
122
|
+
password: config['pgsql']['password']
|
123
|
+
).start
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
```
|
128
|
+
|
105
129
|
Should work. Well, it works in [zold-io/wts.zold.io](https://github.com/zold-io/wts.zold.io)
|
106
130
|
and [yegor256/mailanes](https://github.com/yegor256/mailanes). They both are
|
107
131
|
open source, you can see how they use `pgtk`.
|
data/appveyor.yml
CHANGED
@@ -2,7 +2,7 @@ version: '{build}'
|
|
2
2
|
skip_tags: true
|
3
3
|
clone_depth: 10
|
4
4
|
services:
|
5
|
-
-
|
5
|
+
- postgresql
|
6
6
|
branches:
|
7
7
|
only:
|
8
8
|
- master
|
@@ -15,13 +15,13 @@ install:
|
|
15
15
|
- cmd: git --version
|
16
16
|
- cmd: java -version
|
17
17
|
- cmd: mvn --version
|
18
|
-
- cmd: PATH=C:\Program Files\PostgreSQL\
|
18
|
+
- cmd: PATH=C:\Program Files\PostgreSQL\9.6\bin\;%PATH%
|
19
19
|
- cmd: psql --version
|
20
20
|
build_script:
|
21
21
|
- bundle update
|
22
22
|
- bundle install
|
23
23
|
test_script:
|
24
|
-
- rake
|
24
|
+
- bundle exec rake
|
25
25
|
cache:
|
26
26
|
- C:\Ruby200\bin -> pgtk.gemspec
|
27
27
|
- C:\Ruby200\lib\ruby\gems\2.0.0 -> pgtk.gemspec
|
data/lib/pgtk/liquibase_task.rb
CHANGED
@@ -56,7 +56,13 @@ class Pgtk::LiquibaseTask < Rake::TaskLib
|
|
56
56
|
def run
|
57
57
|
raise "Option 'master' is mandatory" unless @master
|
58
58
|
raise "Option 'yaml' is mandatory" unless @yaml
|
59
|
-
yml = YAML.load_file(
|
59
|
+
yml = YAML.load_file(
|
60
|
+
if @yaml.is_a?(Array)
|
61
|
+
@yaml.drop_while { |f| !File.exist?(f) }.first
|
62
|
+
else
|
63
|
+
@yaml
|
64
|
+
end
|
65
|
+
)
|
60
66
|
raise "YAML at #{yaml} is missing 'pgsql' section" unless yml['pgsql']
|
61
67
|
pom = File.expand_path(File.join(__dir__, '../../resources/pom.xml'))
|
62
68
|
raise "Liquibase master is absent at #{@master}" unless File.exist?(@master)
|
data/lib/pgtk/pool.rb
CHANGED
@@ -39,8 +39,13 @@ class Pgtk::Pool
|
|
39
39
|
@pool = Queue.new
|
40
40
|
end
|
41
41
|
|
42
|
-
# Start it with a fixed number of connections.
|
43
|
-
|
42
|
+
# Start it with a fixed number of connections. The amount of connections
|
43
|
+
# is specified in +max+ argument and should be big enough to handle
|
44
|
+
# the amount of parallel connections you may have to the database. However,
|
45
|
+
# keep in mind that not all servers will allow you to have many connections
|
46
|
+
# open at the same time. For example, Heroku free PostgreSQL database
|
47
|
+
# allows only one connection open.
|
48
|
+
def start(max = 8)
|
44
49
|
max.times do
|
45
50
|
@pool << PG.connect(
|
46
51
|
dbname: @dbname, host: @host, port: @port,
|
@@ -50,7 +55,40 @@ class Pgtk::Pool
|
|
50
55
|
self
|
51
56
|
end
|
52
57
|
|
53
|
-
# Make a query and return the result as an array of hashes.
|
58
|
+
# Make a query and return the result as an array of hashes. For example,
|
59
|
+
# in order to fetch the list of all books belonging to the user:
|
60
|
+
#
|
61
|
+
# books = pool.exec('SELECT * FROM book WHERE owner = $1', ['yegor256'])
|
62
|
+
# books.each do |row|
|
63
|
+
# puts 'ID: ' + row['id'].to_i
|
64
|
+
# puts 'Created: ' + Time.parse(row['created'])
|
65
|
+
# puts 'Title: ' + row['title']
|
66
|
+
# end
|
67
|
+
#
|
68
|
+
# All values in the retrieved hash are strings. No matter what types of
|
69
|
+
# of data you have in the database, you get strings here. It's your job
|
70
|
+
# to convert them to the type you need.
|
71
|
+
#
|
72
|
+
# In order to insert a new row (pay attention to the +RETURNING+ clause
|
73
|
+
# at the end of the SQL query):
|
74
|
+
#
|
75
|
+
# id = pool.exec(
|
76
|
+
# 'INSERT INTO book (owner, title) VALUES ($1, $2) RETURNING id',
|
77
|
+
# ['yegor256', 'Elegant Objects']
|
78
|
+
# )[0]['id'].to_i
|
79
|
+
#
|
80
|
+
# You can also pass a block to this method, if you want to get an instance
|
81
|
+
# of +PG::Result+ instead of an array of hashes:
|
82
|
+
#
|
83
|
+
# pool.exec('SELECT * FROM book WHERE owner = $1', ['yegor256']) do |res|
|
84
|
+
# res.each do |row|
|
85
|
+
# puts 'ID: ' + row['id'].to_i
|
86
|
+
# puts 'Title: ' + row['title']
|
87
|
+
# end
|
88
|
+
# end
|
89
|
+
#
|
90
|
+
# More details about +exec_params+, which is called here, you can find
|
91
|
+
# here: https://www.rubydoc.info/gems/pg/0.17.1/PG%2FConnection:exec_params
|
54
92
|
def exec(query, args = [], result = 0)
|
55
93
|
connect do |c|
|
56
94
|
c.exec_params(query, args, result) do |res|
|
data/lib/pgtk/version.rb
CHANGED
data/test/test_liquibase_task.rb
CHANGED
@@ -45,7 +45,7 @@ class TestLiquibaseTask < Minitest::Test
|
|
45
45
|
Rake::Task['pgsql2'].invoke
|
46
46
|
Pgtk::LiquibaseTask.new(:liquibase2) do |t|
|
47
47
|
t.master = File.join(__dir__, '../test-resources/master.xml')
|
48
|
-
t.yaml = File.join(dir, 'cfg.yml')
|
48
|
+
t.yaml = ['file-is-absent', File.join(dir, 'cfg.yml')]
|
49
49
|
t.quiet = true
|
50
50
|
end
|
51
51
|
Rake::Task['liquibase2'].invoke
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pgtk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backtrace
|