Class: Ruflet::Rails::SessionRegistry
- Inherits:
-
Object
- Object
- Ruflet::Rails::SessionRegistry
- Includes:
- Enumerable
- Defined in:
- lib/ruflet/rails/session_registry.rb
Instance Method Summary collapse
- #[](key) ⇒ Object
- #add(key:, page:, env: nil, connection_key: nil) ⇒ Object
- #broadcast(&block) ⇒ Object
- #clear ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
-
#initialize ⇒ SessionRegistry
constructor
A new instance of SessionRegistry.
- #pages ⇒ Object
- #remove(key, connection_key: nil) ⇒ Object
- #size ⇒ Object
Constructor Details
#initialize ⇒ SessionRegistry
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
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 |
#clear ⇒ Object
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
64 65 66 |
# File 'lib/ruflet/rails/session_registry.rb', line 64 def empty? size.zero? end |
#pages ⇒ Object
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 |
#size ⇒ Object
60 61 62 |
# File 'lib/ruflet/rails/session_registry.rb', line 60 def size @mutex.synchronize { @sessions.size } end |