Class: JsChat::Room
- Inherits:
-
Object
- Object
- JsChat::Room
- Defined in:
- lib/jschat/server.rb
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
-
#users ⇒ Object
Returns the value of attribute users.
Class Method Summary collapse
- .find(item) ⇒ Object
- .find_or_create(room_name) ⇒ Object
- .rooms ⇒ Object
- .valid_name?(name) ⇒ Boolean
Instance Method Summary collapse
- #add_to_lastlog(message) ⇒ Object
- #change_notice(user, response) ⇒ Object
-
#initialize(name) ⇒ Room
constructor
A new instance of Room.
- #join(user) ⇒ Object
- #join_notice(user) ⇒ Object
- #last_update_time ⇒ Object
- #lastlog(since = nil) ⇒ Object
- #member_names ⇒ Object
- #message_search(query, limit) ⇒ Object
- #messages_since(since) ⇒ Object
- #notice(user, message, all = false) ⇒ Object
- #part(user) ⇒ Object
- #part_notice(user) ⇒ Object
- #quit_notice(user) ⇒ Object
- #search(query, limit = 100) ⇒ Object
- #send_message(message) ⇒ Object
- #to_json ⇒ Object
Constructor Details
#initialize(name) ⇒ Room
Returns a new instance of Room.
118 119 120 121 |
# File 'lib/jschat/server.rb', line 118 def initialize(name) @name = name @users = [] end |
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
116 117 118 |
# File 'lib/jschat/server.rb', line 116 def name @name end |
#users ⇒ Object
Returns the value of attribute users.
116 117 118 |
# File 'lib/jschat/server.rb', line 116 def users @users end |
Class Method Details
.find(item) ⇒ Object
127 128 129 130 131 132 133 134 135 |
# File 'lib/jschat/server.rb', line 127 def self.find(item) @@rooms ||= [] if item.kind_of? String @@rooms.find { |room| room.name.downcase == item.downcase if room.name } elsif item.kind_of? User @@rooms.find_all { |room| room.users.include? item } end end |
.find_or_create(room_name) ⇒ Object
137 138 139 140 141 142 143 144 |
# File 'lib/jschat/server.rb', line 137 def self.find_or_create(room_name) room = find room_name if room.nil? room = new(room_name) @@rooms << room end room end |
.rooms ⇒ Object
146 147 148 |
# File 'lib/jschat/server.rb', line 146 def self.rooms @@rooms end |
.valid_name?(name) ⇒ Boolean
123 124 125 |
# File 'lib/jschat/server.rb', line 123 def self.valid_name?(name) User.valid_name?(name[1..-1]) and name[0].chr == '#' end |
Instance Method Details
#add_to_lastlog(message) ⇒ Object
176 177 178 179 180 181 |
# File 'lib/jschat/server.rb', line 176 def add_to_lastlog() if ['time'] = Time.now.utc JsChat::Storage.driver.log , name end end |
#change_notice(user, response) ⇒ Object
234 235 236 |
# File 'lib/jschat/server.rb', line 234 def change_notice(user, response) notice(user, response, true) end |
#join(user) ⇒ Object
183 184 185 186 187 188 189 190 191 192 |
# File 'lib/jschat/server.rb', line 183 def join(user) if @users.include? user Error.new(:already_joined, 'Already in that room') else @users << user user.rooms << self join_notice user { 'display' => 'join', 'join' => { 'user' => user.name, 'room' => @name } } end end |
#join_notice(user) ⇒ Object
238 239 240 |
# File 'lib/jschat/server.rb', line 238 def join_notice(user) notice(user, { 'display' => 'join_notice', 'join_notice' => { 'user' => user.name, 'room' => @name } }) end |
#last_update_time ⇒ Object
158 159 160 161 |
# File 'lib/jschat/server.rb', line 158 def last_update_time = JsChat::Storage.driver.lastlog(LASTLOG_DEFAULT, name).last ['time'] if end |
#lastlog(since = nil) ⇒ Object
150 151 152 |
# File 'lib/jschat/server.rb', line 150 def lastlog(since = nil) { 'display' => 'messages', 'messages' => (since) } end |
#member_names ⇒ Object
216 217 218 |
# File 'lib/jschat/server.rb', line 216 def member_names @users.collect { |user| user.name } end |
#message_search(query, limit) ⇒ Object
172 173 174 |
# File 'lib/jschat/server.rb', line 172 def (query, limit) JsChat::Storage.driver.search(query, name, limit) end |
#messages_since(since) ⇒ Object
163 164 165 166 167 168 169 170 |
# File 'lib/jschat/server.rb', line 163 def (since) = JsChat::Storage.driver.lastlog(LASTLOG_DEFAULT, name) if since.nil? else .select { |m| m['time'] && m['time'] > since } end end |
#notice(user, message, all = false) ⇒ Object
224 225 226 227 228 229 230 231 232 |
# File 'lib/jschat/server.rb', line 224 def notice(user, , all = false) add_to_lastlog @users.each do |u| if (u != user and !all) or all u.connection.send_response() end end end |
#part(user) ⇒ Object
194 195 196 197 198 199 200 201 202 203 |
# File 'lib/jschat/server.rb', line 194 def part(user) if not @users.include?(user) Error.new(:not_in_room, 'Not in that room') else user.rooms.delete_if { |r| r == self } @users.delete_if { |u| u == user } part_notice user { 'display' => 'part', 'part' => { 'user' => user.name, 'room' => @name } } end end |
#part_notice(user) ⇒ Object
242 243 244 |
# File 'lib/jschat/server.rb', line 242 def part_notice(user) notice(user, { 'display' => 'part_notice', 'part_notice' => { 'user' => user.name, 'room' => @name } }) end |
#quit_notice(user) ⇒ Object
246 247 248 249 |
# File 'lib/jschat/server.rb', line 246 def quit_notice(user) notice(user, { 'display' => 'quit_notice', 'quit_notice' => { 'user' => user.name, 'room' => @name } }) @users.delete_if { |u| u == user } end |
#search(query, limit = 100) ⇒ Object
154 155 156 |
# File 'lib/jschat/server.rb', line 154 def search(query, limit = 100) { 'display' => 'messages', 'messages' => (query, limit) } end |
#send_message(message) ⇒ Object
205 206 207 208 209 210 211 212 213 214 |
# File 'lib/jschat/server.rb', line 205 def () ['room'] = name response = { 'display' => 'message', 'message' => } add_to_lastlog response @users.each do |user| user.connection.send_response response end end |
#to_json ⇒ Object
220 221 222 |
# File 'lib/jschat/server.rb', line 220 def to_json { 'name' => @name, 'members' => member_names }.to_json end |