module Collab::HasTrackedDocumentPositions

Public Instance Methods

has_tracked_document_position(pos_name, optional: true) click to toggle source
Calls superclass method
# File lib/collab/has_tracked_document_positions.rb, line 6
def has_tracked_document_position(pos_name, optional: true)
  has_one   pos_name.to_sym, -> { where(name: pos_name) }, class_name: ::Collab.config.tracked_position_model, as: :owner, dependent: :destroy, autosave: true
  validates pos_name.to_sym, presence: !optional

  define_method :"#{pos_name}=" do |pos|
    pos.name = pos_name
    super(pos)
  end
end
has_tracked_document_selection(selection_name) click to toggle source
# File lib/collab/has_tracked_document_positions.rb, line 16
def has_tracked_document_selection(selection_name)
  has_tracked_document_position :"#{selection_name}_anchor"
  has_tracked_document_position :"#{selection_name}_head"

  define_method selection_name do
    anchor = self.send(:"#{selection_name}_anchor")
    head   = self.send(:"#{selection_name}_head")

    ::Collab::DocumentSelection.new anchor, head
  end

  define_method :"#{selection_name}=" do |sel|
    self.send(:"#{selection_name}_anchor=", sel&.anchor)
    self.send(:"#{selection_name}_head=", sel&.head)
  end
end