cure 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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +16 -6
  5. data/exe/cure +7 -3
  6. data/lib/cure/config.rb +17 -3
  7. data/lib/cure/coordinator.rb +72 -0
  8. data/lib/cure/export/exporter.rb +32 -7
  9. data/lib/cure/extract/builder.rb +27 -0
  10. data/lib/cure/extract/csv_lookup.rb +32 -0
  11. data/lib/cure/extract/extractor.rb +123 -0
  12. data/lib/cure/generator/base_generator.rb +51 -0
  13. data/lib/cure/generator/case_generator.rb +25 -0
  14. data/lib/cure/generator/character_generator.rb +35 -0
  15. data/lib/cure/generator/faker_generator.rb +25 -0
  16. data/lib/cure/generator/guid_generator.rb +16 -0
  17. data/lib/cure/generator/hex_generator.rb +16 -0
  18. data/lib/cure/generator/imports.rb +12 -0
  19. data/lib/cure/generator/number_generator.rb +16 -0
  20. data/lib/cure/generator/placeholder_generator.rb +20 -0
  21. data/lib/cure/generator/redact_generator.rb +16 -0
  22. data/lib/cure/generator/variable_generator.rb +20 -0
  23. data/lib/cure/helpers/file_helpers.rb +40 -0
  24. data/lib/cure/helpers/object_helpers.rb +29 -0
  25. data/lib/cure/log.rb +3 -3
  26. data/lib/cure/main.rb +40 -31
  27. data/lib/cure/strategy/append_strategy.rb +24 -0
  28. data/lib/cure/strategy/base_strategy.rb +123 -0
  29. data/lib/cure/strategy/end_with_strategy.rb +46 -0
  30. data/lib/cure/strategy/full_strategy.rb +24 -0
  31. data/lib/cure/strategy/imports.rb +10 -0
  32. data/lib/cure/strategy/match_strategy.rb +43 -0
  33. data/lib/cure/strategy/regex_strategy.rb +49 -0
  34. data/lib/cure/strategy/split_strategy.rb +53 -0
  35. data/lib/cure/strategy/start_with_strategy.rb +47 -0
  36. data/lib/cure/template/dispatch.rb +30 -0
  37. data/lib/cure/template/extraction.rb +38 -0
  38. data/lib/cure/template/template.rb +28 -0
  39. data/lib/cure/template/transformations.rb +26 -0
  40. data/lib/cure/transformation/candidate.rb +23 -9
  41. data/lib/cure/transformation/transform.rb +33 -41
  42. data/lib/cure/validators.rb +71 -0
  43. data/lib/cure/version.rb +1 -1
  44. data/lib/cure.rb +9 -4
  45. data/templates/aws_cur_template.json +130 -128
  46. data/templates/example_template.json +46 -30
  47. metadata +36 -9
  48. data/lib/cure/csv_helpers.rb +0 -6
  49. data/lib/cure/file_helpers.rb +0 -38
  50. data/lib/cure/generator/base.rb +0 -148
  51. data/lib/cure/object_helpers.rb +0 -27
  52. data/lib/cure/strategy/base.rb +0 -223
