Class: Pusher::Client
- Inherits:
-
Object
- Object
- Pusher::Client
- Defined in:
- lib/pusher/client.rb
Instance Attribute Summary collapse
-
#app_id ⇒ Object
Returns the value of attribute app_id.
-
#connect_timeout ⇒ Object
writeonly
Sets the attribute connect_timeout.
-
#host ⇒ Object
Returns the value of attribute host.
-
#http_proxy ⇒ Object
Returns the value of attribute http_proxy.
-
#keep_alive_timeout ⇒ Object
writeonly
Sets the attribute keep_alive_timeout.
-
#key ⇒ Object
Returns the value of attribute key.
-
#notification_host ⇒ Object
Returns the value of attribute notification_host.
-
#notification_scheme ⇒ Object
Returns the value of attribute notification_scheme.
-
#port ⇒ Object
Returns the value of attribute port.
-
#proxy ⇒ Object
readonly
Returns the value of attribute proxy.
-
#receive_timeout ⇒ Object
writeonly
Sets the attribute receive_timeout.
-
#scheme ⇒ Object
Returns the value of attribute scheme.
-
#secret ⇒ Object
Returns the value of attribute secret.
-
#send_timeout ⇒ Object
writeonly
Sets the attribute send_timeout.
Class Method Summary collapse
-
.from_env(key = 'PUSHER_URL') ⇒ Object
Loads the configuration from an url in the environment.
-
.from_url(url) ⇒ Object
Loads the configuration from a url.
Instance Method Summary collapse
-
#authenticate(channel_name, socket_id, custom_data = nil) ⇒ Hash
Generate the expected response for an authentication endpoint.
- #authentication_token ⇒ Object
-
#channel(channel_name) ⇒ Channel
(also: #[])
Return a convenience channel object by name that delegates operations on a channel.
-
#channel_info(channel_name, params = {}) ⇒ Hash
Request info for a specific channel.
-
#channel_users(channel_name, params = {}) ⇒ Hash
Request info for users of a presence channel.
-
#channels(params = {}) ⇒ Hash
Request a list of occupied channels from the API.
- #cluster=(cluster) ⇒ Object
- #em_http_client(uri) ⇒ Object
-
#encrypted=(boolean) ⇒ Object
Configure whether Pusher API calls should be made over SSL (default false).
- #encrypted? ⇒ Boolean
-
#get(path, params = {}) ⇒ Hash
GET arbitrary REST API resource using a synchronous http client.
-
#get_async(path, params = {}) ⇒ Object
GET arbitrary REST API resource using an asynchronous http client.
-
#initialize(options = {}) ⇒ Client
constructor
A new instance of Client.
- #notification_client ⇒ Object
-
#notify(interests, data = {}) ⇒ Hash
Send a push notification.
-
#post(path, params = {}) ⇒ Object
POST arbitrary REST API resource using a synchronous http client.
-
#post_async(path, params = {}) ⇒ Object
POST arbitrary REST API resource using an asynchronous http client.
-
#resource(path) ⇒ Object
INTERACT WITH THE API ##.
- #sync_http_client ⇒ Object
-
#timeout=(value) ⇒ Object
Convenience method to set all timeouts to the same value (in seconds).
-
#trigger(channels, event_name, data, params = {}) ⇒ Hash
Trigger an event on one or more channels.
-
#trigger_async(channels, event_name, data, params = {}) ⇒ Object
Trigger an event on one or more channels asynchronously.
-
#trigger_batch(*events) ⇒ Hash
Trigger multiple events at the same time.
-
#trigger_batch_async(*events) ⇒ Object
Trigger multiple events asynchronously.
- #url(path = nil) ⇒ Object
-
#url=(url) ⇒ Object
Configure Pusher connection by providing a url rather than specifying scheme, key, secret, and app_id separately.
-
#webhook(request) ⇒ Object
Convenience method for creating a new WebHook instance for validating and extracting info from a received WebHook.
Constructor Details
#initialize(options = {}) ⇒ Client
Returns a new instance of Client.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/pusher/client.rb', line 25 def initialize( = {}) = { :scheme => 'http', :port => 80, } if [:use_tls] || [:encrypted] [:scheme] = "https" [:port] = 443 end = .merge() if .has_key?(:host) [:host] = [:host] elsif .has_key?(:cluster) [:host] = "api-#{[:cluster]}.pusher.com" else [:host] = "api.pusherapp.com" end # TODO: Change host name when finalized [:notification_host] = .fetch(:notification_host, "nativepush-cluster1.pusher.com") [:notification_scheme] = .fetch(:notification_scheme, "https") @scheme, @host, @port, @app_id, @key, @secret, @notification_host, @notification_scheme = .values_at( :scheme, :host, :port, :app_id, :key, :secret, :notification_host, :notification_scheme ) @http_proxy = nil self.http_proxy = [:http_proxy] if [:http_proxy] # Default timeouts @connect_timeout = 5 @send_timeout = 5 @receive_timeout = 5 @keep_alive_timeout = 30 end |
Instance Attribute Details
#app_id ⇒ Object
Returns the value of attribute app_id.
5 6 7 |
# File 'lib/pusher/client.rb', line 5 def app_id @app_id end |
#connect_timeout=(value) ⇒ Object (writeonly)
Sets the attribute connect_timeout
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def connect_timeout=(value) @connect_timeout = value end |
#host ⇒ Object
Returns the value of attribute host.
5 6 7 |
# File 'lib/pusher/client.rb', line 5 def host @host end |
#http_proxy ⇒ Object
Returns the value of attribute http_proxy.
6 7 8 |
# File 'lib/pusher/client.rb', line 6 def http_proxy @http_proxy end |
#keep_alive_timeout=(value) ⇒ Object (writeonly)
Sets the attribute keep_alive_timeout
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def keep_alive_timeout=(value) @keep_alive_timeout = value end |
#key ⇒ Object
Returns the value of attribute key.
5 6 7 |
# File 'lib/pusher/client.rb', line 5 def key @key end |
#notification_host ⇒ Object
Returns the value of attribute notification_host.
5 6 7 |
# File 'lib/pusher/client.rb', line 5 def notification_host @notification_host end |
#notification_scheme ⇒ Object
Returns the value of attribute notification_scheme.
5 6 7 |
# File 'lib/pusher/client.rb', line 5 def notification_scheme @notification_scheme end |
#port ⇒ Object
Returns the value of attribute port.
5 6 7 |
# File 'lib/pusher/client.rb', line 5 def port @port end |
#proxy ⇒ Object (readonly)
Returns the value of attribute proxy.
6 7 8 |
# File 'lib/pusher/client.rb', line 6 def proxy @proxy end |
#receive_timeout=(value) ⇒ Object (writeonly)
Sets the attribute receive_timeout
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def receive_timeout=(value) @receive_timeout = value end |
#scheme ⇒ Object
Returns the value of attribute scheme.
5 6 7 |
# File 'lib/pusher/client.rb', line 5 def scheme @scheme end |
#secret ⇒ Object
Returns the value of attribute secret.
5 6 7 |
# File 'lib/pusher/client.rb', line 5 def secret @secret end |
#send_timeout=(value) ⇒ Object (writeonly)
Sets the attribute send_timeout
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def send_timeout=(value) @send_timeout = value end |
Class Method Details
.from_env(key = 'PUSHER_URL') ⇒ Object
Loads the configuration from an url in the environment
13 14 15 16 |
# File 'lib/pusher/client.rb', line 13 def self.from_env(key = 'PUSHER_URL') url = ENV[key] || raise(ConfigurationError, key) from_url(url) end |
.from_url(url) ⇒ Object
Loads the configuration from a url
19 20 21 22 23 |
# File 'lib/pusher/client.rb', line 19 def self.from_url(url) client = new client.url = url client end |
Instance Method Details
#authenticate(channel_name, socket_id, custom_data = nil) ⇒ Hash
Generate the expected response for an authentication endpoint. See pusher.com/docs/authenticating_users for details.
363 364 365 366 |
# File 'lib/pusher/client.rb', line 363 def authenticate(channel_name, socket_id, custom_data = nil) channel_instance = channel(channel_name) channel_instance.authenticate(socket_id, custom_data) end |
#authentication_token ⇒ Object
69 70 71 72 73 |
# File 'lib/pusher/client.rb', line 69 def authentication_token raise ConfigurationError, :key unless @key raise ConfigurationError, :secret unless @secret Pusher::Signature::Token.new(@key, @secret) end |
#channel(channel_name) ⇒ Channel Also known as: []
Return a convenience channel object by name that delegates operations on a channel. No API request is made.
219 220 221 |
# File 'lib/pusher/client.rb', line 219 def channel(channel_name) Channel.new(nil, channel_name, self) end |
#channel_info(channel_name, params = {}) ⇒ Hash
252 253 254 |
# File 'lib/pusher/client.rb', line 252 def channel_info(channel_name, params = {}) get("/channels/#{channel_name}", params) end |
#channel_users(channel_name, params = {}) ⇒ Hash
268 269 270 |
# File 'lib/pusher/client.rb', line 268 def channel_users(channel_name, params = {}) get("/channels/#{channel_name}/users", params) end |
#channels(params = {}) ⇒ Hash
Request a list of occupied channels from the API
GET /apps//channels
236 237 238 |
# File 'lib/pusher/client.rb', line 236 def channels(params = {}) get('/channels', params) end |
#cluster=(cluster) ⇒ Object
131 132 133 |
# File 'lib/pusher/client.rb', line 131 def cluster=(cluster) @host = "api-#{cluster}.pusher.com" end |
#em_http_client(uri) ⇒ Object
383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 |
# File 'lib/pusher/client.rb', line 383 def em_http_client(uri) begin unless defined?(EventMachine) && EventMachine.reactor_running? raise Error, "In order to use async calling you must be running inside an eventmachine loop" end require 'em-http' unless defined?(EventMachine::HttpRequest) connection_opts = { :connect_timeout => @connect_timeout, :inactivity_timeout => @receive_timeout, } if defined?(@proxy) proxy_opts = { :host => @proxy[:host], :port => @proxy[:port] } if @proxy[:user] proxy_opts[:authorization] = [@proxy[:user], @proxy[:password]] end connection_opts[:proxy] = proxy_opts end EventMachine::HttpRequest.new(uri, connection_opts) end end |
#encrypted=(boolean) ⇒ Object
Configure whether Pusher API calls should be made over SSL (default false)
121 122 123 124 125 |
# File 'lib/pusher/client.rb', line 121 def encrypted=(boolean) @scheme = boolean ? 'https' : 'http' # Configure port if it hasn't already been configured @port = boolean ? 443 : 80 end |
#encrypted? ⇒ Boolean
127 128 129 |
# File 'lib/pusher/client.rb', line 127 def encrypted? @scheme == 'https' end |
#get(path, params = {}) ⇒ Hash
GET arbitrary REST API resource using a synchronous http client. All request signing is handled automatically.
165 166 167 |
# File 'lib/pusher/client.rb', line 165 def get(path, params = {}) resource(path).get(params) end |
#get_async(path, params = {}) ⇒ Object
GET arbitrary REST API resource using an asynchronous http client. All request signing is handled automatically.
When the eventmachine reactor is running, the em-http-request gem is used; otherwise an async request is made using httpclient. See README for details and examples.
181 182 183 |
# File 'lib/pusher/client.rb', line 181 def get_async(path, params = {}) resource(path).get_async(params) end |
#notification_client ⇒ Object
320 321 322 323 |
# File 'lib/pusher/client.rb', line 320 def notification_client @notification_client ||= NativeNotification::Client.new(@app_id, @notification_host, @notification_scheme, self) end |
#notify(interests, data = {}) ⇒ Hash
Send a push notification
POST /apps//notifications
335 336 337 |
# File 'lib/pusher/client.rb', line 335 def notify(interests, data = {}) notification_client.notify(interests, data) end |
#post(path, params = {}) ⇒ Object
POST arbitrary REST API resource using a synchronous http client. Works identially to get method, but posts params as JSON in post body.
187 188 189 |
# File 'lib/pusher/client.rb', line 187 def post(path, params = {}) resource(path).post(params) end |
#post_async(path, params = {}) ⇒ Object
POST arbitrary REST API resource using an asynchronous http client. Works identially to get_async method, but posts params as JSON in post body.
194 195 196 |
# File 'lib/pusher/client.rb', line 194 def post_async(path, params = {}) resource(path).post_async(params) end |
#resource(path) ⇒ Object
INTERACT WITH THE API ##
143 144 145 |
# File 'lib/pusher/client.rb', line 143 def resource(path) Resource.new(self, path) end |
#sync_http_client ⇒ Object
369 370 371 372 373 374 375 376 377 378 379 380 |
# File 'lib/pusher/client.rb', line 369 def sync_http_client @client ||= begin require 'httpclient' HTTPClient.new(@http_proxy).tap do |c| c.connect_timeout = @connect_timeout c.send_timeout = @send_timeout c.receive_timeout = @receive_timeout c.keep_alive_timeout = @keep_alive_timeout end end end |
#timeout=(value) ⇒ Object
Convenience method to set all timeouts to the same value (in seconds). For more control, use the individual writers.
137 138 139 |
# File 'lib/pusher/client.rb', line 137 def timeout=(value) @connect_timeout, @send_timeout, @receive_timeout = value, value, value end |
#trigger(channels, event_name, data, params = {}) ⇒ Hash
Trigger an event on one or more channels
POST /apps//events
287 288 289 |
# File 'lib/pusher/client.rb', line 287 def trigger(channels, event_name, data, params = {}) post('/events', trigger_params(channels, event_name, data, params)) end |
#trigger_async(channels, event_name, data, params = {}) ⇒ Object
Trigger an event on one or more channels asynchronously. For parameters see #trigger
309 310 311 |
# File 'lib/pusher/client.rb', line 309 def trigger_async(channels, event_name, data, params = {}) post_async('/events', trigger_params(channels, event_name, data, params)) end |
#trigger_batch(*events) ⇒ Hash
Trigger multiple events at the same time
POST /apps//batch_events
302 303 304 |
# File 'lib/pusher/client.rb', line 302 def trigger_batch(*events) post('/batch_events', trigger_batch_params(events.flatten)) end |
#trigger_batch_async(*events) ⇒ Object
Trigger multiple events asynchronously. For parameters see #trigger_batch
316 317 318 |
# File 'lib/pusher/client.rb', line 316 def trigger_batch_async(*events) post_async('/batch_events', trigger_batch_params(events.flatten)) end |
#url(path = nil) ⇒ Object
76 77 78 79 80 81 82 83 84 |
# File 'lib/pusher/client.rb', line 76 def url(path = nil) raise ConfigurationError, :app_id unless @app_id URI::Generic.build({ :scheme => @scheme, :host => @host, :port => @port, :path => "/apps/#{@app_id}#{path}" }) end |
#url=(url) ⇒ Object
Configure Pusher connection by providing a url rather than specifying scheme, key, secret, and app_id separately.
92 93 94 95 96 97 98 99 100 |
# File 'lib/pusher/client.rb', line 92 def url=(url) uri = URI.parse(url) @scheme = uri.scheme @app_id = uri.path.split('/').last @key = uri.user @secret = uri.password @host = uri.host @port = uri.port end |