Module: SessionManagementMethods

Included in:
StoryTeller::IO::Session
Defined in:
lib/story_teller/session.rb

Overview

The SessionManagementMethods module

Defined Under Namespace

Classes: Registry

Constant Summary collapse

SessionsByChannel =
Registry.new
SessionsByPlayer =
Registry.new

Instance Method Summary collapse

Instance Method Details

#[](channel) ⇒ Object



84
85
86
# File 'lib/story_teller/session.rb', line 84

def [](channel)
  sessions_by_channel[channel]
end

#[]=(channel, session) ⇒ Object



88
89
90
# File 'lib/story_teller/session.rb', line 88

def []=(channel, session)
  sessions_by_channel[channel] = session
end

#add_promiscuous_states(*states) ⇒ Object



28
29
30
# File 'lib/story_teller/session.rb', line 28

def add_promiscuous_states(*states)
  Promiscuous.merge states.flatten
end

#channelsObject



80
81
82
# File 'lib/story_teller/session.rb', line 80

def channels
  sessions_by_channel.keys
end

#get(channel) ⇒ Object



96
97
98
# File 'lib/story_teller/session.rb', line 96

def get(channel)
  sessions_by_channel[channel] ||= new(channel)
end

#include?(channel) ⇒ Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/story_teller/session.rb', line 92

def include?(channel)
  sessions_by_channel.include?(channel)
end

#of(obj) ⇒ Object



65
66
67
68
69
70
71
72
73
74
# File 'lib/story_teller/session.rb', line 65

def of(obj)
  return nil if obj.nil?
  return obj if obj.is_a?(self)

  sessions_by_channel[obj] ||
    sessions_by_player[obj] ||
    session_for_method(obj, :player) ||
    session_for_method(obj, :selfobj) ||
    session_for_ivar(obj, :@player)
end

#playersObject



76
77
78
# File 'lib/story_teller/session.rb', line 76

def players
  sessions_by_player.keys
end

#register(channel, session) ⇒ Object



40
41
42
43
44
# File 'lib/story_teller/session.rb', line 40

def register(channel, session)
  sessions_by_channel[channel] = session
  session.channel = channel if session.respond_to?(:channel=)
  session
end

#register_player(player, session) ⇒ Object



46
47
48
49
# File 'lib/story_teller/session.rb', line 46

def register_player(player, session)
  sessions_by_player[player] = session
  session
end

#release_player(player, session = nil) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/story_teller/session.rb', line 57

def release_player(player, session = nil)
  return nil if player.nil?
  return sessions_by_player.delete(player) if session.nil?
  return sessions_by_player.delete(player) if sessions_by_player[player].equal?(session)

  nil
end

#sessions_by_channelObject



32
33
34
# File 'lib/story_teller/session.rb', line 32

def sessions_by_channel
  SessionsByChannel
end

#sessions_by_playerObject



36
37
38
# File 'lib/story_teller/session.rb', line 36

def sessions_by_player
  SessionsByPlayer
end

#unregister(channel) ⇒ Object



51
52
53
54
55
# File 'lib/story_teller/session.rb', line 51

def unregister(channel)
  session = sessions_by_channel.delete(channel)
  sessions_by_player.delete_if { |_player, candidate| candidate.equal?(session) }
  session
end