@@ -22,22 +22,20 @@ def call
2222
2323 next if data . empty?
2424
25- version_key = config . version_key ( data :)
26- data . each { |row | row [ version_key ] = version }
27-
28- target_keys = config . target_keys ( data :)
25+ target_keys = config . option ( :target_keys , data :)
2926
3027 validate_data ( data , target_keys :)
3128
3229 data . sort_by! { |row | row . values_at ( *target_keys ) . map { |value | sort_key ( value ) } }
3330
31+ version_key = config . option ( :version_key , data :)
3432 params = { data :, target_keys :, version_key : }
3533
3634 if event == :update
37- params [ :default_values ] = config . default_values ( data :)
35+ params [ :default_values ] = config . option ( :default_values , data :)
3836 end
3937
40- config . wrap_receiving ( event : , **params ) do
38+ config . option ( :wrap_receiving , **params ) do
4139 perform ( config , params )
4240 end
4341 end
@@ -83,25 +81,28 @@ def configs
8381 end
8482
8583 def processed_data ( config )
84+ version_key = config . option ( :version_key , data :)
8685 data . filter_map do |row |
87- next if config . skip ( row :)
86+ next if config . option ( :skip , row :)
8887
8988 row = row . dup
9089
91- config . mapping_overrides ( row :) . each do |before , after |
90+ config . option ( :mapping_overrides , row :) . each do |before , after |
9291 row [ after ] = row . delete ( before )
9392 end
9493
95- config . except ( row :) . each { |x | row . delete ( x ) }
94+ config . option ( :except , row :) . each { |x | row . delete ( x ) }
9695
97- row . merge! ( config . additional_data ( row :) )
96+ row . merge! ( config . option ( :additional_data , row :) )
9897
99- only = config . only ( row :)
98+ only = config . option ( :only , row :)
10099 row , rest = row . partition { |key , _ | key . in? ( only ) } . map ( &:to_h )
101100
102- rest_key = config . rest_key ( row :, rest :)
101+ rest_key = config . option ( :rest_key , row :, rest :)
103102 ( row [ rest_key ] ||= { } ) . merge! ( rest ) if rest_key
104103
104+ row [ version_key ] = version
105+
105106 row
106107 end
107108 end
@@ -138,16 +139,16 @@ def validate_data_types(model, data)
138139 raise TableSync ::DataError . new ( data , errors . keys , errors . to_json )
139140 end
140141
141- def perform ( config , params )
142+ def perform ( config , params ) # rubocop:disable Metrics/MethodLength
142143 model = config . model
143144
144145 model . transaction do
145146 results = if event == :update
146- config . before_update ( **params )
147+ config . option ( :before_update , **params )
147148 validate_data_types ( model , params [ :data ] )
148149 model . upsert ( **params )
149150 else
150- config . before_destroy ( **params )
151+ config . option ( :before_destroy , **params )
151152 model . destroy ( **params )
152153 end
153154
@@ -157,9 +158,15 @@ def perform(config, params)
157158 end
158159
159160 if event == :update
160- model . after_commit { config . after_commit_on_update ( **params , results :) }
161+ model . after_commit do
162+ config . option ( :after_commit_on_update , **params , results :)
163+
164+ Array ( config . option ( :on_first_sync ) ) . each do |hook |
165+ hook . perform ( config :, targets : results ) if hook . enabled?
166+ end
167+ end
161168 else
162- model . after_commit { config . after_commit_on_destroy ( **params , results :) }
169+ model . after_commit { config . option ( :after_commit_on_destroy , **params , results :) }
163170 end
164171 end
165172 end
0 commit comments