class ChatX::Room
Attributes
description[R]
id[R]
name[R]
owners[R]
server[R]
stars[R]
users[R]
Public Class Methods
new(server, **opts)
click to toggle source
# File lib/chatx/models/room.rb, line 7 def initialize(server, **opts) if opts.values_at(:room_id).any?(&:nil?) raise ArgumentError, 'Got nil for an expected room property' end @server = server @id = opts[:room_id] track_users if opts[:track_users] track_starred_messages if opts[:track_starred_messages] metadata if opts[:metadata] end
Private Instance Methods
metadata()
click to toggle source
# File lib/chatx/models/room.rb, line 44 def metadata metadata_card = Nokogiri::HTML(open("https://chat.#{@server}.com/rooms/info/#{@id}")).css('.roomcard-xxl') @name = metadata_card.css('h1').first.text @description = metadata_card.css('p').first.text owner_cards = Nokogiri::HTML(open("https://chat.#{@server}.com/rooms/info/#{@id}")).css('.room-ownercards') @owners = owner_cards.each do |e| id, name = e.css('a:first-child').attr('href').split('/') User.new(@server, user_id: id, user_name: name) end end
track_starred_messages()
click to toggle source
# File lib/chatx/models/room.rb, line 32 def track_starred_messages star_page = Nokogiri::HTML open("https://chat.#{@server}.com/rooms/starred/#{@id}") @stars = star_page.css('entry').map do |e| Message.new @server, time_stamp: Time.parse(e.css('published').first.text).utc.to_i, content: e.css('summary').first.text, user_id: e.css('author uri').first.text.split('/').last, message_id: e.css('id').first.text.split('-').last, room_id: @id end end
track_users()
click to toggle source
# File lib/chatx/models/room.rb, line 22 def track_users room_page = Nokogiri::HTML open("https://chat.#{@server}.com/rooms/#{@id}") @users = room_page.css('#room-usercards-container').children.map do |e| e = e.css('.user-header > a').attr('href').split('/') User.new(server, user_name: e[-1], user_id: e[-2]) end end