postspec 0.1.1 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46c5d89777324cedb5b8468b0c33806b45dd908b6dd7ce839bd9d3290ad9d4a0
4
- data.tar.gz: 927fb7974ae6a9f7063e0b9a90e94dab313860c2e367d1b20f73e6afef645193
3
+ metadata.gz: 39ed181749e41623ce7791415874644656c2b44fe4a57db2241ba1dcb136cd35
4
+ data.tar.gz: 65c8afdda77cbc727159da796a04efa1d1b6134ca5ce198af30548cbdd2f3693
5
5
  SHA512:
6
- metadata.gz: 7fb4a38a74f0af6c527605789d127243b3624cf7f7073981a69bef007087809093c0bb273f4859f80b95aa3228da061b23674ca0d012920607b1bcf7b9e8159f
7
- data.tar.gz: 23df58f3ba1eb8a48af8bed88ae3fedf8e151c5cf453fa5b4c24f211faaec732480c66c5560ec3e95832baeef379a7c4621bec6636033dc93091152b70e7bcf2
6
+ metadata.gz: ee46e5636f9e632c126142a87bc796cbf19c29896bcb4a576b69776a50020ef30919682becece4242c97dd95897ae0ed8365fc633cd62b3416d0ade8a362a64f
7
+ data.tar.gz: 66d90244f8e1ac9a566112ab5e523e9804a3faf441e7a82efa64edc29b11072f4d25127147ba08d9bb330ccba6049051865dc78bd6681c43d623c49a6c814d68
data/exe/postspec CHANGED
@@ -11,6 +11,11 @@ SPEC = "
11
11
 
12
12
  -r,reflections=EFILE @ Reflections file
13
13
 
14
+ +i,ignore=SCHEMA
15
+ Exclude the given schemas from the type model. This is required for schemas
16
+ that doesn't follow PgGraph's naming convention when there is no
17
+ reflections file
18
+
14
19
  -- DATABASE"
15
20
 
16
21
  def timeit(label = nil, &block)
@@ -33,7 +38,7 @@ puts "Reading and writing the given database"
33
38
  indent {
34
39
  conn = PgConn.new(database)
35
40
  meta = timeit("Meta") { PgMeta.new(conn) }
36
- type = timeit("Type") { PgGraph::Type.new(meta, opts.reflections) }
41
+ type = timeit("Type") { PgGraph::Type.new(meta, opts.reflections, ignore: opts.ignore) }
37
42
  data = timeit("Read data") { PgGraph::Data.new(type, conn) }
38
43
  load_data = timeit("Write data") { data.write(conn) }
39
44
  }
@@ -1,38 +1,43 @@
1
1
  # Used to initialize postspec from spec/spec_helper.rb or spec/postspec_helper.rb
2
2
  #
3
3
  module Postspec
4
- Config = Struct.new(:database, :mode, :reflections, :anchors, :fail_fast)
4
+ Config = Struct.new(:database, :mode, :reflections, :anchors, :fail_fast, :ignore)
5
5
 
6
6
  @database = nil
7
7
  @mode = nil
8
8
  @reflections = nil
9
9
  @anchors = nil
10
10
  @fail_fast = nil
11
+ @ignore = nil
11
12
 
12
13
  DEFAULT_MODE = :empty
13
14
  DEFAULT_FAIL_FAST = true
15
+ DEFAULT_IGNORE = []
14
16
 
15
17
  def self.database() @database end
16
18
  def self.mode() @mode end
17
19
  def self.reflections() @reflections end
18
20
  def self.anchors() @anchors end
19
21
  def self.fail_fast() @fail_fast end
22
+ def self.ignore() @ignore end
20
23
 
21
24
  def self.configure(&block)
22
- config = Config.new(@database, DEFAULT_MODE, nil, nil, DEFAULT_FAIL_FAST)
25
+ config = Config.new(@database, DEFAULT_MODE, nil, nil, DEFAULT_FAIL_FAST, DEFAULT_IGNORE)
23
26
  yield(config)
24
27
  @database = config.database
25
28
  @mode = config.mode || DEFAULT_MODE
26
29
  @reflections = config.reflections
27
30
  @anchors = config.anchors
28
31
  @fail_fast = config.fail_fast || DEFAULT_FAIL_FAST
32
+ @ignore = config.ignore || DEFAULT_IGNORE # FIXME: Why not rely on Config defaults?
29
33
  self
30
34
  end
31
35
 
32
36
  def self.postspec()
33
37
  !@database.nil? or raise Error, "Database unspecified"
34
38
  @postspec ||= Postspec.new(
35
- PgConn.new(@database), mode: mode, reflector: @reflections, anchors: @anchors, fail: @fail_fast)
39
+ PgConn.new(@database),
40
+ mode: mode, reflector: @reflections, anchors: @anchors, fail: @fail_fast, ignore: @ignore)
36
41
  end
37
42
  end
38
43
 
