class LooseLeaf::DocumentAttribute
Attributes
attribute[R]
document[R]
Public Class Methods
new(document, attribute)
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 5 def initialize(document, attribute) @document = document @attribute = attribute @operations = [] end
Public Instance Methods
apply_operation(operation, client_version)
click to toggle source
Based on github.com/Operational-Transformation/ot.js/blob/15d4e7/lib/server.js#L16
# File lib/loose_leaf/document_attribute.rb, line 13 def apply_operation(operation, client_version) Rails.logger.debug "Applying client version #{client_version}, server version: #{version}" unless client_version > version operation = transform_old_operation(operation, client_version) end store_operation(operation) self.value = new_text(operation) [version, operation] end
clear_cache()
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 41 def clear_cache Rails.cache.delete(value_key) end
clear_operations_cache()
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 45 def clear_operations_cache Rails.cache.delete(operations_key) end
value()
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 31 def value cached_value || document.attributes[attribute.to_s] end
value=(value)
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 35 def value=(value) return unless document.persisted? Rails.cache.write(value_key, value) end
version()
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 27 def version operations.length end
Private Instance Methods
cached_value()
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 55 def cached_value return unless document.persisted? Rails.cache.read(value_key) end
new_text(operation)
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 72 def new_text(operation) operation.apply(value || '') end
operations()
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 64 def operations Rails.cache.read(operations_key) || [] end
operations_key()
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 60 def operations_key "loose_leaf-#{document.class}-#{document.id}-#{attribute}-operations" end
store_operation(operation)
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 68 def store_operation(operation) Rails.cache.write(operations_key, operations + [operation]) end
transform_old_operation(operation, client_version)
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 76 def transform_old_operation(operation, client_version) server_version = version concurrent_operations = operations.slice( client_version - 1, server_version - client_version + 1 ) concurrent_operations.each do |other_operation| operation = OT::TextOperation.transform(operation, other_operation).first end operation end
value_key()
click to toggle source
# File lib/loose_leaf/document_attribute.rb, line 51 def value_key "loose_leaf-#{document.class}-#{document.id}-#{attribute}" end