module PopulateMe::DocumentMixins::Callbacks
Public Class Methods
included(base)
click to toggle source
# File lib/populate_me/document_mixins/callbacks.rb, line 76 def self.included(base) base.extend(ClassMethods) base.class_eval do [:save,:create,:update,:delete].each do |cb| before cb, :recurse_callback after cb, :recurse_callback end before :create, :ensure_id before :create, :ensure_position after :create, :ensure_not_new after :save, :snapshot before :delete, :ensure_delete_related before :delete, :ensure_delete_attachments after :delete, :ensure_new end end
Public Instance Methods
ensure_delete_attachments()
click to toggle source
# File lib/populate_me/document_mixins/callbacks.rb, line 66 def ensure_delete_attachments self.class.fields.each do |k,v| if v[:type]==:attachment self.attachment(k).delete_all end end end
ensure_id()
click to toggle source
# File lib/populate_me/document_mixins/callbacks.rb, line 27 def ensure_id if self.id.nil? self.id = SecureRandom.hex end self end
ensure_new()
click to toggle source
# File lib/populate_me/document_mixins/callbacks.rb, line 74 def ensure_new; self._is_new = true; end
ensure_not_new()
click to toggle source
# File lib/populate_me/document_mixins/callbacks.rb, line 34 def ensure_not_new; self._is_new = false; end
ensure_position()
click to toggle source
# File lib/populate_me/document_mixins/callbacks.rb, line 36 def ensure_position self.class.fields.each do |k,v| if v[:type]==:position return unless self.__send__(k).nil? values = if v[:scope].nil? self.class.admin_distinct k else self.class.admin_distinct(k, query: { v[:scope] => self.__send__(v[:scope]) }) end val = values.empty? ? 0 : (values.max + 1) self.set k => val end end self end
exec_callback(name)
click to toggle source
# File lib/populate_me/document_mixins/callbacks.rb, line 7 def exec_callback name name = name.to_sym return self if self.class.callbacks[name].nil? self.class.callbacks[name].each do |job| if job.respond_to?(:call) self.instance_exec name, &job else meth = self.method(job) meth.arity==1 ? meth.call(name) : meth.call end end self end
recurse_callback(name)
click to toggle source
# File lib/populate_me/document_mixins/callbacks.rb, line 21 def recurse_callback name nested_docs.each do |d| d.exec_callback name end end