Class: Houston::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/houston/client.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeClient

Returns a new instance of Client.



27
28
29
30
31
32
# File 'lib/houston/client.rb', line 27

def initialize
  @gateway_uri = ENV['APN_GATEWAY_URI']
  @feedback_uri = ENV['APN_FEEDBACK_URI']
  @certificate = ENV['APN_CERTIFICATE']
  @passphrase = ENV['APN_CERTIFICATE_PASSPHRASE']
end

Instance Attribute Details

#certificateObject

Returns the value of attribute certificate.



9
10
11
# File 'lib/houston/client.rb', line 9

def certificate
  @certificate
end

#feedback_uriObject

Returns the value of attribute feedback_uri.



9
10
11
# File 'lib/houston/client.rb', line 9

def feedback_uri
  @feedback_uri
end

#gateway_uriObject

Returns the value of attribute gateway_uri.



9
10
11
# File 'lib/houston/client.rb', line 9

def gateway_uri
  @gateway_uri
end

#passphraseObject

Returns the value of attribute passphrase.



9
10
11
# File 'lib/houston/client.rb', line 9

def passphrase
  @passphrase
end

Class Method Details

.developmentObject



12
13
14
15
16
17
# File 'lib/houston/client.rb', line 12

def development
  client = self.new
  client.gateway_uri = APPLE_DEVELOPMENT_GATEWAY_URI
  client.feedback_uri = APPLE_DEVELOPMENT_FEEDBACK_URI
  client
end

.productionObject



19
20
21
22
23
24
# File 'lib/houston/client.rb', line 19

def production
  client = self.new
  client.gateway_uri = APPLE_PRODUCTION_GATEWAY_URI
  client.feedback_uri = APPLE_PRODUCTION_FEEDBACK_URI
  client
end

Instance Method Details

#devicesObject



48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/houston/client.rb', line 48

def devices
  devices = []

  Connection.open(@feedback_uri, @certificate, @passphrase) do |connection|
    while line = connection.read(38)
      feedback = line.unpack('N1n1H140')
      token = feedback[2].scan(/.{0,8}/).join(' ').strip
      devices << token if token
    end
  end

  devices
end

#push(*notifications) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/houston/client.rb', line 34

def push(*notifications)
  return if notifications.empty?

  Connection.open(@gateway_uri, @certificate, @passphrase) do |connection|
    notifications.flatten.each do |notification|
      next unless notification.kind_of?(Notification)
      next if notification.sent?

      connection.write(notification.message)
      notification.mark_as_sent!
    end
  end
end