Module: LexxyRealtime

Defined in:
lib/lexxy_realtime.rb,
lib/lexxy_realtime/engine.rb,
lib/lexxy_realtime/version.rb,
lib/lexxy_realtime/form_builder.rb,
lib/lexxy_realtime/collaborative.rb,
lib/generators/lexxy_realtime/install/install_generator.rb

Overview

Rails integration for collaborative Lexxy editing with yrby.

Defined Under Namespace

Modules: Collaborative, FormBuilder, Generators Classes: Engine

Constant Summary collapse

SGID_PURPOSE =

Signed ids from the form helper carry this purpose scoped per field (sgid_purpose), so a token minted elsewhere can't join a document.

:lexxy_realtime
CHANNEL_NAME =

The channel the installer generates and the form helper points elements at.

"DocumentChannel"
VERSION =
"0.4.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.identityObject



24
25
26
27
28
29
30
31
# File 'lib/lexxy_realtime.rb', line 24

def identity
  @identity ||= lambda do |view|
    user = view.respond_to?(:current_user) ? view.current_user : nil
    # Use Anonymous when no display name is available.
    name = user && %i[name username handle].lazy.filter_map { |a| user.try(a).presence }.first
    { name: name || "Anonymous", color: nil }
  end
end

Class Method Details

.collaborator_color(name) ⇒ Object

A stable, readable cursor color per collaborator name.



34
35
36
# File 'lib/lexxy_realtime.rb', line 34

def collaborator_color(name)
  "hsl(#{name.to_s.each_byte.reduce(0) { |acc, b| ((acc * 31) + b) % 360 }}, 70%, 45%)"
end

.sgid_purpose(field) ⇒ Object



18
# File 'lib/lexxy_realtime.rb', line 18

def sgid_purpose(field) = "#{SGID_PURPOSE}/#{field}"