cure 0.1.1 → 0.4.0

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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +16 -3
  3. data/.tool-versions +1 -0
  4. data/Dockerfile +1 -1
  5. data/Gemfile +1 -0
  6. data/Gemfile.lock +25 -6
  7. data/README.md +59 -81
  8. data/docs/README.md +33 -0
  9. data/docs/about.md +219 -0
  10. data/docs/builder/add.md +52 -0
  11. data/docs/builder/black_white_list.md +83 -0
  12. data/docs/builder/copy.md +48 -0
  13. data/docs/builder/explode.md +70 -0
  14. data/docs/builder/main.md +43 -0
  15. data/docs/builder/remove.md +46 -0
  16. data/docs/examples/examples.md +164 -0
  17. data/docs/export/main.md +37 -0
  18. data/docs/extract/main.md +89 -0
  19. data/docs/metadata/main.md +29 -0
  20. data/docs/query/main.md +45 -0
  21. data/docs/sources/main.md +36 -0
  22. data/docs/transform/main.md +53 -0
  23. data/docs/validate/main.md +42 -0
  24. data/exe/cure +12 -37
  25. data/exe/cure.old +59 -0
  26. data/lib/cure/builder/base_builder.rb +151 -0
  27. data/lib/cure/builder/candidate.rb +56 -0
  28. data/lib/cure/cli/command.rb +105 -0
  29. data/lib/cure/cli/generate_command.rb +54 -0
  30. data/lib/cure/cli/new_command.rb +52 -0
  31. data/lib/cure/cli/run_command.rb +19 -0
  32. data/lib/cure/cli/templates/README.md.erb +1 -0
  33. data/lib/cure/cli/templates/gemfile.erb +5 -0
  34. data/lib/cure/cli/templates/gitignore.erb +181 -0
  35. data/lib/cure/cli/templates/new_template.rb.erb +31 -0
  36. data/lib/cure/cli/templates/tool-versions.erb +1 -0
  37. data/lib/cure/config.rb +151 -13
  38. data/lib/cure/coordinator.rb +108 -0
  39. data/lib/cure/database.rb +191 -0
  40. data/lib/cure/dsl/builder.rb +26 -0
  41. data/lib/cure/dsl/exporters.rb +45 -0
  42. data/lib/cure/dsl/extraction.rb +60 -0
  43. data/lib/cure/dsl/metadata.rb +33 -0
  44. data/lib/cure/dsl/queries.rb +36 -0
  45. data/lib/cure/dsl/source_files.rb +36 -0
  46. data/lib/cure/dsl/template.rb +131 -0
  47. data/lib/cure/dsl/transformations.rb +95 -0
  48. data/lib/cure/dsl/validator.rb +22 -0
  49. data/lib/cure/export/base_processor.rb +194 -0
  50. data/lib/cure/export/manager.rb +24 -0
  51. data/lib/cure/extract/base_processor.rb +47 -0
  52. data/lib/cure/extract/csv_lookup.rb +43 -0
  53. data/lib/cure/extract/extractor.rb +80 -0
  54. data/lib/cure/extract/filter.rb +118 -0
  55. data/lib/cure/extract/named_range.rb +94 -0
  56. data/lib/cure/extract/named_range_processor.rb +128 -0
  57. data/lib/cure/extract/variable.rb +25 -0
  58. data/lib/cure/extract/variable_processor.rb +57 -0
  59. data/lib/cure/generator/base_generator.rb +61 -0
  60. data/lib/cure/generator/case_generator.rb +32 -0
  61. data/lib/cure/generator/character_generator.rb +41 -0
  62. data/lib/cure/generator/erb_generator.rb +21 -0
  63. data/lib/cure/generator/eval_generator.rb +34 -0
  64. data/lib/cure/generator/faker_generator.rb +31 -0
  65. data/lib/cure/generator/guid_generator.rb +21 -0
  66. data/lib/cure/generator/hex_generator.rb +21 -0
  67. data/lib/cure/generator/imports.rb +16 -0
  68. data/lib/cure/generator/number_generator.rb +21 -0
  69. data/lib/cure/generator/placeholder_generator.rb +26 -0
  70. data/lib/cure/generator/proc_generator.rb +21 -0
  71. data/lib/cure/generator/redact_generator.rb +22 -0
  72. data/lib/cure/generator/static_generator.rb +21 -0
  73. data/lib/cure/generator/variable_generator.rb +26 -0
  74. data/lib/cure/helpers/file_helpers.rb +50 -0
  75. data/lib/cure/helpers/object_helpers.rb +17 -0
  76. data/lib/cure/helpers/perf_helpers.rb +30 -0
  77. data/lib/cure/helpers/string.rb +54 -0
  78. data/lib/cure/launcher.rb +125 -0
  79. data/lib/cure/log.rb +10 -3
  80. data/lib/cure/planner.rb +136 -0
  81. data/lib/cure/strategy/append_strategy.rb +28 -0
  82. data/lib/cure/strategy/base_strategy.rb +98 -0
  83. data/lib/cure/strategy/contain_strategy.rb +51 -0
  84. data/lib/cure/strategy/end_with_strategy.rb +52 -0
  85. data/lib/cure/strategy/full_strategy.rb +28 -0
  86. data/lib/cure/strategy/history/history_cache.rb +82 -0
  87. data/lib/cure/strategy/imports.rb +12 -0
  88. data/lib/cure/strategy/match_strategy.rb +48 -0
  89. data/lib/cure/strategy/prepend_strategy.rb +28 -0
  90. data/lib/cure/strategy/regex_strategy.rb +55 -0
  91. data/lib/cure/strategy/split_strategy.rb +58 -0
  92. data/lib/cure/strategy/start_with_strategy.rb +53 -0
  93. data/lib/cure/transformation/candidate.rb +47 -36
  94. data/lib/cure/transformation/transform.rb +29 -71
  95. data/lib/cure/validator/base_rule.rb +78 -0
  96. data/lib/cure/validator/candidate.rb +54 -0
  97. data/lib/cure/validator/manager.rb +21 -0
  98. data/lib/cure/validators.rb +71 -0
  99. data/lib/cure/version.rb +1 -1
  100. data/lib/cure.rb +19 -6
  101. data/templates/dsl_example.rb +48 -0
  102. data/templates/empty_template.rb +31 -0
  103. metadata +161 -23
  104. data/lib/cure/csv_helpers.rb +0 -6
  105. data/lib/cure/export/exporter.rb +0 -49
  106. data/lib/cure/file_helpers.rb +0 -38
  107. data/lib/cure/generator/base.rb +0 -148
  108. data/lib/cure/main.rb +0 -63
  109. data/lib/cure/object_helpers.rb +0 -27
  110. data/lib/cure/strategy/base.rb +0 -223
  111. data/templates/aws_cur_template.json +0 -143
  112. data/templates/example_template.json +0 -38
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - william
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-31 00:00:00.000000000 Z
11
+ date: 2024-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simplecov
@@ -24,44 +24,103 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: artii
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.1.2
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: faker
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ">="
45
+ - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '0'
47
+ version: 3.2.2
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ">="
52
+ - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '0'
54
+ version: 3.2.2
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rcsv
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ">="
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0'
61
+ version: 0.3.1
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ">="
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0'
55
- description: Anonymize private data inside CSV files
68
+ version: 0.3.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: sequel
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 5.74.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 5.74.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.6.8
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.6.8
97
+ - !ruby/object:Gem::Dependency
98
+ name: terminal-table
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.2
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.0.2
111
+ description: Transform, select, anonymize or manipulate data inside CSV files with
112
+ templates.
56
113
  email:
