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 Pusher::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 |