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.
-
#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.
Instance Method Summary collapse
- #authentication_token ⇒ Object
-
#channel(channel_name) ⇒ Channel
(also: #[])
Return a convenience channel object by name.
-
#channel_info(channel_name, params = {}) ⇒ Hash
Request info for a specific channel.
-
#channels(params = {}) ⇒ Hash
Request a list of occupied channels from the API.
- #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
CONFIGURATION ##.
-
#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
INTERACE 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.
- #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
CONFIGURATION ##
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/pusher/client.rb', line 12 def initialize( = {}) = { :scheme => 'http', :host => 'api.pusherapp.com', :port => 80, }.merge() @scheme, @host, @port, @app_id, @key, @secret = .values_at( :scheme, :host, :port, :app_id, :key, :secret ) @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 |
#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 |
Instance Method Details
#authentication_token ⇒ Object
32 33 34 |
# File 'lib/pusher/client.rb', line 32 def authentication_token Signature::Token.new(@key, @secret) end |
#channel(channel_name) ⇒ Channel Also known as: []
Return a convenience channel object by name. No API request is made.
174 175 176 177 |
# File 'lib/pusher/client.rb', line 174 def channel(channel_name) raise ConfigurationError, 'Missing client configuration: please check that key, secret and app_id are configured.' unless configured? Channel.new(url, channel_name, self) end |
#channel_info(channel_name, params = {}) ⇒ Hash
208 209 210 |
# File 'lib/pusher/client.rb', line 208 def channel_info(channel_name, params = {}) get("/channels/#{channel_name}", params) end |
#channels(params = {}) ⇒ Hash
Request a list of occupied channels from the API
GET /apps//channels
192 193 194 |
# File 'lib/pusher/client.rb', line 192 def channels(params = {}) get('/channels', params) end |
#em_http_client(uri) ⇒ Object
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 |
# File 'lib/pusher/client.rb', line 253 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)
81 82 83 84 85 |
# File 'lib/pusher/client.rb', line 81 def encrypted=(boolean) @scheme = boolean ? 'https' : 'http' # Configure port if it hasn't already been configured @port = boolean ? 443 : 80 end |
#encrypted? ⇒ Boolean
87 88 89 |
# File 'lib/pusher/client.rb', line 87 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.
121 122 123 |
# File 'lib/pusher/client.rb', line 121 def get(path, params = {}) Resource.new(self, 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.
137 138 139 |
# File 'lib/pusher/client.rb', line 137 def get_async(path, params = {}) Resource.new(self, path).get_async(params) 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.
143 144 145 |
# File 'lib/pusher/client.rb', line 143 def post(path, params = {}) Resource.new(self, 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.
150 151 152 |
# File 'lib/pusher/client.rb', line 150 def post_async(path, params = {}) Resource.new(self, path).post_async(params) end |
#resource(path) ⇒ Object
INTERACE WITH THE API ##
99 100 101 |
# File 'lib/pusher/client.rb', line 99 def resource(path) Resource.new(self, path) end |
#sync_http_client ⇒ Object
239 240 241 242 243 244 245 246 247 248 249 250 |
# File 'lib/pusher/client.rb', line 239 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.
93 94 95 |
# File 'lib/pusher/client.rb', line 93 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
227 228 229 |
# File 'lib/pusher/client.rb', line 227 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
234 235 236 |
# File 'lib/pusher/client.rb', line 234 def trigger_async(channels, event_name, data, params = {}) post_async('/events', trigger_params(channels, event_name, data, params)) end |
#url(path = nil) ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/pusher/client.rb', line 37 def url(path = nil) 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.
52 53 54 55 56 57 58 59 60 |
# File 'lib/pusher/client.rb', line 52 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 |