10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/auto_previews/preview_extensions.rb', line 10
def auto_preview!(klass = nil)
mailer_class = (klass || self.name.delete_suffix("Preview")).constantize
mailer_class.autopreview_configs.each do |autopreview_config|
methods_to_define = if autopreview_config[:except]
mailer_class.instance_methods(false) - Array(autopreview_config[:except])
elsif autopreview_config[:only]
Array(autopreview_config[:only])
else
mailer_class.instance_methods(false)
end
methods_to_define.each do |m|
model = setup_model(autopreview_config[:model])
scoped_collection = setup_scope(model, autopreview_config)
finder = record_finder(scoped_collection, autopreview_config)
record_proc, preview_params = finder[0], finder[1]
define_method(m) do
mailer_params = {}
record = record_proc.call
if record.nil?
raise ActiveRecord::RecordNotFound, "Cannot find a record. Should be a type of `#{model}`. Create one?"
end
preview_params.each do |k,v|
mailer_params[k] = record.public_send(v)
end
if autopreview_config[:using] == :arguments
mailer_class.public_send(m, *mailer_params.values)
else
mailer_class.with(mailer_params).public_send(m)
end
end
end
end
end
|