@@ -11,8 +11,9 @@ module Postspec
11
11
  end
12
12
 
13
13
  def table_sequence_ids(all: false)
14
+ ignore_list = "'" + (postspec.ignore + %w(prick)).join("', '") + "'"
14
15
  conn.map \
15
- "select table_uid, record_id from postspec.table_sequence_ids()" +
16
+ "select table_uid, record_id from postspec.table_sequence_ids(array[#{ignore_list}]::varchar[])" +
16
17
  (all ? "" : " where record_id is not null")
17
18
  end
18
19
 
@@ -53,7 +54,7 @@ module Postspec
53
54
  conn.exist? "select 1 from pg_namespace where nspname = 'postspec'"
54
55
  end
55
56
 
56
- # Removes excess data and meta data, and resets sequences. It doens't change any triggers
57
+ # Removes excess data and meta data, and resets sequences. It doesn't change any triggers
57
58
  def clean
58
59
  # puts "Environment#clean"
59
60
  @uids = {}
@@ -1,3 +1,3 @@
1
1
  module Postspec
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/postspec.rb CHANGED
@@ -40,6 +40,9 @@ module Postspec
40
40
  # the test run will terminate immediately. Default true
41
41
  attr_reader :fail
42
42
 
43
+ # List of ignored schemas
44
+ attr_reader :ignore
45
+
43
46
  # State
44
47
  attr_reader :state
45
48
 
@@ -65,13 +68,13 @@ module Postspec
65
68
  # TODO: PgMeta object
66
69
  #
67
70
  # +mode+ can be one of :seed, :empty (TODO :reseed, :keep)
68
- def initialize(conn, reflector: nil, mode: :empty, anchors: [], fail: true)
69
- # puts "Postspec#initialize"
71
+ def initialize(conn, reflector: nil, mode: :empty, anchors: [], fail: true, ignore: [])
70
72
  constrain conn, PgConn
71
73
  constrain reflector, NilClass, String, PgGraph::Reflector
72
74
  constrain mode, lambda { |m| [:empty, :seed].include?(m) }
73
75
  constrain anchors, [Hash], NilClass
74
76
  constrain fail, TrueClass, FalseClass
77
+ constrain ignore, [String]
75
78
 
76
79
  @conn = conn
77
80
  @meta = PgMeta.new(@conn)
@@ -82,9 +85,10 @@ module Postspec
82
85
  has_postspec = @meta.schemas.key?("postspec")
83
86
  !has_postspec or (@meta.schemas["postspec"].hidden = true)
84
87
 
85
- @type = PgGraph::Type.new(@meta, reflector, ignore: ["prick"])
88
+ @type = PgGraph::Type.new(@meta, reflector, ignore: ["prick"] + ignore)
86
89
  @render = Render.new(self)
87
90
  @tables = type.schemas.map(&:tables).flatten
91
+ @ignore = ignore
88
92
  @fail = fail
89
93
  @failed = false
90
94
  @success = true
@@ -217,7 +221,6 @@ module Postspec
217
221
  end
218
222
 
219
223
  def use(rspec, *files)
220
-
221
224
  # Closure variables
222
225
  this = self
223
226
  search_path = self.search_path
@@ -7,11 +7,14 @@ set search_path to postspec;
7
7
  -- Return a map from table UID to last value of sequence. All user tables are
8
8
  -- included but tables without sequences (subtables) have last value set to
9
9
  -- null
10
- create or replace function table_sequence_ids() returns table(table_uid text, record_id bigint) as $$
10
+ create or replace function table_sequence_ids(ignore_schemas varchar[])
11
+ returns table(table_uid text, record_id bigint)
12
+ as $$
11
13
  declare
12
14
  name varchar(255);
13
15
  tuple record;
14
16
  begin
17
+ ignore_schemas := ignore_schemas || array['information_schema', 'postspec']::varchar[];
15
18
  for tuple in
16
19
  select tc.relnamespace::regnamespace::text || '.' || tc.relname as table_uid,
17
20
  s.relnamespace::regnamespace::text || '.' || s.relname as sequence_uid
@@ -27,8 +30,8 @@ create or replace function table_sequence_ids() returns table(table_uid text, re
27
30
  and coalesce(sc.relnamespace::regnamespace::text != 'postspec', true)
28
31
  ) s on s.refobjid = tc.oid
29
32
  where tc.relkind = 'r'
30
- and tc.relnamespace::regnamespace::text not like 'pg_%'
31
- and tc.relnamespace::regnamespace::text not in ('information_schema', 'postspec', 'prick')
33
+ and tc.relnamespace::regnamespace::text not like 'pg_%'
34
+ and tc.relnamespace::regnamespace::text != all(ignore_schemas)
32
35
  loop
33
36
  if tuple.sequence_uid is null then
34
37
  table_uid := tuple.table_uid;
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: postspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-24 00:00:00.000000000 Z
11
+ date: 2022-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-inflector