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
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+
5
+ module Cure
6
+ module Generator
7
+ class CharacterGenerator < BaseGenerator
8
+
9
+ def initialize(options=nil)
10
+ super(options)
11
+ end
12
+
13
+ private
14
+
15
+ # @param [Object] source_value
16
+ # @param [RowCtx] _row_ctx
17
+ def _generate(source_value, _row_ctx)
18
+ arr = build_options.map(&:to_a).flatten
19
+ (0...length(source_value&.length || 5)).map { arr[rand(arr.length)] }.join
20
+ end
21
+
22
+ def build_options
23
+ return [("a".."z"), ("A".."Z"), (0..9)] unless @options.key?(:types)
24
+
25
+ type_array = @options[:types]
26
+
27
+ arr = []
28
+ arr << ("a".."z") if type_array.include? "lowercase"
29
+ arr << ("A".."Z") if type_array.include? "uppercase"
30
+ arr << (0..9) if type_array.include? "number"
31
+ arr << ("!".."+") if type_array.include? "symbol"
32
+ arr
33
+ end
34
+
35
+ def _describe
36
+ "Will create a random list of #{@options[:types]} " \
37
+ "with as many characters as the source string."
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+ require "erb"
5
+
6
+ module Cure
7
+ module Generator
8
+ class ErbGenerator < BaseGenerator
9
+ private
10
+
11
+ # @param [Cure::Transformation::RowCtx] _source_value
12
+ # @param [RowCtx] row_ctx
13
+ def _generate(_source_value, row_ctx)
14
+ template = @options.fetch(:template, nil)
15
+ ERB.new(template).result_with_hash(row_ctx.row)
16
+ end
17
+
18
+ def _describe; end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+
5
+ module Cure
6
+ module Generator
7
+ class EvalGenerator < BaseGenerator
8
+ private
9
+
10
+ # @param [Object] _source_value
11
+ # @param [Transformation::RowCtx] _row_ctx
12
+ # This will be changed with expression evaluator
13
+ def _generate(_source_value, _row_ctx)
14
+ eval_str = extract_property("eval", nil)
15
+ result = nil
16
+ with_safe do
17
+ result = eval(eval_str) # rubocop:disable Security/Eval
18
+ end
19
+
20
+ result
21
+ rescue StandardError => e
22
+ raise "Cannot eval statement #{extract_property("eval", nil)} [#{e.message}]"
23
+ end
24
+
25
+ def with_safe(&_block)
26
+ $SAFE = 1
27
+ yield
28
+ $SAFE = 0
29
+ end
30
+
31
+ def _describe; end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+ require "faker"
5
+
6
+ module Cure
7
+ module Generator
8
+ class FakerGenerator < BaseGenerator
9
+ private
10
+
11
+ # @param [Object] _source_value
12
+ # @param [RowCtx] _row_ctx
13
+ def _generate(_source_value, _row_ctx)
14
+ mod_code = extract_property("module", nil)
15
+ mod = Faker.const_get(mod_code)
16
+
17
+ raise "No Faker module found for [#{mod_code}]" unless mod
18
+
19
+ meth_code = extract_property("method", nil)&.to_sym
20
+ raise "No Faker module found for [#{meth_code}]" unless mod.methods.include?(meth_code)
21
+
22
+ mod.send(meth_code)
23
+ end
24
+
25
+ def _describe
26
+ "Will create a Faker value from [#{extract_property("module", nil)}::" \
27
+ "#{extract_property("method", nil)}]"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+
5
+ module Cure
6
+ module Generator
7
+ class GuidGenerator < BaseGenerator
8
+ private
9
+
10
+ # @param [Object] _source_value
11
+ # @param [RowCtx] _row_ctx
12
+ def _generate(_source_value, _row_ctx)
13
+ SecureRandom.uuid.to_s.slice(0, @options.fetch(:length, 36))
14
+ end
15
+
16
+ def _describe
17
+ "Will create a random GUID."
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+
5
+ module Cure
6
+ module Generator
7
+ class HexGenerator < BaseGenerator
8
+ private
9
+
10
+ # @param [Object] _source_value
11
+ # @param [RowCtx] _row_ctx
12
+ def _generate(_source_value, _row_ctx)
13
+ 1.upto(length(rand(0..9))).map { rand(0..15).to_s(16) }.join("")
14
+ end
15
+
16
+ def _describe
17
+ "Will create a random list of hex values matching the length of the source string."
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+ require "cure/generator/hex_generator"
5
+ require "cure/generator/case_generator"
6
+ require "cure/generator/character_generator"
7
+ require "cure/generator/faker_generator"
8
+ require "cure/generator/guid_generator"
9
+ require "cure/generator/number_generator"
10
+ require "cure/generator/placeholder_generator"
11
+ require "cure/generator/redact_generator"
12
+ require "cure/generator/variable_generator"
13
+ require "cure/generator/eval_generator"
14
+ require "cure/generator/erb_generator"
15
+ require "cure/generator/proc_generator"
16
+ require "cure/generator/static_generator"
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+
5
+ module Cure
6
+ module Generator
7
+ class NumberGenerator < BaseGenerator
8
+ private
9
+
10
+ # @param [Object] _source_value
11
+ # @param [RowCtx] _row_ctx
12
+ def _generate(_source_value, _row_ctx)
13
+ 1.upto(length(rand(0..9))).map { rand(1..9) }.join("").to_i
14
+ end
15
+
16
+ def _describe
17
+ "Will create a random list of numbers matching the length of the source string."
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+ require "cure/config"
5
+
6
+ module Cure
7
+ module Generator
8
+ class PlaceholderGenerator < BaseGenerator
9
+ include Cure::Configuration
10
+
11
+ private
12
+
13
+ # @param [Object] _source_value
14
+ # @param [RowCtx] _row_ctx
15
+ def _generate(_source_value, _row_ctx)
16
+ value = config.placeholders[property_name]
17
+ value || raise("Missing placeholder value. Available candidates: [#{config.placeholders.keys.join(", ")}]")
18
+ end
19
+
20
+ def _describe
21
+ "Will look up placeholders using '#{property_name}'. " \
22
+ "[Set as '#{config.placeholders[property_name]}']"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+ require "erb"
5
+
6
+ module Cure
7
+ module Generator
8
+ class ProcGenerator < BaseGenerator
9
+ private
10
+
11
+ # @param [Cure::Transformation::RowCtx] source_value
12
+ # @param [RowCtx] row_ctx
13
+ def _generate(source_value, row_ctx)
14
+ proc = @options.fetch(:execute, nil)
15
+ proc.call(source_value, row_ctx)
16
+ end
17
+
18
+ def _describe; end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+
5
+ module Cure
6
+ module Generator
7
+ class RedactGenerator < BaseGenerator
8
+ private
9
+
10
+ # @param [object] source_value
11
+ # @param [RowCtx] _row_ctx
12
+ def _generate(source_value, _row_ctx)
13
+ 1.upto(length(source_value&.length || 5)).map { @options.fetch(:character, "x") }.join("")
14
+ end
15
+
16
+ def _describe
17
+ "Will replace the length of the source string with X."
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+
5
+ module Cure
6
+ module Generator
7
+ class StaticGenerator < BaseGenerator
8
+ private
9
+
10
+ # @param [Object] _source_value
11
+ # @param [RowCtx] _row_ctx
12
+ def _generate(_source_value, _row_ctx)
13
+ @options.fetch(:value, nil)
14
+ end
15
+
16
+ def _describe
17
+ "Will return the defined value [#{@options.fetch(:value, nil)}]"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/generator/base_generator"
4
+ require "cure/config"
5
+ require "cure/database"
6
+
7
+ module Cure
8
+ module Generator
9
+ class VariableGenerator < BaseGenerator
10
+ include Database
11
+
12
+ private
13
+
14
+ # @param [object] _source_value
15
+ # @param [RowCtx] _row_ctx
16
+ def _generate(_source_value, _row_ctx)
17
+ value = database_service.find_variable(property_name)
18
+ value || raise("Missing placeholder value [#{property_name}]. Please check you are defining it correctly.")
19
+ end
20
+
21
+ def _describe
22
+ "Will look up the variables defined using '#{property_name}'."
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+ require "pathname"
5
+
6
+ module Cure
7
+ module Helpers
8
+ module FileHelpers
9
+ def with_file(path, extension, &block)
10
+ dir = File.dirname(path)
11
+
12
+ FileUtils.mkdir_p(dir) unless File.directory?(dir)
13
+
14
+ path = "#{path}.#{extension}"
15
+ File.open(path, "w", &block)
16
+ end
17
+
18
+ def clean_dir(path)
19
+ dir = File.file?(path) ? File.dirname(path) : path
20
+
21
+ FileUtils.remove_dir(dir) if File.directory?(dir)
22
+ end
23
+
24
+ def read_file(file_location)
25
+ result = file_location.start_with?("/") ? file_location : Pathname.new(file_location)
26
+ # result = file_location.start_with?("/") ? file_location : File.join(File.dirname(__FILE__), file_location)
27
+
28
+ raise "No file found at [#{file_location}]" unless File.exist? result.to_s
29
+
30
+ File.read(result)
31
+ end
32
+
33
+ def open_file(file_location)
34
+ result = file_location.start_with?("/") ? file_location : Pathname.new(file_location)
35
+
36
+ raise "No file found at [#{file_location}]" unless File.exist? result.to_s
37
+
38
+ File.open(result)
39
+ end
40
+
41
+ def with_temp_dir(temp_dir, &_block)
42
+ return unless block_given?
43
+
44
+ clean_dir(temp_dir)
45
+ yield
46
+ clean_dir(temp_dir)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure"
4
+ require "json"
5
+
6
+ module Cure
7
+ module Helpers
8
+ module ObjectHelpers
9
+ def class_exists?(klass_name)
10
+ klass = Module.const_get(klass_name)
11
+ klass.is_a?(Class)
12
+ rescue NameError
13
+ false
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+ require "benchmark"
5
+
6
+ module Cure
7
+ module Helpers
8
+ # This module uses some code sourced from here:
9
+ # https://torrocus.com/blog/different-ways-to-processing-large-csv-file-in-ruby/
10
+ module PerfHelpers
11
+ def print_memory_usage(process_name="default")
12
+ cmd = "ps -o rss= -p #{Process.pid}"
13
+ before_mem = `#{cmd}`.to_i
14
+ # before_gc = GC.stat(:total_allocated_objects)
15
+
16
+ yield
17
+ after_mem = `#{cmd}`.to_i
18
+ # after_gc = GC.stat(:total_allocated_objects)
19
+
20
+ log_info "Total Memory Usage [#{process_name}]: #{((after_mem - before_mem) / 1024.0).round(2)} MB"
21
+ # log_info "Total GC Objects Freed [#{process_name}]: #{after_gc - before_gc}"
22
+ end
23
+
24
+ def print_time_spent(process_name="default", &block)
25
+ time = Benchmark.realtime(&block)
26
+ log_info "Total Processing Time [#{process_name}]: #{time.round(2)}"
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This code is by Ivan Black - available here:
4
+ # https://stackoverflow.com/questions/1489183/how-can-i-use-ruby-to-colorize-the-text-output-to-a-terminal
5
+
6
+ class String
7
+ def black
8
+ "\e[30m#{self}\e[0m"
9
+ end
10
+
11
+ def red
12
+ "\e[31m#{self}\e[0m"
13
+ end
14
+
15
+ def green
16
+ "\e[32m#{self}\e[0m"
17
+ end
18
+
19
+ def brown
20
+ "\e[33m#{self}\e[0m"
21
+ end
22
+
23
+ def blue
24
+ "\e[34m#{self}\e[0m"
25
+ end
26
+
27
+ def magenta
28
+ "\e[35m#{self}\e[0m"
29
+ end
30
+
31
+ def cyan
32
+ "\e[36m#{self}\e[0m"
33
+ end
34
+
35
+ def gray
36
+ "\e[37m#{self}\e[0m"
37
+ end
38
+
39
+ def bold
40
+ "\e[1m#{self}\e[22m"
41
+ end
42
+
43
+ def italic
44
+ "\e[3m#{self}\e[23m"
45
+ end
46
+
47
+ def underline
48
+ "\e[4m#{self}\e[24m"
49
+ end
50
+
51
+ def blink
52
+ "\e[5m#{self}\e[25m"
53
+ end
54
+ end
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cure/transformation/candidate"
4
+ require "cure/transformation/transform"
5
+ require "cure/coordinator"
6
+ require "cure/database"
7
+ require "cure/planner"
8
+ require "cure/config"
9
+
10
+ require "json"
11
+
12
+ module Cure
13
+ class Launcher
14
+ include Database
15
+ include Configuration
16
+ include Helpers::FileHelpers
17
+
18
+ # @return [Cure::Coordinator]
19
+ attr_accessor :coordinator
20
+
21
+ def initialize(coordinator: Coordinator.new, planner: Planner.new)
22
+ @coordinator = coordinator
23
+ @planner = planner
24
+ @validated = false
25
+ @csv_files = []
26
+ end
27
+
28
+ # This will only support single file CSV processing, and is deprecated now
29
+ #
30
+ # @param [Symbol] type
31
+ # @param [Object] obj
32
+ # @param [TrueClass,FalseClass] print_query_plan
33
+ # @return [void]
34
+ # @deprecated
35
+ def process(type, obj, print_query_plan: true)
36
+ @csv_files << Cure::Configuration::CsvFileProxy.load_file(type, obj, "_default")
37
+ run_export(print_query_plan: print_query_plan)
38
+ end
39
+
40
+ def run_export(print_query_plan: true)
41
+ setup
42
+
43
+ raise "Not initialized" unless @validated
44
+
45
+ query_plan if print_query_plan
46
+ @coordinator.process
47
+ end
48
+
49
+ # -- Builder opts start
50
+
51
+ # @param [Symbol] type
52
+ # @param [Object] obj
53
+ # @return [Cure::Main]
54
+ def with_csv_file(type, obj, ref_name: nil)
55
+ if ref_name.nil?
56
+ ref_name = @csv_files.length.zero? ? "_default" : "_default_#{@csv_files.length}"
57
+ end
58
+
59
+ @csv_files << Cure::Configuration::CsvFileProxy.load_file(type, obj, ref_name)
60
+ self
61
+ end
62
+
63
+ # @return [Cure::Main]
64
+ def with_config(&block)
65
+ raise "No block given to config" unless block
66
+
67
+ dsl = Dsl::DslHandler.init(&block)
68
+ @template = dsl.generate
69
+
70
+ load_csv_from_config
71
+
72
+ self
73
+ end
74
+
75
+ # @return [Cure::Main]
76
+ def with_config_file(file_location)
77
+ contents = read_file(file_location.to_s)
78
+
79
+ dsl = Dsl::DslHandler.init_from_content(contents, "cure")
80
+ @template = dsl.generate
81
+
82
+ load_csv_from_config
83
+
84
+ self
85
+ end
86
+
87
+ # -- Builder end
88
+
89
+ # @return [Cure::Main]
90
+ def setup
91
+ raise "CSV File(s) are required" if @csv_files.empty?
92
+ raise "Template is required" unless @template
93
+
94
+ config = create_config(@csv_files, @template)
95
+ register_config(config)
96
+
97
+ init_database
98
+ init_history
99
+
100
+ @validated = true
101
+ self
102
+ end
103
+
104
+ # @return [void]
105
+ def query_plan
106
+ raise "Not initialized" unless @validated
107
+
108
+ @planner.process
109
+ end
110
+
111
+ private
112
+
113
+ def load_csv_from_config
114
+ return unless @template.source_files.has_candidates?
115
+
116
+ @template.source_files.candidates.each do |source|
117
+ with_csv_file(source.type, source.value, ref_name: source.ref_name)
118
+ end
119
+ end
120
+
121
+ def init_history
122
+ Cure::History::HistoryCache.instance.reset
123
+ end
124
+ end
125
+ end
data/lib/cure/log.rb CHANGED
@@ -4,6 +4,13 @@ require "cure"
4
4
 
5
5
  module Cure
6
6
  module Log
7
+ # @param [String] _message
8
+ def log_trace(_message)
9
+ # Ruby default logger doesnt have trace, so my version
10
+ # is to just uncomment it when you need it for now.
11
+ # Cure.logger.trace(message)
12
+ end
13
+
7
14
  # @param [String] message
8
15
  def log_debug(message)
9
16
  Cure.logger.debug(message)
@@ -20,10 +27,10 @@ module Cure
20
27
  end
21
28
 
22
29
  # @param [String] message
23
- # @param [Exception/Nil] ex
24
- def log_error(message, ex=nil)
30
+ # @param [Exception/Nil] exception
31
+ def log_error(message, exception=nil)
25
32
  Cure.logger.error(message)
26
- Cure.logger.error(ex.backtrace.join("\n")) unless ex.nil?
33
+ Cure.logger.error(exception.backtrace.join("\n")) unless exception.nil?
27
34
  end
28
35
  end
29
36
  end