tdc 1.3 → 1.4
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/CHANGELOG.md +10 -0
- data/lib/tdc/definition_resolvers/definition_resolver.rb +11 -1
- data/lib/tdc/generators/definition_resolvable.rb +1 -0
- data/lib/tdc/generators/generation_context.rb +12 -0
- data/lib/tdc/generators/standard_generator.rb +30 -1
- data/lib/tdc/version.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: 96f4dcb68a0b66da5d24ceb550ea17484044c4489dbc898f72b76529287b9d8a
|
|
4
|
+
data.tar.gz: b56e406533429d735cce8c26c338b111c66965d8341cd744d672d9ff8bc642d1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cb7c52792c80baac6651a2fa434cebd9a1331cd00a41350f34409d7d083dbf21aaf40717006ed72012be7b2cd07055eca0b0bf5784d0431efb52bc7b4b5cdd70
|
|
7
|
+
data.tar.gz: 6e761091a8cb869f160d28e652563fa88c8b5de959fef37f4f2a60aaadbfc9e4beae1323aa851c714422de05f73888c6730ec86079a50ee1e44bc8e9d883b3a1
|
data/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.4] - 2026-04-04
|
|
10
|
+
|
|
11
|
+
#### New Features
|
|
12
|
+
|
|
13
|
+
- Update-or-create support in `StandardGenerator`: when an extension row's tag matches a previously created
|
|
14
|
+
record, the generator routes to `update_instance` instead of `generate_instance`
|
|
15
|
+
- `GenerationContext` tracks updating state via `with_updating` / `updating?`
|
|
16
|
+
- `DefinitionResolver` exposes `updating?` via generation context so subclass resolvers can skip missing keys
|
|
17
|
+
when updating
|
|
18
|
+
|
|
9
19
|
## [1.3] - 2025-10-25
|
|
10
20
|
|
|
11
21
|
- Support Ruby 3.4
|
|
@@ -6,7 +6,7 @@ module Tdc
|
|
|
6
6
|
# Base class for any definition resolver.
|
|
7
7
|
#
|
|
8
8
|
class DefinitionResolver
|
|
9
|
-
attr_reader :current_catalog
|
|
9
|
+
attr_reader :current_catalog, :generation_context
|
|
10
10
|
|
|
11
11
|
def configure_current_catalog(current_catalog)
|
|
12
12
|
@current_catalog = current_catalog
|
|
@@ -14,6 +14,16 @@ module Tdc
|
|
|
14
14
|
self
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
def configure_generation_context(generation_context)
|
|
18
|
+
@generation_context = generation_context
|
|
19
|
+
|
|
20
|
+
self
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def updating?
|
|
24
|
+
generation_context&.updating? == true
|
|
25
|
+
end
|
|
26
|
+
|
|
17
27
|
def resolve(_instance_definition)
|
|
18
28
|
raise Tdc::MissingOverrideError, "Implement the 'resolve' method"
|
|
19
29
|
end
|
|
@@ -42,6 +42,7 @@ module Tdc
|
|
|
42
42
|
def run_definition_resolvers(instance_definition)
|
|
43
43
|
_definition_resolvers.each do |definition_resolver|
|
|
44
44
|
definition_resolver.configure_current_catalog(current_catalog)
|
|
45
|
+
definition_resolver.configure_generation_context(generation_context)
|
|
45
46
|
|
|
46
47
|
definition_resolver.resolve(instance_definition)
|
|
47
48
|
end
|
|
@@ -11,6 +11,18 @@ module Tdc
|
|
|
11
11
|
def initialize(current_catalog:, data_definition:)
|
|
12
12
|
@current_catalog = current_catalog
|
|
13
13
|
@data_definition = data_definition
|
|
14
|
+
@updating = false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def updating?
|
|
18
|
+
@updating
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def with_updating
|
|
22
|
+
@updating = true
|
|
23
|
+
yield
|
|
24
|
+
ensure
|
|
25
|
+
@updating = false
|
|
14
26
|
end
|
|
15
27
|
end
|
|
16
28
|
end
|
|
@@ -20,7 +20,13 @@ module Tdc
|
|
|
20
20
|
# Delete the tag so that the models do not need to filter it out.
|
|
21
21
|
tag = instance_definition.delete("tag")
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
existing_record = find_existing_record(tag, catalog_entries)
|
|
24
|
+
|
|
25
|
+
if existing_record
|
|
26
|
+
generated = run_resolvers_and_update_instance(existing_record)
|
|
27
|
+
else
|
|
28
|
+
generated = run_resolvers_and_generate_instance
|
|
29
|
+
end
|
|
24
30
|
|
|
25
31
|
# Add generated instance to the catalog entries whenever a tag provided.
|
|
26
32
|
catalog_entries.add_catalog_entry(tag, generated) if tag
|
|
@@ -35,6 +41,15 @@ module Tdc
|
|
|
35
41
|
generate_instance
|
|
36
42
|
end
|
|
37
43
|
|
|
44
|
+
def run_resolvers_and_update_instance(existing_record)
|
|
45
|
+
generation_context.with_updating do
|
|
46
|
+
run_extended_attribute_interpreters(instance_definition)
|
|
47
|
+
run_definition_resolvers(instance_definition)
|
|
48
|
+
|
|
49
|
+
update_instance(existing_record)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
38
53
|
#
|
|
39
54
|
# Hook method: subclasses are expected to define how to generate a model instance.
|
|
40
55
|
#
|
|
@@ -42,6 +57,14 @@ module Tdc
|
|
|
42
57
|
raise Tdc::MissingOverrideError, "Implement the 'generate_instance' method"
|
|
43
58
|
end
|
|
44
59
|
|
|
60
|
+
#
|
|
61
|
+
# Hook method: subclasses may override to customize update behavior for existing records.
|
|
62
|
+
#
|
|
63
|
+
def update_instance(existing_record)
|
|
64
|
+
existing_record.update!(instance_definition)
|
|
65
|
+
existing_record
|
|
66
|
+
end
|
|
67
|
+
|
|
45
68
|
#
|
|
46
69
|
# Hook method: subclasses may include the DefinitionResolvable concern to override.
|
|
47
70
|
#
|
|
@@ -51,6 +74,12 @@ module Tdc
|
|
|
51
74
|
|
|
52
75
|
private
|
|
53
76
|
|
|
77
|
+
def find_existing_record(tag, catalog_entries)
|
|
78
|
+
return unless tag
|
|
79
|
+
|
|
80
|
+
catalog_entries.respond_to?(tag) ? catalog_entries.send(tag) : nil
|
|
81
|
+
end
|
|
82
|
+
|
|
54
83
|
def configure_instance_definition(instance_definition)
|
|
55
84
|
@instance_definition = instance_definition
|
|
56
85
|
|
data/lib/tdc/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tdc
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '1.
|
|
4
|
+
version: '1.4'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alistair McKinnell
|
|
@@ -130,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
131
|
version: '0'
|
|
132
132
|
requirements: []
|
|
133
|
-
rubygems_version:
|
|
133
|
+
rubygems_version: 4.0.8
|
|
134
134
|
specification_version: 4
|
|
135
135
|
summary: A simple framework for creating a Test Data Catalog
|
|
136
136
|
test_files: []
|