Skip to content

Commit d08ea32

Browse files
committed
Add the after hook option to Scalient::ActiveRecord::AssociationInversing
1 parent a6d904c commit d08ea32

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

app/models/concerns/scalient/active_record/association_inversing.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ module ActiveRecord
1919
module AssociationInversing
2020
extend ActiveSupport::Concern
2121

22-
ALLOWED_CREATE_INVERSE_OPTIONS = [:multiplicity, :passthrough_options, :scope, :through].freeze
22+
ALLOWED_CREATE_INVERSE_OPTIONS = [:after, :multiplicity, :passthrough_options, :scope, :through].freeze
2323

2424
included do
2525
raise ArgumentError, "This concern should be prepended"
@@ -38,6 +38,7 @@ def belongs_to(association_name, scope = nil, **options)
3838
create_inverse_scope:,
3939
create_inverse_passthrough_options:,
4040
create_inverse_multiplicity:,
41+
create_inverse_after_hook:
4142
}
4243

4344
class_name = options[:class_name] || new_reflection.name.to_s.camelize
@@ -91,6 +92,8 @@ def belongs_to(association_name, scope = nil, **options)
9192
else
9293
raise "Control should never reach here"
9394
end
95+
96+
target_class.instance_exec(&create_inverse_after_hook)
9497
end
9598

9699
reflections
@@ -126,6 +129,7 @@ def create_has_inverse(new_reflection, create_inverse_options, **options)
126129
create_inverse_through_name:,
127130
create_inverse_passthrough_options:,
128131
create_inverse_multiplicity:,
132+
create_inverse_after_hook:
129133
}
130134

131135
class_name = options[:class_name] ||
@@ -236,6 +240,8 @@ def create_has_inverse(new_reflection, create_inverse_options, **options)
236240
end
237241
end
238242

243+
target_class.instance_exec(&create_inverse_after_hook)
244+
239245
new_reflection
240246
end
241247

@@ -244,6 +250,7 @@ def normalize_create_inverse_options(create_inverse_options)
244250
create_inverse_through_name = nil
245251
create_inverse_passthrough_options = {}
246252
create_inverse_multiplicity = :many
253+
create_inverse_after_hook = -> {}
247254

248255
if create_inverse_options.is_a?(Hash)
249256
invalid_options = (create_inverse_options.keys - ALLOWED_CREATE_INVERSE_OPTIONS)
@@ -258,6 +265,7 @@ def normalize_create_inverse_options(create_inverse_options)
258265
create_inverse_passthrough_options = create_inverse_options[:passthrough_options] ||
259266
create_inverse_passthrough_options
260267
create_inverse_multiplicity = (create_inverse_options[:multiplicity] || create_inverse_multiplicity).to_sym
268+
create_inverse_after_hook = create_inverse_options[:after] || create_inverse_after_hook
261269

262270
case create_inverse_multiplicity
263271
when :many, :one
@@ -271,6 +279,7 @@ def normalize_create_inverse_options(create_inverse_options)
271279
create_inverse_through_name:,
272280
create_inverse_passthrough_options:,
273281
create_inverse_multiplicity:,
282+
create_inverse_after_hook:,
274283
}
275284
end
276285
end

0 commit comments

Comments
 (0)