class AjaxChat

Attributes

rws[R]
views[R]

Public Class Methods

new(chatobj=ChatCore.new, rws: DummyRws.new(self), config: nil, debug: false) click to toggle source
# File lib/h2g_ajaxchat.rb, line 376
def initialize(chatobj=ChatCore.new, rws: DummyRws.new(self), config: nil, 
               debug: false)
  
  @chat, @rws, @debug = chatobj, rws, debug    

  @plugins =  if config then
  
    SimpleConfig.new(config).to_h.map do |name, settings|
      
      puts 'name: ' + name.inspect if @debug
      settings = {} if settings.is_a? String
            
      next if settings[:disabled]
      pluginklass_name = 'AjaxChatPlugin' + name.to_s
      
      #Kernel.const_get(pluginklass_name).new(self, settings, debug: false)
      eval("#{pluginklass_name}.new(self, #{settings}, debug: false)")
      
    end.compact  
    
  else
    
    []
    
  end
  
  @h = {}
  
  @index, @login, @logout, @logout_post  = \
      [Index, Login, Logout, LogoutPost].map do |klass|
    
    klass.new @h
    
  end
  
  @views = {
    index: @index,
    login: @login,
    logout: @logout,
    logout_post: @logout_post
  }
  
  @plugins.each {|plugin| plugin.apply if plugin.respond_to? :apply }
  
end

Public Instance Methods

chatter(newmsg=nil) click to toggle source
# File lib/h2g_ajaxchat.rb, line 422
def chatter(newmsg=nil)
  
  id, users = @rws.req.session[:session_id].to_s, @chat.users
  
  chat = @chat

  # check for new messages to be added via the plugins
  @plugins.each do |plugin|
    
    next unless plugin.respond_to? :messages
    plugin.messages.each {|x| chat.append_message *x }
    
  end    
  
  plugins = @plugins

  @chat.chatter(@rws.req, newmsg) do  |t, uid, username, msg|
          
    plugins.each do |x|
                
      x.on_newmessage(t, uid, username, msg) if x.respond_to? :on_newmessage
      
    end   
        
    s2 = if id == uid then
      "you: %s" % msg
    else
      "%s: %s" % [users[uid], msg]
    end
    
    "<p><span id='time'>%s</span> %s</p>" % [t.strftime("%H:%M:%S"), s2]
    
  end        
      
end
index() click to toggle source
# File lib/h2g_ajaxchat.rb, line 485
def index()

  if @rws.req.session[:username] then
    
    @h[:username] = @rws.req.session[:username]
    view @index
    
  else
    
    @rws.redirect 'login'
    
  end

end
login() click to toggle source
# File lib/h2g_ajaxchat.rb, line 458
def login()

  view @login

end
login_post(username) click to toggle source
# File lib/h2g_ajaxchat.rb, line 464
def login_post(username)

  @chat.login @rws.req, username
  @h[:username] = username
  @rws.redirect 'index'

end
logout() click to toggle source
# File lib/h2g_ajaxchat.rb, line 472
def logout()

  view @logout

end
logout_post() click to toggle source
# File lib/h2g_ajaxchat.rb, line 478
def logout_post()

  @chat.logout @rws.req            
  view @logout_post 

end
messages() click to toggle source

used for debugging

# File lib/h2g_ajaxchat.rb, line 501
def messages()
  @chat.messages
end
req(obj) click to toggle source
# File lib/h2g_ajaxchat.rb, line 505
def req(obj)
  
  @rws.req = obj
  self
  
end
users() click to toggle source

used for debugging

# File lib/h2g_ajaxchat.rb, line 513
def users()
  @chat.users
end

Private Instance Methods

view(obj) click to toggle source
# File lib/h2g_ajaxchat.rb, line 519
def view(obj)
  
  puts 'inside view obj: ' + obj.inspect if @debug
  
  if obj.to_s.length > 0 then
    obj.to_s
  else
    obj
  end
end