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.
-
#encryption_master_key ⇒ Object
Returns the value of attribute encryption_master_key.
-
#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
-
#encryption_master_key_base64=(s) ⇒ Object
Set an encryption_master_key to use with private-encrypted channels from a base64 encoded string.
-
#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.
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 67 68 69 70 71 72 73 |
# File 'lib/pusher/client.rb', line 27 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 ) if .has_key?(:encryption_master_key_base64) @encryption_master_key = Base64.decode64([:encryption_master_key_base64]) end @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.
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def app_id @app_id end |
#connect_timeout=(value) ⇒ Object (writeonly)
Sets the attribute connect_timeout
9 10 11 |
# File 'lib/pusher/client.rb', line 9 def connect_timeout=(value) @connect_timeout = value end |
#encryption_master_key ⇒ Object
Returns the value of attribute encryption_master_key.
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def encryption_master_key @encryption_master_key end |
#host ⇒ Object
Returns the value of attribute host.
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def host @host end |
#http_proxy ⇒ Object
Returns the value of attribute http_proxy.
8 9 10 |
# File 'lib/pusher/client.rb', line 8 def http_proxy @http_proxy end |
#keep_alive_timeout=(value) ⇒ Object (writeonly)
Sets the attribute keep_alive_timeout
9 10 11 |
# File 'lib/pusher/client.rb', line 9 def keep_alive_timeout=(value) @keep_alive_timeout = value end |
#key ⇒ Object
Returns the value of attribute key.
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def key @key end |
#notification_host ⇒ Object
Returns the value of attribute notification_host.
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def notification_host @notification_host end |
#notification_scheme ⇒ Object
Returns the value of attribute notification_scheme.
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def notification_scheme @notification_scheme end |
#port ⇒ Object
Returns the value of attribute port.
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def port @port end |
#proxy ⇒ Object (readonly)
Returns the value of attribute proxy.
8 9 10 |
# File 'lib/pusher/client.rb', line 8 def proxy @proxy end |
#receive_timeout=(value) ⇒ Object (writeonly)
Sets the attribute receive_timeout
9 10 11 |
# File 'lib/pusher/client.rb', line 9 def receive_timeout=(value) @receive_timeout = value end |
#scheme ⇒ Object
Returns the value of attribute scheme.
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def scheme @scheme end |
#secret ⇒ Object
Returns the value of attribute secret.
7 8 9 |
# File 'lib/pusher/client.rb', line 7 def secret @secret end |
#send_timeout=(value) ⇒ Object (writeonly)
Sets the attribute send_timeout
9 10 11 |
# File 'lib/pusher/client.rb', line 9 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
15 16 17 18 |
# File 'lib/pusher/client.rb', line 15 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
21 22 23 24 25 |
# File 'lib/pusher/client.rb', line 21 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.
376 377 378 379 |
# File 'lib/pusher/client.rb', line 376 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
76 77 78 79 80 |
# File 'lib/pusher/client.rb', line 76 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.
232 233 234 |
# File 'lib/pusher/client.rb', line 232 def channel(channel_name) Channel.new(nil, channel_name, self) end |
#channel_info(channel_name, params = {}) ⇒ Hash
265 266 267 |
# File 'lib/pusher/client.rb', line 265 def channel_info(channel_name, params = {}) get("/channels/#{channel_name}", params) end |
#channel_users(channel_name, params = {}) ⇒ Hash
281 282 283 |
# File 'lib/pusher/client.rb', line 281 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
249 250 251 |
# File 'lib/pusher/client.rb', line 249 def channels(params = {}) get('/channels', params) end |
#cluster=(cluster) ⇒ Object
138 139 140 |
# File 'lib/pusher/client.rb', line 138 def cluster=(cluster) @host = "api-#{cluster}.pusher.com" end |
#em_http_client(uri) ⇒ Object
396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 |
# File 'lib/pusher/client.rb', line 396 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)
128 129 130 131 132 |
# File 'lib/pusher/client.rb', line 128 def encrypted=(boolean) @scheme = boolean ? 'https' : 'http' # Configure port if it hasn't already been configured @port = boolean ? 443 : 80 end |
#encrypted? ⇒ Boolean
134 135 136 |
# File 'lib/pusher/client.rb', line 134 def encrypted? @scheme == 'https' end |
#encryption_master_key_base64=(s) ⇒ Object
Set an encryption_master_key to use with private-encrypted channels from a base64 encoded string.
150 151 152 |
# File 'lib/pusher/client.rb', line 150 def encryption_master_key_base64=(s) @encryption_master_key = s ? Base64.decode64(s) : nil end |
#get(path, params = {}) ⇒ Hash
GET arbitrary REST API resource using a synchronous http client. All request signing is handled automatically.
178 179 180 |
# File 'lib/pusher/client.rb', line 178 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.
194 195 196 |
# File 'lib/pusher/client.rb', line 194 def get_async(path, params = {}) resource(path).get_async(params) end |
#notification_client ⇒ Object
333 334 335 336 |
# File 'lib/pusher/client.rb', line 333 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
348 349 350 |
# File 'lib/pusher/client.rb', line 348 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.
200 201 202 |
# File 'lib/pusher/client.rb', line 200 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.
207 208 209 |
# File 'lib/pusher/client.rb', line 207 def post_async(path, params = {}) resource(path).post_async(params) end |
#resource(path) ⇒ Object
INTERACT WITH THE API ##
156 157 158 |
# File 'lib/pusher/client.rb', line 156 def resource(path) Resource.new(self, path) end |
#sync_http_client ⇒ Object
382 383 384 385 386 387 388 389 390 391 392 393 |
# File 'lib/pusher/client.rb', line 382 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.
144 145 146 |
# File 'lib/pusher/client.rb', line 144 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
300 301 302 |
# File 'lib/pusher/client.rb', line 300 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
322 323 324 |
# File 'lib/pusher/client.rb', line 322 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
315 316 317 |
# File 'lib/pusher/client.rb', line 315 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
329 330 331 |
# File 'lib/pusher/client.rb', line 329 def trigger_batch_async(*events) post_async('/batch_events', trigger_batch_params(events.flatten)) end |
#url(path = nil) ⇒ Object
83 84 85 86 87 88 89 90 91 |
# File 'lib/pusher/client.rb', line 83 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.
99 100 101 102 103 104 105 106 107 |
# File 'lib/pusher/client.rb', line 99 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 |