tdc 0.3.5 → 0.3.9
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/.rubocop.yml +3 -68
- data/CHANGELOG.md +33 -0
- data/README.md +3 -1
- data/images/Tdc.png +0 -0
- data/lib/tdc.rb +14 -12
- data/lib/tdc/data_definition_file_reader.rb +2 -0
- data/lib/tdc/definition_resolvers/tag_resolver.rb +2 -0
- data/lib/tdc/extended_attributes.rb +7 -0
- data/lib/tdc/extended_attributes/default_interpreter.rb +31 -0
- data/lib/tdc/extended_attributes/interpreter_base.rb +9 -0
- data/lib/tdc/extended_attributes/interpreter_registry.rb +32 -0
- data/lib/tdc/generators/definition_sourcable.rb +1 -1
- data/lib/tdc/generators/standard_generator.rb +45 -4
- data/lib/tdc/in_memory_data_definition.rb +2 -0
- data/lib/tdc/version.rb +1 -1
- data/tdc.gemspec +1 -1
- metadata +8 -6
- data/lib/tdc/generators/configurable_generator.rb +0 -60
- data/lib/tdc/generators/singular_generator.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40158a1118d92cb453c0197da1eea7850c19ba2bba98306806bf920f167d16b8
|
4
|
+
data.tar.gz: '09f31030294fadabb38f88c6976d56774670b636ec43bb2ae4d62a96ad234087'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40758219403185741dbc04f645f5f7d19a07ff004514cf5c5d9c7a4312085d4918d8d2694204c643bcb97f808c8c958b002b7c2e684748d8d1621e1b9f49f182
|
7
|
+
data.tar.gz: 41777ff45589fc3de09026e86e0e26220cd863a95861fd866a337f53b23ec0211f4d4ced7d0feac6cabbf563175f6b6234888b441c80d30bd848bad2f42cef16
|
data/.rubocop.yml
CHANGED
@@ -2,39 +2,19 @@ require:
|
|
2
2
|
- rubocop-rspec
|
3
3
|
|
4
4
|
AllCops:
|
5
|
-
|
5
|
+
NewCops: enable
|
6
|
+
TargetRubyVersion: 2.6
|
6
7
|
|
7
8
|
Exclude:
|
8
9
|
- 'bin/**/*'
|
9
10
|
|
10
|
-
Layout/
|
11
|
-
Enabled: true
|
12
|
-
|
13
|
-
Metrics/LineLength:
|
11
|
+
Layout/LineLength:
|
14
12
|
Max: 120
|
15
13
|
|
16
14
|
# Rubocop and I cannot agree.
|
17
15
|
Layout/MultilineMethodCallBraceLayout:
|
18
16
|
Enabled: false
|
19
17
|
|
20
|
-
Layout/SpaceAroundMethodCallOperator:
|
21
|
-
Enabled: true
|
22
|
-
|
23
|
-
Lint/DeprecatedOpenSSLConstant:
|
24
|
-
Enabled: true
|
25
|
-
|
26
|
-
Lint/DuplicateElsifCondition:
|
27
|
-
Enabled: true
|
28
|
-
|
29
|
-
Lint/MixedRegexpCaptureTypes:
|
30
|
-
Enabled: true
|
31
|
-
|
32
|
-
Lint/RaiseException:
|
33
|
-
Enabled: true
|
34
|
-
|
35
|
-
Lint/StructNewOverride:
|
36
|
-
Enabled: true
|
37
|
-
|
38
18
|
Metrics/BlockLength:
|
39
19
|
Enabled: false
|
40
20
|
|
@@ -68,15 +48,6 @@ RSpec/MultipleExpectations:
|
|
68
48
|
RSpec/SubjectStub:
|
69
49
|
Enabled: false
|
70
50
|
|
71
|
-
Style/AccessorGrouping:
|
72
|
-
Enabled: true
|
73
|
-
|
74
|
-
Style/ArrayCoercion:
|
75
|
-
Enabled: true
|
76
|
-
|
77
|
-
Style/BisectedAttrAccessor:
|
78
|
-
Enabled: true
|
79
|
-
|
80
51
|
Style/BlockDelimiters:
|
81
52
|
Enabled: true
|
82
53
|
EnforcedStyle: line_count_based
|
@@ -84,37 +55,16 @@ Style/BlockDelimiters:
|
|
84
55
|
- 'let'
|
85
56
|
- 'subject'
|
86
57
|
|
87
|
-
Style/CaseLikeIf:
|
88
|
-
Enabled: true
|
89
|
-
|
90
58
|
Style/Documentation:
|
91
59
|
Enabled: false
|
92
60
|
|
93
61
|
Style/EmptyMethod:
|
94
62
|
EnforcedStyle: expanded
|
95
63
|
|
96
|
-
Style/ExponentialNotation:
|
97
|
-
Enabled: true
|
98
|
-
|
99
64
|
# We can ignore this small performance improvement.
|
100
65
|
Style/FrozenStringLiteralComment:
|
101
66
|
Enabled: false
|
102
67
|
|
103
|
-
Style/HashAsLastArrayItem:
|
104
|
-
Enabled: true
|
105
|
-
|
106
|
-
Style/HashEachMethods:
|
107
|
-
Enabled: true
|
108
|
-
|
109
|
-
Style/HashLikeCase:
|
110
|
-
Enabled: true
|
111
|
-
|
112
|
-
Style/HashTransformKeys:
|
113
|
-
Enabled: true
|
114
|
-
|
115
|
-
Style/HashTransformValues:
|
116
|
-
Enabled: true
|
117
|
-
|
118
68
|
# We like to use the hash rocket in rake files.
|
119
69
|
Style/HashSyntax:
|
120
70
|
Exclude:
|
@@ -124,21 +74,6 @@ Style/HashSyntax:
|
|
124
74
|
Style/MutableConstant:
|
125
75
|
Enabled: false
|
126
76
|
|
127
|
-
Style/RedundantAssignment:
|
128
|
-
Enabled: true
|
129
|
-
|
130
|
-
Style/RedundantFetchBlock:
|
131
|
-
Enabled: true
|
132
|
-
|
133
|
-
Style/RedundantFileExtensionInRequire:
|
134
|
-
Enabled: true
|
135
|
-
|
136
|
-
Style/RedundantRegexpCharacterClass:
|
137
|
-
Enabled: true
|
138
|
-
|
139
|
-
Style/RedundantRegexpEscape:
|
140
|
-
Enabled: true
|
141
|
-
|
142
77
|
# No need to mention StandardError.
|
143
78
|
Style/RescueStandardError:
|
144
79
|
EnforcedStyle: implicit
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.3.9] - 2020-08-12
|
10
|
+
|
11
|
+
#### Breaking Changes
|
12
|
+
|
13
|
+
- Collapse `ConfigurableGenerator` into `StandardGenerator`
|
14
|
+
|
15
|
+
## [0.3.8] - 2020-08-11
|
16
|
+
|
17
|
+
#### New Features
|
18
|
+
|
19
|
+
- Multiple subclass instances of `ExtendedAttributes::InterpreterBase` may be registered
|
20
|
+
- A default extended attribute interpreter recognizes `_atx`, `_datex`, or `_onx` date/time attributes
|
21
|
+
|
22
|
+
#### Breaking Changes
|
23
|
+
|
24
|
+
- Rename `AtxContextFactory` to `ExtendedAttributes::InterpreterRegistry`
|
25
|
+
|
26
|
+
## [0.3.7] - 2020-08-10
|
27
|
+
|
28
|
+
#### New Features
|
29
|
+
|
30
|
+
- Register a context with the `AtxContextFactory`
|
31
|
+
|
32
|
+
## [0.3.6.1] - 2020-08-10
|
33
|
+
|
34
|
+
- Add the `AtxContextFactory` abstraction
|
35
|
+
|
36
|
+
## [0.3.6] - 2020-08-06
|
37
|
+
|
38
|
+
#### Breaking Changes
|
39
|
+
|
40
|
+
- Drop the `SingularGenerator` abstraction
|
41
|
+
|
9
42
|
## [0.3.5] - 2020-08-06
|
10
43
|
|
11
44
|
- Add the `single_entry` method to `CatalogEntries`
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
**Extension Points**
|
6
6
|
|
7
|
-
Define your own test data generators by inheriting from ```StandardGenerator
|
7
|
+
Define your own test data generators by inheriting from ```StandardGenerator```. Best practice is to define an ```ApplicationStandardGenerator``` and have all other generators inherit from it.
|
8
8
|
|
9
9
|
Define your own definition resolvers by inheriting from ```DefinitionResolver```. Best practice is to define an ```ApplicationDefinitionResolver``` and all other definition resolvers inherit from it.
|
10
10
|
|
@@ -13,3 +13,5 @@ During generation the test data catalog will be represented by ```CatalogEntries
|
|
13
13
|
**Data Definition DSL**
|
14
14
|
|
15
15
|
```DefinitionResolvable``` and ```DefinitionSourcable``` provide a DSL that you may use in your generators to work more easily with a ```DataDefinition```.
|
16
|
+
|
17
|
+
By registering a class instance that inherits from ```ExtendedAttributes::InterpreterBase``` with the ```ExtendedAttributes::InterpreterRegistry``` you may extend the DSL that is used to interpret attribute values.
|
data/images/Tdc.png
CHANGED
Binary file
|
data/lib/tdc.rb
CHANGED
@@ -7,10 +7,21 @@ require "active_support/core_ext"
|
|
7
7
|
|
8
8
|
require "tdc/version"
|
9
9
|
|
10
|
-
#
|
10
|
+
# Definition Resolvers
|
11
|
+
require "tdc/definition_resolvers"
|
12
|
+
require "tdc/definition_resolvers/definition_resolver"
|
13
|
+
require "tdc/definition_resolvers/tag_resolver"
|
14
|
+
|
15
|
+
# Tdc Errors
|
11
16
|
require "tdc/fatal_error"
|
12
17
|
require "tdc/missing_override_error"
|
13
18
|
|
19
|
+
# Extended Attributes
|
20
|
+
require "tdc/extended_attributes"
|
21
|
+
require "tdc/extended_attributes/interpreter_base"
|
22
|
+
require "tdc/extended_attributes/default_interpreter"
|
23
|
+
require "tdc/extended_attributes/interpreter_registry"
|
24
|
+
|
14
25
|
# Data Definition Hierarchy
|
15
26
|
require "tdc/data_definition"
|
16
27
|
require "tdc/data_definition_file_reader"
|
@@ -19,26 +30,17 @@ require "tdc/with_indifferent_access_decorator"
|
|
19
30
|
|
20
31
|
# Generators
|
21
32
|
require "tdc/generators"
|
22
|
-
require "tdc/generators/generation_context"
|
23
|
-
|
24
|
-
# Current Catalog
|
25
33
|
require "tdc/generators/catalog_entries"
|
34
|
+
require "tdc/generators/generation_context"
|
26
35
|
|
27
|
-
# Concerns
|
36
|
+
# Generator Concerns
|
28
37
|
require "tdc/generators/definition_resolvable"
|
29
38
|
require "tdc/generators/definition_sourcable"
|
30
39
|
|
31
40
|
# Generator Hierarchy
|
32
41
|
require "tdc/generators/generator_base"
|
33
|
-
require "tdc/generators/configurable_generator"
|
34
|
-
require "tdc/generators/singular_generator"
|
35
42
|
require "tdc/generators/standard_generator"
|
36
43
|
|
37
|
-
# Definition Resolvers
|
38
|
-
require "tdc/definition_resolvers"
|
39
|
-
require "tdc/definition_resolvers/definition_resolver"
|
40
|
-
require "tdc/definition_resolvers/tag_resolver"
|
41
|
-
|
42
44
|
#
|
43
45
|
# A framework for building a Test Data Catalog
|
44
46
|
#
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Tdc
|
2
|
+
module ExtendedAttributes
|
3
|
+
class DefaultInterpreter < Tdc::ExtendedAttributes::InterpreterBase
|
4
|
+
def interpret(instance_definition)
|
5
|
+
extended_attribute_definitions = keep_extended_attributes(instance_definition)
|
6
|
+
|
7
|
+
extended_attribute_definitions.each do |k, v|
|
8
|
+
# Remove the original extended attribute.
|
9
|
+
instance_definition.delete(k)
|
10
|
+
|
11
|
+
# Add a standard attribute.
|
12
|
+
instance_definition[convert_to_standard_attribute(k)] = extended_attribute_context.instance_eval(v)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
concerning :HookMethods do
|
17
|
+
def convert_to_standard_attribute(k) # rubocop:disable Naming/MethodParameterName
|
18
|
+
k.delete_suffix("x")
|
19
|
+
end
|
20
|
+
|
21
|
+
def extended_attribute_context
|
22
|
+
Time.zone
|
23
|
+
end
|
24
|
+
|
25
|
+
def keep_extended_attributes(instance_definition)
|
26
|
+
instance_definition.select { |k, _v| /_(at|date|on)x$/ =~ k }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Tdc
|
2
|
+
module ExtendedAttributes
|
3
|
+
#
|
4
|
+
# Knows the class instances that interpret extended attribute values.
|
5
|
+
#
|
6
|
+
class InterpreterRegistry
|
7
|
+
include Singleton
|
8
|
+
|
9
|
+
def self.register(interpreter:)
|
10
|
+
instance.register_interpreter(interpreter)
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@interpreters = []
|
15
|
+
end
|
16
|
+
|
17
|
+
def interpreters
|
18
|
+
@interpreters << Tdc::ExtendedAttributes::DefaultInterpreter.new if @interpreters.empty?
|
19
|
+
|
20
|
+
@interpreters
|
21
|
+
end
|
22
|
+
|
23
|
+
def register_interpreter(interpreter)
|
24
|
+
raise Tdc::FatalError, <<~MSG unless interpreter.is_a?(Tdc::ExtendedAttributes::InterpreterBase)
|
25
|
+
Cannot register an interpreter unless it inherits from Tdc::ExtendedAttributes::InterpreterBase
|
26
|
+
MSG
|
27
|
+
|
28
|
+
@interpreters << interpreter
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -38,7 +38,7 @@ module Tdc
|
|
38
38
|
definition_source&.key?(key) ? definition_source.fetch(key) : super
|
39
39
|
end
|
40
40
|
|
41
|
-
def respond_to_missing?(method, include_all = false)
|
41
|
+
def respond_to_missing?(method, include_all = false) # rubocop:disable Style/OptionalBooleanParameter
|
42
42
|
key = transform_method_to_definition_source_key(method)
|
43
43
|
|
44
44
|
definition_source&.key?(key) ? true : super
|
@@ -1,11 +1,15 @@
|
|
1
1
|
module Tdc
|
2
2
|
module Generators
|
3
3
|
#
|
4
|
-
#
|
4
|
+
# Knows how to provide a configurable instance definition.
|
5
5
|
#
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
class StandardGenerator < Tdc::Generators::GeneratorBase
|
7
|
+
include Tdc::Generators::DefinitionSourcable
|
8
|
+
|
9
|
+
attr_reader :instance_definition
|
10
|
+
|
11
|
+
source_definition_from :instance_definition
|
12
|
+
|
9
13
|
def generate
|
10
14
|
CatalogEntries.new.tap do |catalog_entries|
|
11
15
|
instance_definitions.each do |instance_definition|
|
@@ -21,6 +25,43 @@ module Tdc
|
|
21
25
|
end
|
22
26
|
end
|
23
27
|
end
|
28
|
+
|
29
|
+
def run_resolvers_and_generate_instance
|
30
|
+
run_extended_attribute_interpreters(instance_definition)
|
31
|
+
run_definition_resolvers(instance_definition)
|
32
|
+
|
33
|
+
generate_instance
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# Hook method: subclasses are expected to define how to generate a model instance.
|
38
|
+
#
|
39
|
+
def generate_instance
|
40
|
+
raise Tdc::MissingOverrideError, "Implement the 'generate_instance' method"
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# Hook method: subclasses may include the DefinitionResolvable concern to override.
|
45
|
+
#
|
46
|
+
def run_definition_resolvers(_instance_definition)
|
47
|
+
# Do nothing
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def configure_instance_definition(instance_definition)
|
53
|
+
@instance_definition = instance_definition
|
54
|
+
|
55
|
+
configure_definition_source(instance_definition)
|
56
|
+
end
|
57
|
+
|
58
|
+
def run_extended_attribute_interpreters(instance_definition)
|
59
|
+
interpreters.each { |interpreter| interpreter.interpret(instance_definition) }
|
60
|
+
end
|
61
|
+
|
62
|
+
def interpreters
|
63
|
+
Tdc::ExtendedAttributes::InterpreterRegistry.instance.interpreters
|
64
|
+
end
|
24
65
|
end
|
25
66
|
end
|
26
67
|
end
|
data/lib/tdc/version.rb
CHANGED
data/tdc.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
|
33
33
|
spec.add_development_dependency "rake", ">= 12.1", "< 13.1"
|
34
34
|
spec.add_development_dependency "rspec", ">= 3.9", "< 4.0"
|
35
|
-
spec.add_development_dependency "rubocop", "~> 0.
|
35
|
+
spec.add_development_dependency "rubocop", "~> 0.89"
|
36
36
|
spec.add_development_dependency "rubocop-rspec", "~> 1.42"
|
37
37
|
spec.add_development_dependency "simplecov", "~> 0.17"
|
38
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tdc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alistair McKinnell
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-08-
|
11
|
+
date: 2020-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -70,14 +70,14 @@ dependencies:
|
|
70
70
|
requirements:
|
71
71
|
- - "~>"
|
72
72
|
- !ruby/object:Gem::Version
|
73
|
-
version: '0.
|
73
|
+
version: '0.89'
|
74
74
|
type: :development
|
75
75
|
prerelease: false
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
78
|
- - "~>"
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version: '0.
|
80
|
+
version: '0.89'
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: rubocop-rspec
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,15 +131,17 @@ files:
|
|
131
131
|
- lib/tdc/definition_resolvers.rb
|
132
132
|
- lib/tdc/definition_resolvers/definition_resolver.rb
|
133
133
|
- lib/tdc/definition_resolvers/tag_resolver.rb
|
134
|
+
- lib/tdc/extended_attributes.rb
|
135
|
+
- lib/tdc/extended_attributes/default_interpreter.rb
|
136
|
+
- lib/tdc/extended_attributes/interpreter_base.rb
|
137
|
+
- lib/tdc/extended_attributes/interpreter_registry.rb
|
134
138
|
- lib/tdc/fatal_error.rb
|
135
139
|
- lib/tdc/generators.rb
|
136
140
|
- lib/tdc/generators/catalog_entries.rb
|
137
|
-
- lib/tdc/generators/configurable_generator.rb
|
138
141
|
- lib/tdc/generators/definition_resolvable.rb
|
139
142
|
- lib/tdc/generators/definition_sourcable.rb
|
140
143
|
- lib/tdc/generators/generation_context.rb
|
141
144
|
- lib/tdc/generators/generator_base.rb
|
142
|
-
- lib/tdc/generators/singular_generator.rb
|
143
145
|
- lib/tdc/generators/standard_generator.rb
|
144
146
|
- lib/tdc/in_memory_data_definition.rb
|
145
147
|
- lib/tdc/missing_override_error.rb
|
@@ -1,60 +0,0 @@
|
|
1
|
-
module Tdc
|
2
|
-
module Generators
|
3
|
-
#
|
4
|
-
# Knows how to provide a configurable instance definition.
|
5
|
-
#
|
6
|
-
# Shared implementation between the StandardGenerator and the SingularGenerator abstract classes.
|
7
|
-
#
|
8
|
-
class ConfigurableGenerator < Tdc::Generators::GeneratorBase
|
9
|
-
include Tdc::Generators::DefinitionSourcable
|
10
|
-
|
11
|
-
attr_reader :instance_definition
|
12
|
-
|
13
|
-
source_definition_from :instance_definition
|
14
|
-
|
15
|
-
def run_resolvers_and_generate_instance
|
16
|
-
run_atx_resolvers(instance_definition)
|
17
|
-
run_definition_resolvers(instance_definition)
|
18
|
-
|
19
|
-
generate_instance
|
20
|
-
end
|
21
|
-
|
22
|
-
#
|
23
|
-
# Hook method: subclasses are expected to define how to generate a model instance.
|
24
|
-
#
|
25
|
-
def generate_instance
|
26
|
-
raise Tdc::MissingOverrideError, "Implement the 'generate_instance' method"
|
27
|
-
end
|
28
|
-
|
29
|
-
#
|
30
|
-
# Hook method: subclasses may include the DefinitionResolvable concern to override.
|
31
|
-
#
|
32
|
-
def run_definition_resolvers(_instance_definition)
|
33
|
-
# Do nothing
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def configure_instance_definition(instance_definition)
|
39
|
-
@instance_definition = instance_definition
|
40
|
-
|
41
|
-
configure_definition_source(instance_definition)
|
42
|
-
end
|
43
|
-
|
44
|
-
def run_atx_resolvers(instance_definition)
|
45
|
-
atx_definitions = instance_definition.select { |k, _v| /_atx$/ =~ k }
|
46
|
-
|
47
|
-
# ARM (2020-08-04): Move all the way out so that all generators use the same atx_context.
|
48
|
-
atx_context = Time.zone
|
49
|
-
|
50
|
-
atx_definitions.each do |k, v|
|
51
|
-
# Remove the original _atx attribute.
|
52
|
-
instance_definition.delete(k)
|
53
|
-
|
54
|
-
# Add a standard _at attribute.
|
55
|
-
instance_definition[k.delete_suffix("x")] = atx_context.instance_eval(v)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module Tdc
|
2
|
-
module Generators
|
3
|
-
#
|
4
|
-
# Abstract class for defining generators that define a single model instance.
|
5
|
-
#
|
6
|
-
# See also StandardGenerator.
|
7
|
-
#
|
8
|
-
class SingularGenerator < Tdc::Generators::ConfigurableGenerator
|
9
|
-
def generate
|
10
|
-
configure_instance_definition(singular_instance_definition)
|
11
|
-
|
12
|
-
run_resolvers_and_generate_instance
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def singular_instance_definition
|
18
|
-
all_instance_definitions = instance_definitions
|
19
|
-
|
20
|
-
if all_instance_definitions.many?
|
21
|
-
raise Tdc::FatalError, "A singular generator only generates a single model instance"
|
22
|
-
end
|
23
|
-
|
24
|
-
# Delete the tag so that the models do not need to filter it out.
|
25
|
-
all_instance_definitions.first.except("tag")
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|