tdc 0.3.2 → 0.3.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d440b515dda7b3c95c5ddabd279894b4bd6c93ac81a17c47fe0191d25fb72391
4
- data.tar.gz: 6878b050a7fc779362fe8b7f3d95e1e0337742e060df42899827a2743290a174
3
+ metadata.gz: 4a9bab09cb1cb215daa94f3e53b950fd09f1baa059a3c6c8cddf47abd3fd95a7
4
+ data.tar.gz: 2bfccac38422fc897d0c2208e0d5853f0a4adf13074c9da93262476d09007cf1
5
5
  SHA512:
6
- metadata.gz: 9a54735b2c05f8cbacee18ba4ea5721a0ebeb2be1c8dca6020384ff6088255333f1e2ff1ec708f9446036c851bb55c3b2ad23e528c7c5e79ca5199272bd1e625
7
- data.tar.gz: 487e92c5064480bfe3f2a00a98b1e3e427d15ba3d53619b8e2f96275d7279a1f1b74cbf4c867060f466fbfdc018b9d8d15f85700e6f1b0dbca861c0eaf92fad0
6
+ metadata.gz: 41e0866b7801d672791f6ea28d6878072f009aa31281d06889a2782c38464d79e2e2f3fd175d45cc9dbe9867491e07811fc58d1dffa0c1a1cd3c37d15f77c004
7
+ data.tar.gz: 63588b60c890b674dd4541e10b848f97108d7244f63cce86fcbb26f7daf5b25689791f436fa10aa3545604cfdbca1422d1c61cf90d4cff7804ec726b1c50aec0
@@ -2,37 +2,19 @@ require:
2
2
  - rubocop-rspec
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 2.5
5
+ NewCops: enable
6
+ TargetRubyVersion: 2.6
6
7
 
7
8
  Exclude:
8
9
  - 'bin/**/*'
9
10
 
10
- Layout/EmptyLinesAroundAttributeAccessor:
11
- Enabled: true
11
+ Layout/LineLength:
12
+ Max: 120
12
13
 
13
14
  # Rubocop and I cannot agree.
14
15
  Layout/MultilineMethodCallBraceLayout:
15
16
  Enabled: false
16
17
 
17
- Layout/SpaceAroundMethodCallOperator:
18
- Enabled: true
19
-
20
- Lint/DeprecatedOpenSSLConstant:
21
- Enabled: true
22
-
23
- Lint/DuplicateElsifCondition:
24
- Enabled: true
25
-
26
- Lint/MixedRegexpCaptureTypes:
27
- Enabled: true
28
-
29
-
30
- Lint/RaiseException:
31
- Enabled: true
32
-
33
- Lint/StructNewOverride:
34
- Enabled: true
35
-
36
18
  Metrics/BlockLength:
37
19
  Enabled: false
38
20
 
@@ -45,9 +27,6 @@ RSpec/AnyInstance:
45
27
  RSpec/ExampleLength:
46
28
  Max: 15
47
29
 
48
- Metrics/LineLength:
49
- Max: 120
50
-
51
30
  RSpec/DescribeClass:
52
31
  Enabled: false
53
32
 
@@ -69,15 +48,6 @@ RSpec/MultipleExpectations:
69
48
  RSpec/SubjectStub:
70
49
  Enabled: false
71
50
 
72
- Style/AccessorGrouping:
73
- Enabled: true
74
-
75
- Style/ArrayCoercion:
76
- Enabled: true
77
-
78
- Style/BisectedAttrAccessor:
79
- Enabled: true
80
-
81
51
  Style/BlockDelimiters:
82
52
  Enabled: true
83
53
  EnforcedStyle: line_count_based
@@ -85,56 +55,24 @@ Style/BlockDelimiters:
85
55
  - 'let'
86
56
  - 'subject'
87
57
 
88
- Style/CaseLikeIf:
89
- Enabled: true
90
-
91
58
  Style/Documentation:
