Class: Simultaneous::BroadcastMessage

Inherits:
Object
  • Object
show all
Defined in:
lib/simultaneous/broadcast_message.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(values = {}) ⇒ BroadcastMessage

Returns a new instance of BroadcastMessage.



8
9
10
11
12
13
14
15
16
# File 'lib/simultaneous/broadcast_message.rb', line 8

def initialize(values = {})
  @domain = (values[:domain] || values["domain"])
  @event = nil
  if (event = (values[:event] || values["event"])) and !event.empty?
    self.event = event
  end
  self.data = (values[:data] || values["data"] || "")
  self.id = (values[:id] || next_id)
end

Instance Attribute Details

#domainObject

Returns the value of attribute domain.



5
6
7
# File 'lib/simultaneous/broadcast_message.rb', line 5

def domain
  @domain
end

#eventObject

Returns the value of attribute event.



6
7
8
# File 'lib/simultaneous/broadcast_message.rb', line 6

def event
  @event
end

#idObject

Returns the value of attribute id.



5
6
7
# File 'lib/simultaneous/broadcast_message.rb', line 5

def id
  @id
end

Instance Method Details

#<<(line) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/simultaneous/broadcast_message.rb', line 34

def <<(line)
  data = line.chomp
  case data
  when /^domain: *(.+)/
    self.domain = $1
  when /^event: *(.+)/
    self.event = $1
  when /^id: *(.+)/
    @id = $1
  when /^data: *(.*)/
    @data << $1
  when /^:/
    # comment
  else
    # malformed request
  end
end

#dataObject



30
31
32
# File 'lib/simultaneous/broadcast_message.rb', line 30

def data
  @data.join("\n").chomp
end

#data=(data) ⇒ Object



26
27
28
# File 'lib/simultaneous/broadcast_message.rb', line 26

def data=(data)
  @data = data.split(/\r\n?|\n\r?/)
end

#event_contentObject



66
67
68
69
70
# File 'lib/simultaneous/broadcast_message.rb', line 66

def event_content
  lines = ["event: #{event}", "id: #{id}"]
  lines.concat(@data.map { |l| "data: #{l}" })
  lines.push("\n")
end

#next_idObject



18
19
20
# File 'lib/simultaneous/broadcast_message.rb', line 18

def next_id
  SecureRandom.uuid
end

#to_eventObject



56
57
58
59
60
# File 'lib/simultaneous/broadcast_message.rb', line 56

def to_event
  lines = ["domain: #{domain}"]
  lines.concat(event_content)
  lines.join("\n")
end

#to_sseObject



62
63
64
# File 'lib/simultaneous/broadcast_message.rb', line 62

def to_sse
  event_content.join("\n")
end

#valid?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/simultaneous/broadcast_message.rb', line 52

def valid?
  @domain && @event && !@data.empty?
end