57
114
  - me@williamthom.as
58
115
  executables:
59
116
  - cure
117
+ - cure.old
60
118
  extensions: []
61
119
  extra_rdoc_files: []
62
120
  files:
63
121
  - ".rspec"
64
122
  - ".rubocop.yml"
123
+ - ".tool-versions"
65
124
  - CODE_OF_CONDUCT.md
66
125
  - Dockerfile
67
126
  - Gemfile
@@ -69,22 +128,101 @@ files:
69
128
  - LICENSE.txt
70
129
  - README.md
71
130
  - Rakefile
131
+ - docs/README.md
132
+ - docs/about.md
133
+ - docs/builder/add.md
134
+ - docs/builder/black_white_list.md
135
+ - docs/builder/copy.md
136
+ - docs/builder/explode.md
137
+ - docs/builder/main.md
138
+ - docs/builder/remove.md
139
+ - docs/examples/examples.md
140
+ - docs/export/main.md
141
+ - docs/extract/main.md
142
+ - docs/metadata/main.md
143
+ - docs/query/main.md
144
+ - docs/sources/main.md
145
+ - docs/transform/main.md
146
+ - docs/validate/main.md
72
147
  - exe/cure
148
+ - exe/cure.old
73
149
  - lib/cure.rb
150
+ - lib/cure/builder/base_builder.rb
151
+ - lib/cure/builder/candidate.rb
152
+ - lib/cure/cli/command.rb
153
+ - lib/cure/cli/generate_command.rb
154
+ - lib/cure/cli/new_command.rb
155
+ - lib/cure/cli/run_command.rb
156
+ - lib/cure/cli/templates/README.md.erb
157
+ - lib/cure/cli/templates/gemfile.erb
158
+ - lib/cure/cli/templates/gitignore.erb
159
+ - lib/cure/cli/templates/new_template.rb.erb
160
+ - lib/cure/cli/templates/tool-versions.erb
74
161
  - lib/cure/config.rb
