fixpoints 0.2.5 → 0.2.6
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/Gemfile.lock +1 -1
- data/README.md +10 -0
- data/lib/fixpoint.rb +5 -5
- data/lib/fixpoint_test_helpers.rb +8 -7
- data/lib/fixpoints/version.rb +1 -1
- data/lib/incremental_fixpoint.rb +3 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a12beeaa3e9a600b6bafeb91a4ed10e769dd24c5e179634e71044f8b91cff4f
|
4
|
+
data.tar.gz: 7156873029ee1e27e9e5487c43fccdd929078eb83de1b67e87abc11e73cc4d08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eaa831ed5ad889e9b1d18071ccf721dfc7973efe1a86f7fc9aea02f5aab13616c68eddff8a50d8a6e07c1ff8ad59a386b7d5f8cdf0ac4f67470ec918d7293ca6
|
7
|
+
data.tar.gz: ab9cfcca94232a87eb09d02a158756eaef69edf92468af02abea478638ad9134523ce4e564c9940f4c62fa5ab8d1b2855725970dd54b527856c3ee3bf06a95ba
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -123,6 +123,16 @@ to specify the database connection to use.
|
|
123
123
|
end
|
124
124
|
```
|
125
125
|
|
126
|
+
**Exclude Tables** If a database contains tables that are irrelevant to your tests, you can use the optional `exclude_tables` parameter
|
127
|
+
to specify a set of tables to exclude from the fixpoint.
|
128
|
+
|
129
|
+
```ruby
|
130
|
+
it 'excludes versions' do
|
131
|
+
store_fixpoint_unless_present :registered_user, exclude_tables: ['versions']
|
132
|
+
# ...
|
133
|
+
end
|
134
|
+
```
|
135
|
+
|
126
136
|
## Limitations & Known issues
|
127
137
|
|
128
138
|
- The records in tables are ordered by their id.
|
data/lib/fixpoint.rb
CHANGED
@@ -45,8 +45,8 @@ class Fixpoint
|
|
45
45
|
end
|
46
46
|
|
47
47
|
# Creates a Fixpoint from the database contents. Empty tables are skipped.
|
48
|
-
def from_database(conn)
|
49
|
-
new(read_database_records(conn))
|
48
|
+
def from_database(conn, exclude_tables: [])
|
49
|
+
new(read_database_records(conn, exclude_tables: exclude_tables))
|
50
50
|
end
|
51
51
|
|
52
52
|
def remove(fixname)
|
@@ -81,11 +81,11 @@ class Fixpoint
|
|
81
81
|
File.join(spec_path, FIXPOINT_FOLDER)
|
82
82
|
end
|
83
83
|
|
84
|
-
def read_database_records(conn)
|
84
|
+
def read_database_records(conn, exclude_tables: [])
|
85
85
|
# adapted from: https://yizeng.me/2017/07/16/generate-rails-test-fixtures-yaml-from-database-dump/
|
86
86
|
tables = conn.tables
|
87
|
-
|
88
|
-
|
87
|
+
excluded_tables = TABLES_TO_SKIP + exclude_tables
|
88
|
+
tables.reject! { |table_name| excluded_tables.include?(table_name) }
|
89
89
|
tables.each_with_object({}) do |table_name, acc|
|
90
90
|
result = conn.select_all("SELECT * FROM #{conn.quote_table_name(table_name)}")
|
91
91
|
next if result.count.zero?
|
@@ -10,16 +10,17 @@ module FixpointTestHelpers
|
|
10
10
|
# The latter is useful if the fixpoint was deleted to accommodate changes to it (see example in class description).
|
11
11
|
#
|
12
12
|
# +tables_to_compare+ can either be +:all+ or a list of table names (e.g. ['users', 'posts'])
|
13
|
+
# +exclude_tables+ a list of tables which should be ignored when storing a fixpoint (e.g. ['versions'])
|
13
14
|
# +ignored_columns+ see Fixnum#records_for_table
|
14
15
|
# +store_fixpoint_and_fail+ when given and the fixpoint does not already exist, a new fixpoint is created an the test will be marked pending/failed
|
15
16
|
# +parent_fixname+ when storing a new fixpoint, use this as parent fixpoint (you can specify `:last_restored` then the last given to restore_fixpoint is used; not thread safe)
|
16
17
|
# ---
|
17
18
|
# If we refactor this to a gem, we should rely on rspec (e.g. use minitest or move comparison logic to Fixpoint class).
|
18
19
|
# Anyhow, we keep it like this for now, because the expectations give much nicer output than the minitest assertions.
|
19
|
-
def compare_fixpoint(fixname, ignored_columns=[:updated_at, :created_at], tables_to_compare: :all, store_fixpoint_and_fail: false, parent_fixname: nil, connection: default_connection)
|
20
|
+
def compare_fixpoint(fixname, ignored_columns=[:updated_at, :created_at], tables_to_compare: :all, exclude_tables: [], store_fixpoint_and_fail: false, parent_fixname: nil, connection: default_connection)
|
20
21
|
if !IncrementalFixpoint.exists?(fixname)
|
21
22
|
if store_fixpoint_and_fail
|
22
|
-
store_fixpoint(fixname, parent_fixname, connection: connection)
|
23
|
+
store_fixpoint(fixname, parent_fixname, connection: connection, exclude_tables: exclude_tables)
|
23
24
|
pending("Fixpoint \"#{fixname}\" did not exist yet. Skipping comparison, but created fixpoint from database. Try re-running the test.")
|
24
25
|
fail
|
25
26
|
else
|
@@ -27,7 +28,7 @@ module FixpointTestHelpers
|
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
30
|
-
database_fp = IncrementalFixpoint.from_database(nil, connection)
|
31
|
+
database_fp = IncrementalFixpoint.from_database(nil, connection, exclude_tables: exclude_tables)
|
31
32
|
fixpoint_fp = IncrementalFixpoint.from_file(fixname)
|
32
33
|
|
33
34
|
tables_to_compare = (database_fp.table_names + fixpoint_fp.table_names).uniq if tables_to_compare == :all
|
@@ -42,15 +43,15 @@ module FixpointTestHelpers
|
|
42
43
|
|
43
44
|
# it is not a good idea to overwrite the fixpoint each time because timestamps may change (which then shows up in version control).
|
44
45
|
# Hence we only provide a method to write to it if it does not exist.
|
45
|
-
def store_fixpoint_unless_present(fixname, parent_fixname = nil, connection: default_connection)
|
46
|
-
store_fixpoint(fixname, parent_fixname, connection: connection) unless IncrementalFixpoint.exists?(fixname)
|
46
|
+
def store_fixpoint_unless_present(fixname, parent_fixname = nil, connection: default_connection, exclude_tables: [])
|
47
|
+
store_fixpoint(fixname, parent_fixname, connection: connection, exclude_tables: exclude_tables) unless IncrementalFixpoint.exists?(fixname)
|
47
48
|
end
|
48
49
|
|
49
50
|
# +parent_fixname+ when given, only the (incremental) changes to the parent are saved
|
50
51
|
# please see store_fixpoint_unless_present for note on why not to use this method
|
51
|
-
def store_fixpoint(fixname, parent_fixname = nil, connection: default_connection)
|
52
|
+
def store_fixpoint(fixname, parent_fixname = nil, connection: default_connection, exclude_tables: [])
|
52
53
|
parent_fixname = @last_restored if parent_fixname == :last_restored
|
53
|
-
IncrementalFixpoint.from_database(parent_fixname, connection).save_to_file(fixname)
|
54
|
+
IncrementalFixpoint.from_database(parent_fixname, connection, exclude_tables: exclude_tables).save_to_file(fixname)
|
54
55
|
end
|
55
56
|
|
56
57
|
private def default_connection
|
data/lib/fixpoints/version.rb
CHANGED
data/lib/incremental_fixpoint.rb
CHANGED
@@ -33,11 +33,11 @@ class IncrementalFixpoint < Fixpoint
|
|
33
33
|
end
|
34
34
|
|
35
35
|
# Creates a Fixpoint from the database contents. Empty tables are skipped.
|
36
|
-
def self.from_database(parent_fixname=nil, conn)
|
37
|
-
return super(conn) if parent_fixname.nil?
|
36
|
+
def self.from_database(parent_fixname=nil, conn, exclude_tables: [])
|
37
|
+
return super(conn, exclude_tables: exclude_tables) if parent_fixname.nil?
|
38
38
|
|
39
39
|
parent = from_file(parent_fixname)
|
40
|
-
changes_in_tables = FixpointDiff.extract_changes(parent.records_in_tables, read_database_records(conn))
|
40
|
+
changes_in_tables = FixpointDiff.extract_changes(parent.records_in_tables, read_database_records(conn, exclude_tables: exclude_tables))
|
41
41
|
new(changes_in_tables, parent_fixname)
|
42
42
|
end
|
43
43
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fixpoints
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Rothe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -80,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
80
|
- !ruby/object:Gem::Version
|
81
81
|
version: '0'
|
82
82
|
requirements: []
|
83
|
-
rubygems_version: 3.1.
|
83
|
+
rubygems_version: 3.1.6
|
84
84
|
signing_key:
|
85
85
|
specification_version: 4
|
86
86
|
summary: Don't discard the database state at the end of your test. Use it!
|