92
59
  Enabled: false
93
60
 
94
61
  Style/EmptyMethod:
95
62
  EnforcedStyle: expanded
96
63
 
97
- Style/ExponentialNotation:
98
- Enabled: true
99
-
100
64
  # We can ignore this small performance improvement.
101
65
  Style/FrozenStringLiteralComment:
102
66
  Enabled: false
103
67
 
104
- Style/HashAsLastArrayItem:
105
- Enabled: true
106
-
107
- Style/HashEachMethods:
108
- Enabled: true
109
-
110
- Style/HashLikeCase:
111
- Enabled: true
112
-
113
- Style/HashTransformKeys:
114
- Enabled: true
115
-
116
- Style/HashTransformValues:
117
- Enabled: true
118
-
119
68
  # We like to use the hash rocket in rake files.
120
69
  Style/HashSyntax:
121
70
  Exclude:
122
71
  - 'Rakefile'
123
72
 
124
- Style/RedundantAssignment:
125
- Enabled: true
126
-
127
- Style/RedundantFetchBlock:
128
- Enabled: true
129
-
130
- Style/RedundantFileExtensionInRequire:
131
- Enabled: true
132
-
133
- Style/RedundantRegexpCharacterClass:
134
- Enabled: true
135
-
136
- Style/RedundantRegexpEscape:
137
- Enabled: true
73
+ # We are not going to optimize by freezing strings.
74
+ Style/MutableConstant:
75
+ Enabled: false
138
76
 
139
77
  # No need to mention StandardError.
140
78
  Style/RescueStandardError:
@@ -151,6 +89,6 @@ Style/StringLiterals:
151
89
  Style/SymbolArray:
152
90
  Enabled: false
153
91
 
154
- # We are not going to optimize by freezing strings.
155
- Style/MutableConstant:
92
+ # I prefer not to use %w or %W for an array of words.
93
+ Style/WordArray:
156
94
  Enabled: false
@@ -6,6 +6,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.3.6.1] - 2020-08-10
10
+
11
+ - Add the AtxContextFactory abstraction
12
+
13
+ ## [0.3.6] - 2020-08-06
14
+
15
+ #### Breaking Changes
16
+
17
+ - Drop the `SingularGenerator` abstraction
18
+
19
+ ## [0.3.5] - 2020-08-06
20
+
21
+ - Add the `single_entry` method to `CatalogEntries`
22
+
23
+ #### Breaking Changes
24
+
25
+ - Drop the `with_definition` method from `SingularGenerator`
26
+
27
+ ## [0.3.4] - 2020-08-05
28
+
29
+ #### Breaking Changes
30
+
31
+ - Introduce the `GenerationContext` abstraction
32
+ - All generators are initialized with an instance of `Tdc::Generators::GenerationContext`
33
+
34
+ ## [0.3.3] - 2020-08-04
35
+
36
+ - Add the `empty?` method to `CatalogEntries`
37
+ - Evaluate `_atx` attribute values against a `Time.zone` instance
38
+
9
39
  ## [0.3.2] - 2020-07-27
10
40
 
11
41
  - Return `self` from `DefinitionResolver#configure_current_catalog` to make it chainable
@@ -50,5 +80,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
50
80
  #### New Features
51
81
 
52
82
  - Avoid all PackManager dependencies
