Class: Eventflit::Channel
- Inherits:
-
Object
- Object
- Eventflit::Channel
- Defined in:
- lib/eventflit/channel.rb
Overview
Delegates operations for a specific channel from a client
Constant Summary collapse
- INVALID_CHANNEL_REGEX =
/[^A-Za-z0-9_\-=@,.;]/
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
-
#authenticate(socket_id, custom_data = nil) ⇒ Hash
Generate the expected response for an authentication endpoint.
-
#authentication_string(socket_id, custom_string = nil) ⇒ String
Compute authentication string required as part of the authentication endpoint response.
-
#info(attributes = []) ⇒ Hash
Request info for a channel.
-
#initialize(_, name, client = Eventflit) ⇒ Channel
constructor
A new instance of Channel.
-
#trigger(event_name, data, socket_id = nil) ⇒ Object
Trigger event, catching and logging any errors.
-
#trigger!(event_name, data, socket_id = nil) ⇒ Object
Trigger event.
-
#trigger_async(event_name, data, socket_id = nil) ⇒ EM::DefaultDeferrable
Trigger event asynchronously using EventMachine::HttpRequest.
-
#users(params = {}) ⇒ Hash
Request users for a presence channel Only works on presence channels (see: docs.eventflit.com/client_api_guide/client_presence_channels and eventflit.com/docs/rest_api).
Constructor Details
#initialize(_, name, client = Eventflit) ⇒ Channel
Returns a new instance of Channel.
10 11 12 13 14 15 16 17 18 |
# File 'lib/eventflit/channel.rb', line 10 def initialize(_, name, client = Eventflit) if Eventflit::Channel::INVALID_CHANNEL_REGEX.match(name) raise Eventflit::Error, "Illegal channel name '#{name}'" elsif name.length > 200 raise Eventflit::Error, "Channel name too long (limit 164 characters) '#{name}'" end @name = name @client = client end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
7 8 9 |
# File 'lib/eventflit/channel.rb', line 7 def name @name end |
Instance Method Details
#authenticate(socket_id, custom_data = nil) ⇒ Hash
Generate the expected response for an authentication endpoint. See docs.eventflit.com/authenticating_users for details.
169 170 171 172 173 174 175 |
# File 'lib/eventflit/channel.rb', line 169 def authenticate(socket_id, custom_data = nil) custom_data = MultiJson.encode(custom_data) if custom_data auth = authentication_string(socket_id, custom_data) r = {:auth => auth} r[:channel_data] = custom_data if custom_data r end |
#authentication_string(socket_id, custom_string = nil) ⇒ String
Compute authentication string required as part of the authentication endpoint response. Generally the authenticate method should be used in preference to this one
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/eventflit/channel.rb', line 128 def authentication_string(socket_id, custom_string = nil) validate_socket_id(socket_id) unless custom_string.nil? || custom_string.kind_of?(String) raise Error, 'Custom argument must be a string' end string_to_sign = [socket_id, name, custom_string]. compact.map(&:to_s).join(':') Eventflit.logger.debug "Signing #{string_to_sign}" token = @client.authentication_token digest = OpenSSL::Digest::SHA256.new signature = OpenSSL::HMAC.hexdigest(digest, token.secret, string_to_sign) return "#{token.key}:#{signature}" end |
#info(attributes = []) ⇒ Hash
Request info for a channel
97 98 99 |
# File 'lib/eventflit/channel.rb', line 97 def info(attributes = []) @client.channel_info(name, :info => attributes.join(',')) end |
#trigger(event_name, data, socket_id = nil) ⇒ Object
CAUTION! No exceptions will be raised on failure
Trigger event, catching and logging any errors.
- Deprecated
-
This method will be removed in a future gem version. Please
switch to Eventflit.trigger or Eventflit::Client#trigger instead
80 81 82 83 84 85 |
# File 'lib/eventflit/channel.rb', line 80 def trigger(event_name, data, socket_id = nil) trigger!(event_name, data, socket_id) rescue Eventflit::Error => e Eventflit.logger.error("#{e.} (#{e.class})") Eventflit.logger.debug(e.backtrace.join("\n")) end |
#trigger!(event_name, data, socket_id = nil) ⇒ Object
Trigger event
- Deprecated
-
This method will be removed in a future gem version. Please
switch to Eventflit.trigger or Eventflit::Client#trigger instead
63 64 65 66 67 68 69 70 |
# File 'lib/eventflit/channel.rb', line 63 def trigger!(event_name, data, socket_id = nil) params = {} if socket_id validate_socket_id(socket_id) params[:socket_id] = socket_id end @client.trigger(name, event_name, data, params) end |
#trigger_async(event_name, data, socket_id = nil) ⇒ EM::DefaultDeferrable
Trigger event asynchronously using EventMachine::HttpRequest
- Deprecated
-
This method will be removed in a future gem version. Please
switch to Eventflit.trigger_async or Eventflit::Client#trigger_async instead
34 35 36 37 38 39 40 41 |
# File 'lib/eventflit/channel.rb', line 34 def trigger_async(event_name, data, socket_id = nil) params = {} if socket_id validate_socket_id(socket_id) params[:socket_id] = socket_id end @client.trigger_async(name, event_name, data, params) end |
#users(params = {}) ⇒ Hash
Request users for a presence channel Only works on presence channels (see: docs.eventflit.com/client_api_guide/client_presence_channels and eventflit.com/docs/rest_api)
112 113 114 |
# File 'lib/eventflit/channel.rb', line 112 def users(params = {}) @client.channel_users(name, params)[:users] end |