75
- - lib/cure/csv_helpers.rb
76
- - lib/cure/export/exporter.rb
77
- - lib/cure/file_helpers.rb
78
- - lib/cure/generator/base.rb
162
+ - lib/cure/coordinator.rb
163
+ - lib/cure/database.rb
164
+ - lib/cure/dsl/builder.rb
165
+ - lib/cure/dsl/exporters.rb
166
+ - lib/cure/dsl/extraction.rb
167
+ - lib/cure/dsl/metadata.rb
168
+ - lib/cure/dsl/queries.rb
169
+ - lib/cure/dsl/source_files.rb
170
+ - lib/cure/dsl/template.rb
171
+ - lib/cure/dsl/transformations.rb
172
+ - lib/cure/dsl/validator.rb
173
+ - lib/cure/export/base_processor.rb
174
+ - lib/cure/export/manager.rb
175
+ - lib/cure/extract/base_processor.rb
176
+ - lib/cure/extract/csv_lookup.rb
177
+ - lib/cure/extract/extractor.rb
178
+ - lib/cure/extract/filter.rb
179
+ - lib/cure/extract/named_range.rb
180
+ - lib/cure/extract/named_range_processor.rb
181
+ - lib/cure/extract/variable.rb
182
+ - lib/cure/extract/variable_processor.rb
183
+ - lib/cure/generator/base_generator.rb
184
+ - lib/cure/generator/case_generator.rb
185
+ - lib/cure/generator/character_generator.rb
186
+ - lib/cure/generator/erb_generator.rb
187
+ - lib/cure/generator/eval_generator.rb
188
+ - lib/cure/generator/faker_generator.rb
189
+ - lib/cure/generator/guid_generator.rb
190
+ - lib/cure/generator/hex_generator.rb
191
+ - lib/cure/generator/imports.rb
192
+ - lib/cure/generator/number_generator.rb
193
+ - lib/cure/generator/placeholder_generator.rb
194
+ - lib/cure/generator/proc_generator.rb
195
+ - lib/cure/generator/redact_generator.rb
196
+ - lib/cure/generator/static_generator.rb
197
+ - lib/cure/generator/variable_generator.rb
198
+ - lib/cure/helpers/file_helpers.rb
199
+ - lib/cure/helpers/object_helpers.rb
200
+ - lib/cure/helpers/perf_helpers.rb
201
+ - lib/cure/helpers/string.rb
202
+ - lib/cure/launcher.rb
79
203
  - lib/cure/log.rb
