|
1 | 1 | # frozen_string_literal: true |
2 | 2 |
|
| 3 | +require_relative "hooks/once" |
| 4 | + |
3 | 5 | module TableSync::Receiving |
4 | 6 | class Config |
5 | 7 | attr_reader :model, :events |
@@ -53,19 +55,23 @@ def add_option(name, value_setter_wrapper:, value_as_proc_setter_wrapper:, defau |
53 | 55 | end |
54 | 56 | end |
55 | 57 |
|
56 | | - def add_simple_option(name) |
| 58 | + def add_hook_option(name, hook_class:) |
57 | 59 | ivar = :"@#{name}" |
58 | 60 |
|
59 | | - @default_values_for_options ||= {} |
60 | | - @default_values_for_options[ivar] = proc { [nil, proc {}] } |
61 | | - |
62 | | - define_method(name) do |options = nil, &block| |
63 | | - old_options, old_block = instance_variable_get(ivar) |
| 61 | + default_conditions = { columns: %i[] } |
| 62 | + default_handler = proc { |**_| } |
64 | 63 |
|
65 | | - new_options = options || old_options |
66 | | - new_block = block || old_block |
| 64 | + @default_values_for_options ||= {} |
| 65 | + @default_values_for_options[ivar] = proc do |
| 66 | + hook_class.new( |
| 67 | + conditions: default_conditions, |
| 68 | + handler: default_handler, |
| 69 | + ) |
| 70 | + end |
67 | 71 |
|
68 | | - instance_variable_set(ivar, [new_options, new_block]) |
| 72 | + define_method(name) do |conditions, &handler| |
| 73 | + hook = hook_class.new(conditions:, handler:) |
| 74 | + instance_variable_set(ivar, hook) |
69 | 75 | end |
70 | 76 | end |
71 | 77 | end |
@@ -218,7 +224,10 @@ def option(name) |
218 | 224 | value_as_proc_setter_wrapper: any_value, |
219 | 225 | default: proc { proc { |&block| block.call } } |
220 | 226 |
|
221 | | -TableSync::Receiving::Config.add_simple_option :on_first_sync |
| 227 | +TableSync::Receiving::Config.add_hook_option( |
| 228 | + :on_first_sync, |
| 229 | + hook_class: TableSync::Receiving::Hooks::Once, |
| 230 | +) |
222 | 231 |
|
223 | 232 | %i[ |
224 | 233 | before_update |
|
0 commit comments