Class: Ruflet::Rails::SessionRegistry

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/ruflet/rails/session_registry.rb

Instance Method Summary collapse

Constructor Details

#initializeSessionRegistry

Returns a new instance of SessionRegistry.



30
31
32
33
# File 'lib/ruflet/rails/session_registry.rb', line 30

def initialize
  @sessions = {}
  @mutex = Mutex.new
end

Instance Method Details

#[](key) ⇒ Object



50
51
52
# File 'lib/ruflet/rails/session_registry.rb', line 50

def [](key)
  @mutex.synchronize { @sessions[key] }
end

#add(key:, page:, env: nil, connection_key: nil) ⇒ Object



35
36
37
38
39
# File 'lib/ruflet/rails/session_registry.rb', line 35

def add(key:, page:, env: nil, connection_key: nil)
  session = Session.new(key: key, page: page, env: env, connection_key: connection_key)
  @mutex.synchronize { @sessions[key] = session }
  session
end

#broadcast(&block) ⇒ Object

Raises:

  • (ArgumentError)


76
77
78
79
80
81
82
83
84
85
# File 'lib/ruflet/rails/session_registry.rb', line 76

def broadcast(&block)
  raise ArgumentError, "Ruflet::Rails.broadcast requires a block" unless block

  count = 0
  each do |session|
    block.arity == 1 ? block.call(session.page) : block.call(session.page, session)
    count += 1
  end
  count
end

#clearObject



68
69
70
# File 'lib/ruflet/rails/session_registry.rb', line 68

def clear
  @mutex.synchronize { @sessions.clear }
end

#each(&block) ⇒ Object



54
55
56
57
58
# File 'lib/ruflet/rails/session_registry.rb', line 54

def each(&block)
  return enum_for(:each) unless block

  snapshot.each(&block)
end

#empty?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/ruflet/rails/session_registry.rb', line 64

def empty?
  size.zero?
end

#pagesObject



72
73
74
# File 'lib/ruflet/rails/session_registry.rb', line 72

def pages
  map(&:page)
end

#remove(key, connection_key: nil) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/ruflet/rails/session_registry.rb', line 41

def remove(key, connection_key: nil)
  @mutex.synchronize do
    session = @sessions[key]
    return nil if connection_key && session&.connection_key && session.connection_key != connection_key

    @sessions.delete(key)
  end
end

#sizeObject



60
61
62
# File 'lib/ruflet/rails/session_registry.rb', line 60

def size
  @mutex.synchronize { @sessions.size }
end