Sha256: 9fdce02aff3c9468aee57a35ea90419e2c72fe1f5536e856cb0e91aa6314e3b9
Contents?: true
Size: 1.93 KB
Versions: 2
Compression:
Stored size: 1.93 KB
Contents
require_relative 'helpers' module ChatX class Room attr_reader :users, :name, :id, :server, :stars, :owners, :description 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 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 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 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 end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
chatx-0.0.1 | lib/chatx/models/room.rb |
chatx-0.0.0.pre.pre3 | lib/chatx/models/room.rb |