class ActivePreview::Builder
Attributes
klass[R]
model[R]
params[R]
parent[R]
preview[R]
updated_associations[R]
Public Class Methods
build(**args)
click to toggle source
# File lib/active_preview/builder.rb, line 5 def self.build(**args) new(**args).build end
new(model:, params: {}, parent: nil)
click to toggle source
# File lib/active_preview/builder.rb, line 9 def initialize(model:, params: {}, parent: nil) @model = model @params = params @klass = model.class @parent = parent end
Public Instance Methods
build()
click to toggle source
# File lib/active_preview/builder.rb, line 16 def build build_preview_object update_associations associate_parent load_associations return preview end
Private Instance Methods
associate_parent()
click to toggle source
# File lib/active_preview/builder.rb, line 64 def associate_parent return unless parent association = association_inverse(parent_class: parent.model_object.class, child_class: klass) preview.send("#{association}=", parent) @updated_associations << association end
build_children(params_key, association)
click to toggle source
# File lib/active_preview/builder.rb, line 54 def build_children(params_key, association) child_params = params[params_key].to_h.values .sort! { |a, b| a["id"] <=> b["id"] } saved = model.send(association).order(:id) child_klass = class_of_association(base_class: klass, association: association) BatchBuilder.build(klass: child_klass, saved_models: saved, params: child_params, parent: preview) end
build_preview_object()
click to toggle source
# File lib/active_preview/builder.rb, line 29 def build_preview_object @preview ||= preview_class.new(klass.new(model.attributes.merge(params))) end
child_params_keys()
click to toggle source
# File lib/active_preview/builder.rb, line 46 def child_params_keys @child_params_keys ||= params.map do |k, _| a = association_from_key(k) # TODO: singular associations k if associations(klass).include?(a) && !singular?(a) end.compact end
load_associations()
click to toggle source
# File lib/active_preview/builder.rb, line 72 def load_associations associations(klass).each do |a| next if updated_associations.include? a next if preview.ignored_associations.include? a saved = [*model.send(a)] next if saved.empty? || !saved.first.respond_to?(:preview) to_assign = BatchBuilder.build(klass: saved.first.class, saved_models: saved, parent: preview) to_assign = to_assign.first if singular? a preview.send("#{a}=", to_assign) end end
preview_class()
click to toggle source
# File lib/active_preview/builder.rb, line 33 def preview_class "#{klass}Preview".constantize end
update_associations()
click to toggle source
# File lib/active_preview/builder.rb, line 37 def update_associations @updated_associations ||= child_params_keys.map do |params_key| association_from_key(params_key).tap do |a| next if preview.ignored_associations.include? a preview.send("#{a}=", build_children(params_key, a)) end end end