@@ -1,223 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "singleton"
4
-
5
- module Cure
6
- module Strategy
7
- # Singleton Strategy for storing data across all processes
8
- module History
9
- # @return [Hash]
10
- def history
11
- HistoryCache.instance.history_cache
12
- end
13
-
14
- # @return [String]
15
- def retrieve_history(source_value)
16
- history[source_value] unless source_value.nil? || source_value == ""
17
- end
18
-
19
- # @param [String] source_value
20
- # @param [String] value
21
- def store_history(source_value, value)
22
- history[source_value] = value unless source_value.nil? || source_value == ""
23
- end
24
-
25
- def reset_history
26
- HistoryCache.instance.reset
27
- end
28
- alias clear_history reset_history
29
-
30
- class HistoryCache
31
- include Singleton
32
-
33
- attr_reader :history_cache
34
-
35
- def initialize
36
- @history_cache = {}
37
- end
38
-
39
- def reset
40
- @history_cache = {}
41
- end
42
- end
43
- end
44
-
45
- class Base
46
- include History
47
-
48
- # Additional details needed to make substitution.
49
- # @return [Hash]
50
- attr_accessor :options
51
-
52
- def initialize(options)
53
- @options = options
54
- end
55
-
56
- # @param [String] source_value
57
- # @param [Generator::Base] generator
58
- # @return [String]
59
- #
60
- # This will retrieve the (partial) value, then generate a new replacement.
61
- def extract(source_value, generator)
62
- extracted_value = _retrieve_value(source_value)
63
-
64
- existing = retrieve_history(extracted_value)
65
- return _replace_value(source_value, existing) if existing
66
-
67
- generated_value = generator.generate(source_value).to_s
68
- value = _replace_value(source_value, generated_value)
69
-
70
- store_history(extracted_value, generated_value)
71
-
72
- value
73
- end
74
-
75
- private
76
-
77
- # @param [String] _source_value
78
- def _retrieve_value(_source_value)
79
- raise NotImplementedError, "#{self.class} has not implemented method '#{__method__}'"
80
- end
81
-
82
- # @param [String] _source_value
83
- # @param [String] _generated_value
84
- # @return [String]
85
- def _replace_value(_source_value, _generated_value)
86
- raise NotImplementedError, "#{self.class} has not implemented method '#{__method__}'"
87
- end
88
-
89
- def replace_partial_record
90
- replace_partial = @options["replace_partial"]
91
- return replace_partial || false unless replace_partial.instance_of?(String)
92
-
93
- (replace_partial || "true").to_s == "true"
94
- end
95
-
96
- def value?(value)
97
- !value.nil? && value != ""
98
- end
99
- end
100
-
101
- class FullStrategy < Base
102
- private
103
-
104
- # @param [String] source_value
105
- # @return [String]
106
- def _retrieve_value(source_value)
107
- source_value
108
- end
109
-
110
- # @param [String] _source_value
111
- # @param [String] generated_value
112
- # @return [String]
113
- def _replace_value(_source_value, generated_value)
114
- generated_value
115
- end
116
- end
117
-
118
- class RegexStrategy < Base
119
- # gsub catchment group
120
- # @param [String] source_value
121
- def _retrieve_value(source_value)
122
- m = /#{@options["regex_cg"]}/.match(source_value)
123
- return unless m.instance_of?(MatchData) && (!m[1].nil? && m[1] != "")
124
-
125
- m[1]
126
- end
127
-
128
- # @param [String] source_value
129
- # @param [String] generated_value
130
- # @return [String]
131
- def _replace_value(source_value, generated_value)
132
- m = /#{@options["regex_cg"]}/.match(source_value)
133
- return unless m.instance_of?(MatchData) && (!m[1].nil? && m[1] != "")
134
-
135
- generated_value unless replace_partial_record
136
-
137
- source_value.gsub(m[1], generated_value)
138
- end
139
- end
140
-
141
- class MatchStrategy < Base
142
- # gsub catchment group
143
- # @param [String] source_value
144
- def _retrieve_value(source_value)
145
- @options["match"] || nil if source_value.include? @options["match"]
146
- end
147
-
148
- # @param [String] source_value
149
- # @param [String] generated_value
150
- # @return [String]
151
- def _replace_value(source_value, generated_value)
152
- return unless source_value.include? @options["match"]
153
-
154
- source_value.gsub(@options["match"], generated_value)
155
- end
156
- end
157
-
158
- class StartWithStrategy < Base
159
- # gsub catchment group
160
- # @param [String] source_value
161
- def _retrieve_value(source_value)
162
- @options["match"] || nil if source_value.start_with? @options["match"]
163
- end
164
-
165
- # @param [String] source_value
166
- # @param [String] generated_value
167
- # @return [String]
168
- def _replace_value(source_value, generated_value)
169
- return unless source_value.start_with? @options["match"]
170
-
171
- return generated_value unless replace_partial_record
172
-
173
- @options["match"] + generated_value
174
- # source_value.chomp(@options["match"]) + generated_value
175
- end
176
- end
177
-
178
- class EndWithStrategy < Base
179
- # gsub catchment group
180
- # @param [String] source_value
181
- def _retrieve_value(source_value)
182
- @options["match"] || nil if source_value.end_with? @options["match"]
183
- end
184
-
185
- # @param [String] source_value
186
- # @param [String] generated_value
187
- # @return [String]
188
- def _replace_value(source_value, generated_value)
189
- return unless source_value.end_with? @options["match"]
190
-
191
- return generated_value unless replace_partial_record
192
-
193
- generated_value + @options["match"]
194
- # generated_value + source_value.reverse.chomp(@options["match"].reverse).reverse
195
- end
196
- end
197
-
198
- class SplitStrategy < Base
199
- # @param [String] source_value
200
- def _retrieve_value(source_value)
201
- split_token = @options["token"]
202
-
203
- return unless source_value.include?(split_token)
204
-
205
- result_arr = source_value.split(split_token)
206
- result_arr[@options["index"]]
207
- end
208
-
209
- # @param [String] source_value
210
- # @param [String] generated_value
211
- # @return [String]
212
- def _replace_value(source_value, generated_value)
213
- split_token = @options["token"]
214
-
215
- return unless source_value.include?(split_token)
216
-
217
- result_arr = source_value.split(split_token)
218
- result_arr[@options["index"]] = generated_value if value?(result_arr[@options["index"]])
219
- result_arr.join(split_token)
220
- end
221
- end
222
- end
223
- end