postgres-framework 0.1.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.
@@ -0,0 +1,12 @@
1
+ -- Automatically update date columns
2
+ CREATE OR REPLACE FUNCTION framework.trf_created_at_and_updated_at() RETURNS TRIGGER AS $$
3
+ BEGIN
4
+ IF (TG_OP = 'INSERT') THEN
5
+ NEW.created_at = now();
6
+ END IF;
7
+
8
+ NEW.updated_at = now();
9
+
10
+ RETURN NEW;
11
+ END;
12
+ $$ LANGUAGE plpgsql;
@@ -0,0 +1 @@
1
+ CREATE SCHEMA IF NOT EXISTS framework;
@@ -0,0 +1,24 @@
1
+ CREATE OR REPLACE FUNCTION unit_tests.array_distinct_test()
2
+ RETURNS test_result AS $$
3
+ DECLARE arr text[];
4
+ DECLARE message test_result;
5
+ BEGIN
6
+ SELECT framework.array_distinct(ARRAY['foo', NULL, 'bar', 'foo', 'ok', 'bar'], TRUE) INTO arr;
7
+
8
+ IF arr <> ARRAY['bar', 'foo', 'ok'] THEN
9
+ SELECT assert.fail('Unexpected array value') INTO message;
10
+ RETURN message;
11
+ END IF;
12
+
13
+ SELECT framework.array_distinct(ARRAY[]::TEXT[], TRUE) INTO arr;
14
+ SELECT framework.array_distinct(ARRAY[]::INTEGER[], TRUE, ARRAY[]::INTEGER[]) INTO arr;
15
+
16
+ IF arr IS NULL THEN
17
+ SELECT assert.fail('Expected empty array, got null') INTO message;
18
+ RETURN message;
19
+ END IF;
20
+
21
+ SELECT assert.ok('framework.array_distinct is OK') INTO message;
22
+ RETURN message;
23
+ END;
24
+ $$ LANGUAGE plpgsql;
@@ -0,0 +1,23 @@
1
+ CREATE OR REPLACE FUNCTION unit_tests.array_from_json_test()
2
+ RETURNS test_result AS $$
3
+ DECLARE arr text[];
4
+ DECLARE message test_result;
5
+ BEGIN
6
+ SELECT framework.array_from_json('["foo", "bar"]') INTO arr;
7
+
8
+ IF arr <> ARRAY['foo', 'bar'] THEN
9
+ SELECT assert.fail('Expected array: ["foo", "bar"]') INTO message;
10
+ RETURN message;
11
+ END IF;
12
+
13
+ SELECT framework.array_from_json('[]') INTO arr;
14
+
15
+ IF arr <> ARRAY[]::TEXT[] THEN
16
+ SELECT assert.fail('Expected empty array, got null') INTO message;
17
+ RETURN message;
18
+ END IF;
19
+
20
+ SELECT assert.ok('framework.array_distinct is OK') INTO message;
21
+ RETURN message;
22
+ END;
23
+ $$ LANGUAGE plpgsql;
@@ -0,0 +1,75 @@
1
+ CREATE OR REPLACE FUNCTION unit_tests.check_http_url_test()
2
+ RETURNS test_result AS $$
3
+ DECLARE message test_result;
4
+ DECLARE result boolean;
5
+ BEGIN
6
+ SELECT check_http_url INTO result FROM framework.check_http_url('localhost');
7
+ IF result = TRUE THEN
8
+ SELECT assert.fail('Value "localhost" is invalid url.') INTO message;
9
+ RETURN message;
10
+ END IF;
11
+
12
+ SELECT check_http_url INTO result FROM framework.check_http_url('http://');
13
+ IF result = TRUE THEN
14
+ SELECT assert.fail('Value "http://" is invalid url.') INTO message;
15
+ RETURN message;
16
+ END IF;
17
+
18
+ SELECT check_http_url INTO result FROM framework.check_http_url('google.pl');
19
+ IF result = TRUE THEN
20
+ SELECT assert.fail('Value "google.pl" is invalid url.') INTO message;
21
+ RETURN message;
22
+ END IF;
23
+
24
+ SELECT check_http_url INTO result FROM framework.check_http_url('www.google.pl');
25
+ IF result = TRUE THEN
26
+ SELECT assert.fail('Value "www.google.pl" is invalid url.') INTO message;
27
+ RETURN message;
28
+ END IF;
29
+
30
+ SELECT check_http_url INTO result FROM framework.check_http_url('//google.pl');
31
+ IF result = TRUE THEN
32
+ SELECT assert.fail('Value "//google.pl" is invalid url.') INTO message;
33
+ RETURN message;
34
+ END IF;
35
+
36
+ SELECT check_http_url INTO result FROM framework.check_http_url('http//google.pl');
37
+ IF result = TRUE THEN
38
+ SELECT assert.fail('Value "http//google.pl" is invalid url.') INTO message;
39
+ RETURN message;
40
+ END IF;
41
+
42
+ SELECT check_http_url INTO result FROM framework.check_http_url('https://google.pl');
43
+ IF result = FALSE THEN
44
+ SELECT assert.fail('Value "https://google.pl" is valid url.') INTO message;
45
+ RETURN message;
46
+ END IF;
47
+
48
+ SELECT check_http_url INTO result FROM framework.check_http_url('http://www.google.pl');
49
+ IF result = FALSE THEN
50
+ SELECT assert.fail('Value "http://www.google.pl" is valid url.') INTO message;
51
+ RETURN message;
52
+ END IF;
53
+
54
+ SELECT check_http_url INTO result FROM framework.check_http_url('abcdefg://www.google.pl');
55
+ IF result = TRUE THEN
56
+ SELECT assert.fail('Value "abcdefg://www.google.pl" is invalid url.') INTO message;
57
+ RETURN message;
58
+ END IF;
59
+
60
+ SELECT check_http_url INTO result FROM framework.check_http_url('abcdefg://google.pl');
61
+ IF result = TRUE THEN
62
+ SELECT assert.fail('Value "abcdefg://google.pl" is invalid url.') INTO message;
63
+ RETURN message;
64
+ END IF;
65
+
66
+ SELECT check_http_url INTO result FROM framework.check_http_url('http://localhost/test/test?gfdgfdg#ok');
67
+ IF result = FALSE THEN
68
+ SELECT assert.fail('Value "http://localhost/test/test?gfdgfdg#ok" is valid url.') INTO message;
69
+ RETURN message;
70
+ END IF;
71
+
72
+ SELECT assert.ok('framework.check_http_url is OK') INTO message;
73
+ RETURN message;
74
+ END;
75
+ $$ LANGUAGE plpgsql;
@@ -0,0 +1,81 @@
1
+ CREATE OR REPLACE FUNCTION unit_tests.check_url_test()
2
+ RETURNS test_result AS $$
3
+ DECLARE message test_result;
4
+ DECLARE result boolean;
5
+ BEGIN
6
+ SELECT check_url INTO result FROM framework.check_url('localhost');
7
+ IF result = TRUE THEN
8
+ SELECT assert.fail('Value "localhost" is invalid url.') INTO message;
9
+ RETURN message;
10
+ END IF;
11
+
12
+ SELECT check_url INTO result FROM framework.check_url('http://');
13
+ IF result = TRUE THEN
14
+ SELECT assert.fail('Value "http://" is invalid url.') INTO message;
15
+ RETURN message;
16
+ END IF;
17
+
18
+ SELECT check_url INTO result FROM framework.check_url('google.pl');
19
+ IF result = TRUE THEN
20
+ SELECT assert.fail('Value "google.pl" is invalid url.') INTO message;
21
+ RETURN message;
22
+ END IF;
23
+
24
+ SELECT check_url INTO result FROM framework.check_url('www.google.pl');
25
+ IF result = TRUE THEN
26
+ SELECT assert.fail('Value "www.google.pl" is invalid url.') INTO message;
27
+ RETURN message;
28
+ END IF;
29
+
30
+ SELECT check_url INTO result FROM framework.check_url('//google.pl');
31
+ IF result = TRUE THEN
32
+ SELECT assert.fail('Value "//google.pl" is invalid url.') INTO message;
33
+ RETURN message;
34
+ END IF;
35
+
36
+ SELECT check_url INTO result FROM framework.check_url('http//google.pl');
37
+ IF result = TRUE THEN
38
+ SELECT assert.fail('Value "http//google.pl" is invalid url.') INTO message;
39
+ RETURN message;
40
+ END IF;
41
+
42
+ SELECT check_url INTO result FROM framework.check_url('https://google.pl');
43
+ IF result = FALSE THEN
44
+ SELECT assert.fail('Value "https://google.pl" is valid url.') INTO message;
45
+ RETURN message;
46
+ END IF;
47
+
48
+ SELECT check_url INTO result FROM framework.check_url('http://www.google.pl');
49
+ IF result = FALSE THEN
50
+ SELECT assert.fail('Value "http://www.google.pl" is valid url.') INTO message;
51
+ RETURN message;
52
+ END IF;
53
+
54
+ SELECT check_url INTO result FROM framework.check_url('abcdefg://www.google.pl');
55
+ IF result = FALSE THEN
56
+ SELECT assert.fail('Value "abcdefg://www.google.pl" is valid url.') INTO message;
57
+ RETURN message;
58
+ END IF;
59
+
60
+ SELECT check_url INTO result FROM framework.check_url('abcdefg://google.pl');
61
+ IF result = FALSE THEN
62
+ SELECT assert.fail('Value "abcdefg://google.pl" is valid url.') INTO message;
63
+ RETURN message;
64
+ END IF;
65
+
66
+ SELECT check_url INTO result FROM framework.check_url('aąbcćdeęfg://aaałśóŋŋŋ.ąę');
67
+ IF result = FALSE THEN
68
+ SELECT assert.fail('Value "aąbcćdeęfg://aaałśóŋŋŋ.ąę" is valid url.') INTO message;
69
+ RETURN message;
70
+ END IF;
71
+
72
+ SELECT check_url INTO result FROM framework.check_url('http://localhost/test/test?gfdgfdg#ok');
73
+ IF result = FALSE THEN
74
+ SELECT assert.fail('Value "http://localhost/test/test?gfdgfdg#ok" is valid url.') INTO message;
75
+ RETURN message;
76
+ END IF;
77
+
78
+ SELECT assert.ok('framework.check_url is OK') INTO message;
79
+ RETURN message;
80
+ END;
81
+ $$ LANGUAGE plpgsql;
@@ -0,0 +1,59 @@
1
+ CREATE OR REPLACE FUNCTION unit_tests.create_unique_name_test()
2
+ RETURNS test_result AS $$
3
+ DECLARE message test_result;
4
+ DECLARE result TEXT;
5
+ DECLARE table_name TEXT = 'unit_tests.temp_create_unique_name';
6
+ DECLARE col_name TEXT = 'name';
7
+ DECLARE col_unique_name TEXT = 'unique_name';
8
+ BEGIN
9
+ EXECUTE format('DROP TABLE IF EXISTS %s', table_name);
10
+ EXECUTE format('CREATE TABLE IF NOT EXISTS %s (%s TEXT, %s TEXT)', table_name, col_name, col_unique_name);
11
+
12
+ SELECT create_unique_name INTO result FROM framework.create_unique_name('test', table_name, col_name, col_unique_name);
13
+ IF result <> 'test' THEN
14
+ SELECT assert.fail('Expected "test" value is "' || result || '"') INTO message;
15
+ EXECUTE format('DROP TABLE IF EXISTS %s', table_name);
16
+ RETURN message;
17
+ END IF;
18
+
19
+ EXECUTE format('INSERT INTO %s (%s, %s) VALUES ($1, $2);', table_name, col_name, col_unique_name)
20
+ USING 'test', 'test';
21
+ SELECT create_unique_name INTO result FROM framework.create_unique_name('test', table_name, col_name, col_unique_name);
22
+ IF result <> 'test-2' THEN
23
+ SELECT assert.fail('Expected "test-2" value is "' || result || '"') INTO message;
24
+ EXECUTE format('DROP TABLE IF EXISTS %s', table_name);
25
+ RETURN message;
26
+ END IF;
27
+
28
+ EXECUTE format('INSERT INTO %s (%s, %s) VALUES ($1, $2);', table_name, col_name, col_unique_name)
29
+ USING 'test', 'test-2';
30
+ SELECT create_unique_name INTO result FROM framework.create_unique_name('test', table_name, col_name, col_unique_name);
31
+ IF result <> 'test-3' THEN
32
+ SELECT assert.fail('Expected "test-3" value is "' || result || '"') INTO message;
33
+ EXECUTE format('DROP TABLE IF EXISTS %s', table_name);
34
+ RETURN message;
35
+ END IF;
36
+
37
+ EXECUTE format('INSERT INTO %s (%s, %s) VALUES ($1, $2);', table_name, col_name, col_unique_name)
38
+ USING 'test', 'test-3';
39
+ SELECT create_unique_name INTO result FROM framework.create_unique_name('test', table_name, col_name, col_unique_name);
40
+ IF result <> 'test-4' THEN
41
+ SELECT assert.fail('Expected "test-4" value is "' || result || '"') INTO message;
42
+ EXECUTE format('DROP TABLE IF EXISTS %s', table_name);
43
+ RETURN message;
44
+ END IF;
45
+
46
+ EXECUTE format('INSERT INTO %s (%s, %s) VALUES ($1, $2);', table_name, col_name, col_unique_name)
47
+ USING 'test-2', 'test-2';
48
+ SELECT create_unique_name INTO result FROM framework.create_unique_name('test-2', table_name, col_name, col_unique_name);
49
+ IF result <> 'test-2-3' THEN
50
+ SELECT assert.fail('Expected "test-2-3" value is "' || result || '"') INTO message;
51
+ EXECUTE format('DROP TABLE IF EXISTS %s', table_name);
52
+ RETURN message;
53
+ END IF;
54
+
55
+ EXECUTE format('DROP TABLE IF EXISTS %s', table_name);
56
+ SELECT assert.ok('framework.create_unique_name is OK') INTO message;
57
+ RETURN message;
58
+ END;
59
+ $$ LANGUAGE plpgsql;
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: postgres-framework
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Rafał Mikołajun
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-06-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: schema-evolution-manager
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.34
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.34
27
+ description: It's simple framework for PostgreSQL database with unit tests and versioning.
28
+ email:
29
+ executables:
30
+ - sem-add-safe
31
+ - sem-add-framework
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - ".gitmodules"
36
+ - LICENSE
37
+ - README.md
38
+ - bin/sem-add-framework
39
+ - bin/sem-add-safe
40
+ - plpgunit/frontend/readme.txt
41
+ - plpgunit/install/0.uninstall-unit-test.sql
42
+ - plpgunit/install/1.install-unit-test.sql
43
+ - plpgunit/license.txt
44
+ - plpgunit/readme.md
45
+ - scripts/20170608-212033.sql
46
+ - scripts/20170608-212040.sql
47
+ - scripts/20170608-212341.sql
48
+ - scripts/20170608-212348.sql
49
+ - scripts/20170608-212359.sql
50
+ - scripts/20170608-212413.sql
51
+ - scripts/20170608-212430.sql
52
+ - scripts/20170608-212759.sql
53
+ - scripts/20170608-212803.sql
54
+ - scripts/20170608-212813.sql
55
+ - scripts/20170608-212819.sql
56
+ - scripts/20170608-212825.sql
57
+ - scripts/20170609-183531.sql
58
+ - src/functions/array_distinct.sql
59
+ - src/functions/array_from_json.sql
60
+ - src/functions/check_http_url.sql
61
+ - src/functions/check_url.sql
62
+ - src/functions/create_unique_name.sql
63
+ - src/functions/trf_created_at_and_updated_at.sql
64
+ - src/schema_create.sql
65
+ - tests/functions/array_distinct.sql
66
+ - tests/functions/array_from_json.sql
67
+ - tests/functions/check_http_url.sql
68
+ - tests/functions/check_url.sql
69
+ - tests/functions/create_unique_name.sql
70
+ homepage: https://github.com/mikoweb/postgres-framework
71
+ licenses:
72
+ - BSD-4-Clause
73
+ metadata: {}
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubyforge_project:
90
+ rubygems_version: 2.6.11
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: PostgreSQL Framework
94
+ test_files: []