pusher 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c321a0933bab4b4ccfbefa2c9e83eadab92d622c
4
- data.tar.gz: ecb892017e868a125e8a11bdb130c8f9069d9dcb
3
+ metadata.gz: 6445dc1dff7034c9fa013bb13c06d797a3d508d3
4
+ data.tar.gz: cbadd3ea95efed035d3c8f87af33b76d7315b14c
5
5
  SHA512:
6
- metadata.gz: 9db9cd31686cab8565d2fc2a0b4c57270728b69dc592c2dbb5baaa7c7df509b1c40836e3f9d550703e2e330b5c5198defc7935e5033ab7039bba91015ea3c5b7
7
- data.tar.gz: cea7de20ba9b57db2ff5e58fbc8bed35dfd8cf02ca88fb31b3929ba34b7a6036fef6b94fba0e244e0cc3b0549c288b5d3bf8d3d348e9acee0587542c31ab2e87
6
+ metadata.gz: 4f512577534b021e70ffe2d87838c7be5437139d6f0a38d90d4ef467d8e0d738192033fcdfd21aad3a9c88370908417bf03cb7450d887ccf9cfe05130d29c068
7
+ data.tar.gz: 3ca887136f17144e1fa3ca1fa8c35a12ce82ee5d0f16711da327c0429f4042f041d2df6b2e6f02f0f3a2a3eaba0ed0f0db0ace46eecff914d330b264ebcf20dd
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+
2
+ 0.18.0 / 2016-05-15
3
+ ==================
4
+
5
+ * Introduce `Pusher::Client.from_env`
6
+ * Improve error handling on missing config
7
+
1
8
  0.17.0 / 2016-02-22
2
9
  ==================
3
10
 