80
- - lib/cure/main.rb
81
- - lib/cure/object_helpers.rb
82
- - lib/cure/strategy/base.rb
204
+ - lib/cure/planner.rb
205
+ - lib/cure/strategy/append_strategy.rb
206
+ - lib/cure/strategy/base_strategy.rb
207
+ - lib/cure/strategy/contain_strategy.rb
208
+ - lib/cure/strategy/end_with_strategy.rb
209
+ - lib/cure/strategy/full_strategy.rb
210
+ - lib/cure/strategy/history/history_cache.rb
211
+ - lib/cure/strategy/imports.rb
212
+ - lib/cure/strategy/match_strategy.rb
213
+ - lib/cure/strategy/prepend_strategy.rb
214
+ - lib/cure/strategy/regex_strategy.rb
215
+ - lib/cure/strategy/split_strategy.rb
216
+ - lib/cure/strategy/start_with_strategy.rb
83
217
  - lib/cure/transformation/candidate.rb
84
218
  - lib/cure/transformation/transform.rb
219
+ - lib/cure/validator/base_rule.rb
220
+ - lib/cure/validator/candidate.rb
221
+ - lib/cure/validator/manager.rb
222
+ - lib/cure/validators.rb
85
223
  - lib/cure/version.rb
86
- - templates/aws_cur_template.json
87
- - templates/example_template.json
224
+ - templates/dsl_example.rb
225
+ - templates/empty_template.rb
88
226
  homepage: https://www.github.com/williamthom-as/cure
89
227
  licenses:
90
228
  - MIT
@@ -97,15 +235,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
235
  requirements:
98
236
  - - ">="
99
237
  - !ruby/object:Gem::Version
100
- version: 2.6.0
238
+ version: '3.1'
101
239
  required_rubygems_version: !ruby/object:Gem::Requirement
102
240
  requirements:
103
241
  - - ">="
104
242
  - !ruby/object:Gem::Version
105
243
  version: '0'
106
244
  requirements: []
107
- rubygems_version: 3.2.22
245
+ rubygems_version: 3.4.6
108
246
  signing_key:
109
247
  specification_version: 4