53
-
54
-
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``` or ```SingularGenerator```. Best practice is to define an ```ApplicationStandardGenerator``` and an ```ApplicationSingularGenerator``` and have all other generators inherit from them.
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
 
Binary file
data/lib/tdc.rb CHANGED
@@ -19,6 +19,8 @@ require "tdc/with_indifferent_access_decorator"
19
19
 
20
20
  # Generators
21
21
  require "tdc/generators"
22
+ require "tdc/generators/atx_context_factory"
23
+ require "tdc/generators/generation_context"
22
24
 
23
25
  # Current Catalog
24
26
  require "tdc/generators/catalog_entries"
@@ -30,7 +32,6 @@ require "tdc/generators/definition_sourcable"
30
32
  # Generator Hierarchy
31
33
  require "tdc/generators/generator_base"
32
34
  require "tdc/generators/configurable_generator"
33
- require "tdc/generators/singular_generator"
34
35
  require "tdc/generators/standard_generator"
35
36
 
36
37
  # Definition Resolvers
@@ -6,6 +6,8 @@ module Tdc
6
6
  EMPTY_DEFINITIONS = []
7
7
 
8
8
  def initialize(catalog_root_directory)
9
+ super()
10
+
9
11
  @catalog_root_directory = catalog_root_directory
10
12
  end
11
13
 
@@ -8,6 +8,8 @@ module Tdc
8
8
  attr_reader :key, :source
9
9
 
10
10
  def initialize(key:, source:)
11
+ super()
12
+
11
13
  @key = key
12
14
  @source = source
13
15
  end
@@ -0,0 +1,16 @@
1
+ module Tdc
2
+ module Generators
3
+ #
4
+ # Knows a class instance that supplies the instance_eval context for interpreting _atx attribute values.
5
+ #
6
+ class AtxContextFactory
7
+ include Singleton
8
+
9
+ attr_reader :context
10
+
11
+ def initialize
12
+ @context = Time.zone
13
+ end
14
+ end
15
+ end
16
+ end
@@ -8,6 +8,16 @@ module Tdc
8
8
  def add_catalog_entry(tag, entry)
9
9
  send("#{tag}=", entry)
10
10
  end
11
+
12
+ def empty?
13
+ to_h.empty?
14
+ end
15
+
16
+ def single_entry
17
+ raise Tdc::FatalError, "There is more than one entry" if to_h.many?
18
+
19
+ to_h.first.second
20
+ end
11
21
  end
12
22
  end
13
23
  end
@@ -3,8 +3,6 @@ module Tdc
3
3
  #
4
4
  # Knows how to provide a configurable instance definition.
5
5
  #
6
- # Shared implementation between the StandardGenerator and the SingularGenerator abstract classes.
7
- #
8
6
  class ConfigurableGenerator < Tdc::Generators::GeneratorBase
9
7
  include Tdc::Generators::DefinitionSourcable
10
8
 
@@ -49,9 +47,13 @@ module Tdc
49
47
  instance_definition.delete(k)
50
48
 
51
49
  # Add a standard _at attribute.
52
- instance_definition[k.delete_suffix("x")] = eval(v) # rubocop:disable Security/Eval
50
+ instance_definition[k.delete_suffix("x")] = atx_context.instance_eval(v)
53
51
  end
54
52
  end
53
+
54
+ def atx_context
55
+ Tdc::Generators::AtxContextFactory.instance.context
56
+ end
55
57
  end
56
58
  end
57
59
  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
@@ -0,0 +1,15 @@
1
+ module Tdc
2
+ module Generators
3
+ #
4
+ # Knows all the parameters that define the context for generation.
5
+ #
6
+ class GenerationContext
7
+ attr_reader :current_catalog, :data_definition
8
+
9
+ def initialize(current_catalog:, data_definition:)
10
+ @current_catalog = current_catalog
11
+ @data_definition = data_definition
12
+ end
13
+ end
14
+ end
15
+ end
@@ -4,11 +4,13 @@ module Tdc
4
4
  # Abstract base class for all Test Data Catalog generators.
5
5
  #
6
6
  class GeneratorBase
7
- attr_reader :data_definition, :current_catalog
7
+ attr_reader :generation_context
8
8
 
9
- def initialize(data_definition, current_catalog)
10
- @data_definition = data_definition
11
- @current_catalog = current_catalog
9
+ # ARM (2020-08-05): For backwards compatibility. Consider removing.
10
+ delegate :current_catalog, :data_definition, to: :generation_context
11
+
12
+ def initialize(generation_context)
13
+ @generation_context = generation_context
12
14
  end
13
15
 
14
16
  def generate
@@ -4,6 +4,8 @@ module Tdc
4
4
  #
5
5
  class InMemoryDataDefinition < Tdc::DataDefinition
6
6
  def initialize(path_elements_data = {})
7
+ super()
8
+
7
9
  @store = path_elements_data
8
10
  end
9
11
 
@@ -1,3 +1,3 @@
1
1
  module Tdc
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.6.1"
3
3
  end
@@ -8,6 +8,7 @@ Gem::Specification.new do |spec|
8
8
 
9
9
  spec.summary = "A simple framework for creating a Test Data Catalog"
10
10
  spec.homepage = "https://github.com/nulogy/tdc"
11
+ spec.license = "MIT"
11
12
 
12
13
  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
13
14
 
@@ -31,7 +32,7 @@ Gem::Specification.new do |spec|
31
32
 
32
33
  spec.add_development_dependency "rake", ">= 12.1", "< 13.1"
33
34
  spec.add_development_dependency "rspec", ">= 3.9", "< 4.0"
34
- spec.add_development_dependency "rubocop", "~> 0.88"
35
+ spec.add_development_dependency "rubocop", "~> 0.89"
35
36
  spec.add_development_dependency "rubocop-rspec", "~> 1.42"
36
37
  spec.add_development_dependency "simplecov", "~> 0.17"
37
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.2
4
+ version: 0.3.6.1
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-07-28 00:00:00.000000000 Z
11
+ date: 2020-08-10 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.88'
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.88'
80
+ version: '0.89'
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rubocop-rspec
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -133,12 +133,13 @@ files:
133
133
  - lib/tdc/definition_resolvers/tag_resolver.rb
134
134
  - lib/tdc/fatal_error.rb
135
135
  - lib/tdc/generators.rb
136
+ - lib/tdc/generators/atx_context_factory.rb
136
137
  - lib/tdc/generators/catalog_entries.rb
137
138
  - lib/tdc/generators/configurable_generator.rb
138
139
  - lib/tdc/generators/definition_resolvable.rb
139
140
  - lib/tdc/generators/definition_sourcable.rb
141
+ - lib/tdc/generators/generation_context.rb
140
142
  - lib/tdc/generators/generator_base.rb
141
- - lib/tdc/generators/singular_generator.rb
142
143
  - lib/tdc/generators/standard_generator.rb
143
144
  - lib/tdc/in_memory_data_definition.rb
144
145
  - lib/tdc/missing_override_error.rb
@@ -146,7 +147,8 @@ files:
146
147
  - lib/tdc/with_indifferent_access_decorator.rb
147
148
  - tdc.gemspec
148
149
  homepage: https://github.com/nulogy/tdc
149
- licenses: []
150
+ licenses:
151
+ - MIT
150
152
  metadata:
151
153
  homepage_uri: https://github.com/nulogy/tdc
152
154
  changelog_uri: https://github.com/nulogy/tdc/blob/master/CHANGELOG.md
@@ -1,39 +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 with_definition(additional_definitions)
10
- @additional_definitions = additional_definitions.stringify_keys.reject { |_, v| v == :missing_definition }
11
-
12
- self
13
- end
14
-
15
- def generate
16
- configure_instance_definition(singular_instance_definition.merge(additional_definitions))
17
-
18
- run_resolvers_and_generate_instance
19
- end
20
-
21
- private
22
-
23
- def additional_definitions
24
- @additional_definitions || {}
25
- end
26
-
27
- def singular_instance_definition
28
- all_instance_definitions = instance_definitions
29
-
30
- if all_instance_definitions.many?
31
- raise Tdc::FatalError, "A singular generator only generates a single model instance"
32
- end
33
-
34
- # Delete the tag so that the models do not need to filter it out.
35
- all_instance_definitions.first.except("tag")
36
- end
37
- end
38
- end
39
- end