data/README.md CHANGED
@@ -55,10 +55,16 @@ pusher_client = Pusher::Client.new(
55
55
 
56
56
  This will set the `host` to `api-<cluster>.pusher.com`. If you pass both `host` and `cluster` options, the `host` will take precendence and `cluster` will be ignored.
57
57
 
58
- ### Global (Deprecated)
58
+ Finally, if you have the configuration set in an `PUSHER_URL` environment
59
+ variable, you can use:
60
+
61
+ ``` ruby
62
+ pusher_client = Pusher::Client.from_env
63
+ ```
64
+
65
+ ### Global
59
66
 
60
67
  Configuring Pusher can also be done globally on the Pusher class.
61
- *NOTE! This is a deprecated feature and will be removed in future versions of this library!*
62
68
 
63
69
  ``` ruby
64
70
  Pusher.app_id = 'your-pusher-app-id'
data/lib/pusher/client.rb CHANGED
@@ -9,6 +9,14 @@ module Pusher
9
9
 
10
10
  ## CONFIGURATION ##
11
11
 
12
+ # Loads the configuration from an url in the environment
13
+ def self.from_env(key = 'PUSHER_URL')
14
+ url = ENV[key] || raise(ConfigurationError, key)
15
+ client = new
16
+ client.url = url
17
+ client
18
+ end
19
+
12
20
  def initialize(options = {})
13
21
  default_options = {
14
22
  :scheme => 'http',
@@ -40,11 +48,14 @@ module Pusher
40
48
 
41
49
  # @private Returns the authentication token for the client
42
50
  def authentication_token
51
+ raise ConfigurationError, :key unless @key
52
+ raise ConfigurationError, :secret unless @secret
43
53
  Pusher::Signature::Token.new(@key, @secret)
44
54
  end
45
55
 
46
56
  # @private Builds a url for this app, optionally appending a path
47
57
  def url(path = nil)
58
+ raise ConfigurationError, :app_id unless @app_id
48
59
  URI::Generic.build({
49
60
  :scheme => @scheme,
50
61
  :host => @host,
@@ -133,7 +144,7 @@ module Pusher
133
144
  # @raise [Pusher::HTTPError] Error raised inside http client. The original error is wrapped in error.original_error
134
145
  #
135
146
  def get(path, params = {})
136
- Resource.new(self, path).get(params)
147
+ resource(path).get(params)
137
148
  end
138
149
 
139
150
  # GET arbitrary REST API resource using an asynchronous http client.
@@ -149,20 +160,20 @@ module Pusher
149
160
  # @return Either an EM::DefaultDeferrable or a HTTPClient::Connection
150
161
  #
151
162
  def get_async(path, params = {})
152
- Resource.new(self, path).get_async(params)
163
+ resource(path).get_async(params)
153
164
  end
154
165
 
155
166
  # POST arbitrary REST API resource using a synchronous http client.
156
167
  # Works identially to get method, but posts params as JSON in post body.
157
168
  def post(path, params = {})
158
- Resource.new(self, path).post(params)
169
+ resource(path).post(params)
159
170
  end
160
171
 
161
172
  # POST arbitrary REST API resource using an asynchronous http client.
162
173
  # Works identially to get_async method, but posts params as JSON in post
163
174
  # body.
164
175
  def post_async(path, params = {})
165
- Resource.new(self, path).post_async(params)
176
+ resource(path).post_async(params)
166
177
  end
167
178
 
168
179
  ## HELPER METHODS ##
@@ -186,7 +197,6 @@ module Pusher
186
197
  # should not contain anything other than letters, numbers, or the
187
198
  # characters "_\-=@,.;"
188
199
  def channel(channel_name)
189
- raise ConfigurationError, 'Missing client configuration: please check that key, secret and app_id are configured.' unless configured?
190
200
  Channel.new(url, channel_name, self)
191
201
  end
192
202
 
data/lib/pusher.rb CHANGED
@@ -17,7 +17,11 @@ module Pusher
17
17
  # end
18
18
  class Error < RuntimeError; end
19
19
  class AuthenticationError < Error; end
20
- class ConfigurationError < Error; end
20
+ class ConfigurationError < Error
21
+ def initialize(key)
22
+ super "missing key `#{key}' in the client configuration"
23
+ end
24
+ end
21
25
  class HTTPError < Error; attr_accessor :original_error; end
22
26
 
23
27
  class << self
@@ -45,13 +49,12 @@ module Pusher
45
49
  end
46
50
 
47
51
  def default_client
48
- @default_client ||= Pusher::Client.new
52
+ @default_client ||= begin
53
+ cli = Pusher::Client
54
+ ENV['PUSHER_URL'] ? cli.from_env : cli.new
55
+ end
49
56
  end
50
57
  end
51
-
52
- if ENV['PUSHER_URL']
53
- self.url = ENV['PUSHER_URL']
54
- end
55
58
  end
56
59
 
57
60
  require 'pusher/channel'
data/pusher.gemspec CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "pusher"
6
- s.version = "0.17.0"
6
+ s.version = "0.18.0"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Pusher"]
9
9
  s.email = ["support@pusher.com"]
data/spec/client_spec.rb CHANGED
@@ -58,6 +58,14 @@ describe Pusher do
58
58
  it "should fail on bad urls" do
59
59
  expect { @client.url = "gopher/somekey:somesecret@://api.staging.pusherapp.co://m:8080\apps\87" }.to raise_error(URI::InvalidURIError)
60
60
  end
61
+
62
+ it "should raise exception if app_id is not configured" do
63
+ @client.app_id = nil
64
+ expect {
65
+ @client.url
66
+ }.to raise_error(Pusher::ConfigurationError)
67
+ end
68
+
61
69
  end
62
70
 
63
71
  describe 'configuring the cluster' do
@@ -100,6 +108,20 @@ describe Pusher do
100
108
  end
101
109
  end
102
110
 
111
+ describe 'configuring from env' do
112
+ it "works" do
113
+ url = "http://somekey:somesecret@api.staging.pusherapp.com:8080/apps/87"
114
+ ENV['PUSHER_URL'] = url
115
+
116
+ client = Pusher::Client.from_env
117
+ expect(client.key).to eq("somekey")
118
+ expect(client.secret).to eq("somesecret")
119
+ expect(client.app_id).to eq("87")
120
+ expect(client.url.to_s).to eq("http://api.staging.pusherapp.com:8080/apps/87")
121
+ ENV['PUSHER_URL'] = nil
122
+ end
123
+ end
124
+
103
125
  describe 'when configured' do
104
126
  before :each do
105
127
  @client.app_id = '20'
@@ -116,13 +138,11 @@ describe Pusher do
116
138
  expect(@channel).to be_kind_of(Pusher::Channel)
117
139
  end
118
140
 
119
- %w{app_id key secret}.each do |config|
120
- it "should raise exception if #{config} not configured" do
121
- @client.send("#{config}=", nil)
122
- expect {
123
- @client['test_channel']
124
- }.to raise_error(Pusher::ConfigurationError)
125
- end
141
+ it "should raise exception if app_id is not configured" do
142
+ @client.app_id = nil
143
+ expect {
144
+ @client['test_channel']
145
+ }.to raise_error(Pusher::ConfigurationError)
126
146
  end
127
147
  end
128
148
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pusher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pusher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-22 00:00:00.000000000 Z
11
+ date: 2016-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -184,8 +184,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  version: '0'
185
185
  requirements: []
186
186
  rubyforge_project:
187
- rubygems_version: 2.4.5.1
187
+ rubygems_version: 2.6.2
188
188
  signing_key:
189
189
  specification_version: 4
190
190
  summary: Pusher API client
191
- test_files: []
191
+ test_files:
192
+ - spec/channel_spec.rb
193
+ - spec/client_spec.rb
194
+ - spec/spec_helper.rb
195
+ - spec/web_hook_spec.rb