110
- summary: Anonymize private data inside CSV files
248
+ summary: Cure provides the ability to transform CSVs using descriptive templates.
111
249
  test_files: []
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cure
4
- module CSVHelpers
5
- end
6
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "cure/log"
4
- require "cure/file_helpers"
5
-
6
- module Cure
7
- module Export
8
- class Exporter
9
- include Cure::FileHelpers
10
- include Log
11
-
12
- def self.export_ctx(ctx, output_dir, file_name)
13
- column_headers = ctx.column_headers.keys
14
-
15
- exporter = Exporter.new
16
- exporter.export(output_dir, file_name, ctx.transformed_rows, column_headers)
17
- end
18
-
19
- # @param [Array] rows
20
- # @param [Array] columns
21
- def export(output_dir, file_name, rows, columns)
22
- log_info("Exporting file to [#{output_dir}/#{file_name}] with #{rows.length} rows")
23
-
24
- file_contents = []
25
- file_contents << columns.join(",")
26
-
27
- rows.each do |row|
28
- file_contents << row.join(",")
29
- end
30
-
31
- write_to_file(
32
- output_dir, file_name, "csv", file_contents.join("\n")
33
- )
34
- end
35
-
36
- # @param [String] file_path
37
- # @param [String] contents
38
- # @param [String] file_extension
39
- def write_to_file(file_path, file_name, file_extension, contents)
40
- file_location = "#{file_path}/#{file_name || Time.now.utc.strftime("%Y-%m-%dT%H:%M:%S%-z")}"
41
- clean_dir(file_path)
42
-
43
- with_file(file_location, file_extension) do |file|
44
- file.write(contents)
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "fileutils"
4
-
5
- module Cure
6
- module FileHelpers
7
- def with_file(path, extension, &block)
8
- dir = File.dirname(path)
9
-
10
- FileUtils.mkdir_p(dir) unless File.directory?(dir)
11
-
12
- path = "#{path}.#{extension}"
13
- File.open(path, "w", &block)
14
- end
15
-
16
- def clean_dir(path)
17
- dir = File.file?(path) ? File.dirname(path) : path
18
-
19
- FileUtils.remove_dir(dir) if File.directory?(dir)
20
- end
21
-
22
- def read_file(file_location)
23
- result = file_location.start_with?("/") ? file_location : File.join(File.dirname(__FILE__), file_location)
24
-
25
- raise "No file found at [#{file_location}]" unless File.exist? result
26
-
27
- File.read(result)
28
- end
29
-
30
- def with_temp_dir(temp_dir, &_block)
31
- return unless block_given?
32
-
33
- clean_dir(temp_dir)
34
- yield
35
- clean_dir(temp_dir)
36
- end
37
- end
38
- end
@@ -1,148 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cure
4
- module Generator
5
- class Base
6
- # @return [Hash]
7
- attr_accessor :options
8
-
9
- def initialize(options={})
10
- @options = options
11
- end
12
-
13
- # @param [Object/Nil] source_value
14
- # @return [String]
15
- def generate(source_value=nil)
16
- translated = _generate(source_value)
17
- translated = "#{prefix}#{translated}" if prefix
18
- translated = "#{translated}#{suffix}" if suffix
19
- translated
20
- end
21
-
22
- private
23
-
24
- # @param [Object/Nil] _source_value
25
- # @return [String]
26
- def _generate(_source_value)
27
- raise NotImplementedError, "#{self.class} has not implemented method '#{__method__}'"
28
- end
29
-
30
- def prefix(default=nil)
31
- extract_property("prefix", default)
32
- end
33
-
34
- def suffix(default=nil)
35
- extract_property("suffix", default)
36
- end
37
-
38
- def length(default=nil)
39
- extract_property("length", default)
40
- end
41
-
42
- def property_name(default=nil)
43
- extract_property("name", default)
44
- end
45
-
46
- def extract_property(property, default_val)
47
- @options.fetch(property, default_val)
48
- end
49
- end
50
-
51
- class HexGenerator < Base
52
- private
53
-
54
- # @param [Object] _source_value
55
- def _generate(_source_value)
56
- 1.upto(length(rand(0..9))).map { rand(0..15).to_s(16) }.join("")
57
- end
58
- end
59
-
60
- class NumberGenerator < Base
61
- private
62
-
63
- # @param [Object] _source_value
64
- def _generate(_source_value)
65
- 1.upto(length(rand(0..9))).map { rand(1..9) }.join("").to_i
66
- end
67
- end
68
-
69
- class RedactGenerator < Base
70
- private
71
-
72
- # @param [Object] source_value
73
- def _generate(source_value)
74
- 1.upto(length(source_value&.length || 5)).map { "X" }.join("")
75
- end
76
- end
77
-
78
- class PlaceholderGenerator < Base
79
- include Configuration
80
-
81
- private
82
-
83
- # @param [Object] _source_value
84
- def _generate(_source_value)
85
- value = config.placeholders[property_name]
86
- value || raise("Missing placeholder value. Available candidates: [#{config.placeholders.join(", ")}]")
87
- end
88
- end
89
-
90
- require "securerandom"
91
-
92
- class GuidGenerator < Base
93
- private
94
-
95
- # @param [Object] _source_value
96
- def _generate(_source_value)
97
- SecureRandom.uuid.to_s
98
- end
99
- end
100
-
101
- require "faker"
102
-
103
- class FakerGenerator < Base
104
- private
105
-
106
- # @param [Object] _source_value
107
- def _generate(_source_value)
108
- mod_code = extract_property("module", nil)
109
- mod = Faker.const_get(mod_code)
110
-
111
- raise "No Faker module found for [#{mod_code}]" unless mod
112
-
113
- meth_code = extract_property("method", nil)&.to_sym
114
- raise "No Faker module found for [#{meth_code}]" unless mod.methods.include?(meth_code)
115
-
116
- mod.send(meth_code)
117
- end
118
- end
119
-
120
- class CharacterGenerator < Base
121
-
122
- def initialize(options=nil)
123
- super(options)
124
- end
125
-
126
- private
127
-
128
- # @param [Object] source_value
129
- def _generate(source_value)
130
- arr = build_options.map(&:to_a).flatten
131
- (0...length(source_value&.length || 5)).map { arr[rand(arr.length)] }.join
132
- end
133
-
134
- def build_options
135
- return [("a".."z"), ("A".."Z"), (0..9)] unless @options.key?("types")
136
-
137
- type_array = @options["types"]
138
-
139
- arr = []
140
- arr << ("a".."z") if type_array.include? "lowercase"
141
- arr << ("A".."Z") if type_array.include? "uppercase"
142
- arr << (0..9) if type_array.include? "number"
143
- arr << ("!".."+") if type_array.include? "symbol"
144
- arr
145
- end
146
- end
147
- end
148
- end
data/lib/cure/main.rb DELETED
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "cure"
4
- require "json"
5
- require "cure/transformation/candidate"
6
- require "cure/transformation/transform"
7
- require "cure/export/exporter"
8
-
9
- module Cure
10
-
11
- class Main
12
- include Configuration
13
- include FileHelpers
14
-
15
- # @return [Cure::Main]
16
- def self.init(template_file, csv_file, output_dir)
17
- # Run all init stuff here.
18
- main = Main.new
19
- main.setup(template_file, csv_file, output_dir)
20
-
21
- main
22
- end
23
-
24
- # @return [Cure::Transformation::Transform]
25
- attr_accessor :transformer
26
-
27
- # @return [Boolean]
28
- attr_reader :is_initialised
29
-
30
- def initialize
31
- @is_initialised = false
32
- end
33
-
34
- def run
35
- raise "Not init" unless @transformer
36
-
37
- ctx = build_ctx
38
- export(ctx)
39
- end
40
-
41
- # @return [Cure::Transform::TransformContext]
42
- def build_ctx
43
- @transformer.extract_from_file(config.source_file_location)
44
- end
45
-
46
- def setup(template_file, csv_file, output_dir)
47
- config = create_config(csv_file, JSON.parse(read_file(template_file)), output_dir)
48
- register_config(config)
49
-
50
- candidates = config.template["candidates"].map { |c| Cure::Transformation::Candidate.new.from_json(c) }
51
-
52
- @transformer = Cure::Transformation::Transform.new(candidates)
53
- @is_initialised = true
54
- end
55
-
56
- private
57
-
58
- # @param [Cure::Transform::TransformContext] ctx
59
- def export(ctx)
60
- Cure::Export::Exporter.export_ctx(ctx, config.output_dir, "csv_file")
61
- end
62
- end
63
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "cure"
4
- require "json"
5
-
6
- module Cure
7
- module ObjectHelpers
8
- def attributes=(hash)
9
- hash.each do |key, value|
10
- send("#{key}=", value)
11
- rescue NoMethodError
12
- Cure.logger.warn("Error deserializing object: No property for #{key}")
13
- end
14
- end
15
-
16
- def from_json(json)
17
- return from_hash(json) if json.is_a?(Hash) # Just a guard in case serialisation is done
18
-
19
- from_hash(JSON.parse(json))
20
- end
21
-
22
- def from_hash(hash)
23
- self.attributes = hash
24
- self
25
- end
26
- end
27
- end