pling 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0fb8c723baf8c8b7f33c0b075149f38e39de4ab
4
- data.tar.gz: 30c16bebcb41673f27cf53406f83f777bc2a7e19
3
+ metadata.gz: 4fef188f5e7d129c8a2f1b57405aef88b36ba3be
4
+ data.tar.gz: 67837b1fb7ff04fe817d129b4d031bb88cfdbf42
5
5
  SHA512:
6
- metadata.gz: 3db92d5659854c437a30d14806c671a2d8de09dc95bd22d09fd40a78c632c82852c0801e9bcc3e7b9260629bc329676b29eb8e0a3d2819e486bdb090c599834b
7
- data.tar.gz: 4ba6ed0a03b888bd70371dccdb06c91a87c81c0cdcde45262e49d6a9b777df2baa80b35eb07f1f5455f1c8ade9ee5b66e6191b649fe76f84e8f06a5a9773fe6f
6
+ metadata.gz: d9093e9bb989269561b1624f021589a9191838eafff1f79c3fa2da0fcc82caf2b3ee0b668bd6d91464de33bba0e204f37c3d3bde8111d66544aba93684a5e4ea
7
+ data.tar.gz: 355b638ac06e00f23cf6026a285c79c1b62c5a46d9246365f19b6121c4c90d732dea357e8101a2633094e68a07b84c04d5ab4a7dd91472a33b1b15422266f62a
@@ -1,13 +1,7 @@
1
- before_install:
2
- - gem update --system
3
- - gem --version
1
+ sudo: false
4
2
  language: ruby
5
3
  rvm:
6
4
  - ruby-head
7
- - 1.9.3
5
+ - 2.2.3
6
+ - 2.1.7
8
7
  - jruby
9
- - jruby-19mode
10
- - rbx-2
11
- matrix:
12
- allow_failures:
13
- - rvm: ruby-head
data/README.md CHANGED
@@ -148,4 +148,4 @@ See a list of all contributors on [GitHub](https://github.com/flinc/pling/contri
148
148
 
149
149
  ## Copyright
150
150
 
151
- Copyright (c) 2010-2011 [flinc AG](https://flinc.org/). See LICENSE for details.
151
+ Copyright (c) 2010-2011 [flinc GmbH](https://flinc.org/). See LICENSE for details.
@@ -50,10 +50,12 @@ module Pling
50
50
  :aps => {
51
51
  :alert => message.body,
52
52
  :badge => message.badge && message.badge.to_i,
53
- :sound => message.sound
53
+ :sound => message.sound,
54
54
  }.delete_if { |_, value| value.nil? }
55
55
  }
56
56
 
57
+ data[:aps]['content-available'] = 1 if message.content_available
58
+ data[:aps]['category'] = message.category if message.category
57
59
  data.merge!(message.payload) if configuration[:payload] && message.payload
58
60
 
59
61
  data = data.to_json
@@ -65,6 +65,30 @@ module Pling
65
65
  @payload = payload
66
66
  end
67
67
 
68
+ ##
69
+ # The content_available property - not supported by all gateways
70
+ #
71
+ # @overload content_available
72
+ # @overload content_available=()
73
+ attr_reader :content_available
74
+
75
+ def content_available=(content_available)
76
+ content_available &&= !!content_available
77
+ @content_available = content_available
78
+ end
79
+
80
+ ##
81
+ # The category property - not supported by all gateways
82
+ #
83
+ # @overload category
84
+ # @overload category=()
85
+ attr_reader :category
86
+
87
+ def category=(category)
88
+ category &&= category.to_s
89
+ @category = category
90
+ end
91
+
68
92
  ##
69
93
  # Creates a new Pling::Message instance with the given body
70
94
  #
@@ -1,3 +1,3 @@
1
1
  module Pling
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -22,7 +22,8 @@ Gem::Specification.new do |s|
22
22
  s.add_runtime_dependency "connection_pool", "~> 2.0"
23
23
  s.add_runtime_dependency("jruby-openssl") if RUBY_PLATFORM == 'java'
24
24
 
25
- s.add_development_dependency "rspec", "~> 2.7"
25
+ s.add_development_dependency "rspec", "~> 3.3"
26
+ s.add_development_dependency "rspec-its", ">= 1.2"
26
27
  s.add_development_dependency "yard", ">= 0.7"
27
28
  s.add_development_dependency "rake", ">= 0.9"
28
29
  end
@@ -6,7 +6,7 @@ describe Pling::Adapter::Base do
6
6
 
7
7
  let(:device) { Pling::Device.new }
8
8
  let(:message) { Pling::Message.new }
9
- let(:gateway) { mock(:deliver => true) }
9
+ let(:gateway) { double(:gateway_double, :deliver => true) }
10
10
 
11
11
  it 'should try to discover a gateway' do
12
12
  Pling::Gateway.should_receive(:discover).with(device).and_return(gateway)
@@ -19,4 +19,4 @@ describe Pling::Adapter::Base do
19
19
  subject.deliver(message, device)
20
20
  end
21
21
  end
22
- end
22
+ end
@@ -37,11 +37,11 @@ describe Pling::APN::Gateway do
37
37
  subject { Pling::APN::Gateway.new(valid_configuration) }
38
38
 
39
39
  it 'should raise an error if no message is given' do
40
- expect { subject.deliver(nil, device) }.to raise_error
40
+ expect { subject.deliver(nil, device) }.to raise_error(ArgumentError, /do not implement #to_pling_message/)
41
41
  end
42
42
 
43
43
  it 'should raise an error the device is given' do
44
- expect { subject.deliver(message, nil) }.to raise_error
44
+ expect { subject.deliver(message, nil) }.to raise_error(ArgumentError, /do not implement #to_pling_device/)
45
45
  end
46
46
 
47
47
  it 'should initialize a new APN connection if none is established' do
@@ -118,6 +118,40 @@ describe Pling::APN::Gateway do
118
118
  subject.deliver(message, device)
119
119
  end
120
120
 
121
+ it 'should include the given content_available flag' do
122
+ expected_payload = {
123
+ 'aps' => {
124
+ 'alert' => 'Hello from Pling',
125
+ 'content-available' => 1
126
+ }
127
+ }
128
+
129
+ connection.stub(:write) do |packet|
130
+ JSON.parse(packet[37..-1]).should eq(expected_payload)
131
+ end
132
+
133
+ message.content_available = 1
134
+
135
+ subject.deliver(message, device)
136
+ end
137
+
138
+ it 'should include the given category' do
139
+ expected_payload = {
140
+ 'aps' => {
141
+ 'alert' => 'Hello from Pling',
142
+ 'category' => 'foobar'
143
+ }
144
+ }
145
+
146
+ connection.stub(:write) do |packet|
147
+ JSON.parse(packet[37..-1]).should eq(expected_payload)
148
+ end
149
+
150
+ message.category = 'foobar'
151
+
152
+ subject.deliver(message, device)
153
+ end
154
+
121
155
  context 'when configured to include payload' do
122
156
  before do
123
157
  valid_configuration.merge!(:payload => true)
@@ -6,27 +6,27 @@ describe Pling::C2DM::Gateway do
6
6
  { :email => 'someone@gmail.com', :password => 'random', :source => 'some-source' }
7
7
  end
8
8
 
9
- let(:authentication_response_mock) do
10
- mock('Faraday authentication response', :success? => true, :status => 200, :body => "SID=SOMESID\nAuth=S0ME-ToKeN123")
9
+ let(:authentication_response_double) do
10
+ double(:authentication_response_double, :success? => true, :status => 200, :body => "SID=SOMESID\nAuth=S0ME-ToKeN123")
11
11
  end
12
12
 
13
- let(:push_response_mock) do
14
- mock('Faraday send response', :success? => true, :status => 200, :body => "")
13
+ let(:push_response_double) do
14
+ double(:push_response_double, :success? => true, :status => 200, :body => "")
15
15
  end
16
16
 
17
- let(:connection_mock) do
18
- mock('Faraday connection').tap do |mock|
19
- mock.stub(:post).
17
+ let(:connection_double) do
18
+ double(:connection_double).tap do |connection|
19
+ connection.stub(:post).
20
20
  with('https://www.google.com/accounts/ClientLogin', anything).
21
- and_return(authentication_response_mock)
21
+ and_return(authentication_response_double)
22
22
 
23
- mock.stub(:post).
23
+ connection.stub(:post).
24
24
  with('https://android.apis.google.com/c2dm/send', anything, anything).
25
- and_return(push_response_mock)
25
+ and_return(push_response_double)
26
26
  end
27
27
  end
28
28
 
29
- before { Faraday.stub(:new).and_return(connection_mock) }
29
+ before { Faraday.stub(:new).and_return(connection_double) }
30
30
 
31
31
  it 'should handle various apn related device types' do
32
32
  Pling::C2DM::Gateway.handled_types.should =~ [:android, :c2dm]
@@ -60,9 +60,9 @@ describe Pling::C2DM::Gateway do
60
60
  end
61
61
 
62
62
  it 'should try to authenticate' do
63
- connection_mock.should_receive(:post).
63
+ connection_double.should_receive(:post).
64
64
  with('https://www.google.com/accounts/ClientLogin', valid_authentication_params).
65
- and_return(authentication_response_mock)
65
+ and_return(authentication_response_double)
66
66
 
67
67
  Pling::C2DM::Gateway.new(valid_configuration)
68
68
  end
@@ -73,13 +73,13 @@ describe Pling::C2DM::Gateway do
73
73
  end
74
74
 
75
75
  it 'should raise an error if authentication was not successful' do
76
- authentication_response_mock.stub(:status => 403, :success? => false, :body => 'Error=BadAuthentication')
76
+ authentication_response_double.stub(:status => 403, :success? => false, :body => 'Error=BadAuthentication')
77
77
 
78
78
  expect { Pling::C2DM::Gateway.new(valid_configuration) }.to raise_error(Pling::AuthenticationFailed, /Authentication failed: \[403\] Error=BadAuthentication/)
79
79
  end
80
80
 
81
81
  it 'should raise an error if it could not extract a token from the response' do
82
- authentication_response_mock.stub(:body).and_return('SOMERANDOMBODY')
82
+ authentication_response_double.stub(:body).and_return('SOMERANDOMBODY')
83
83
 
84
84
  expect { Pling::C2DM::Gateway.new(valid_configuration) }.to raise_error(Pling::AuthenticationFailed, /Token extraction failed/)
85
85
  end
@@ -92,25 +92,25 @@ describe Pling::C2DM::Gateway do
92
92
  end
93
93
 
94
94
  it 'should use Faraday::Response::Logger when :debug is set to true' do
95
- builder = mock(:use => true, :adapter => true)
95
+ builder = double(:builder_double, :use => true, :adapter => true)
96
96
  builder.should_receive(:use).with(Faraday::Response::Logger)
97
- Faraday.stub(:new).and_yield(builder).and_return(connection_mock)
97
+ Faraday.stub(:new).and_yield(builder).and_return(connection_double)
98
98
 
99
99
  Pling::C2DM::Gateway.new(valid_configuration.merge(:debug => true))
100
100
  end
101
101
 
102
102
  it 'should use the adapter set with :adapter' do
103
- builder = mock(:use => true, :adapter => true)
103
+ builder = double(:builder_double, :use => true, :adapter => true)
104
104
  builder.should_receive(:adapter).with(:typheus)
105
- Faraday.stub(:new).and_yield(builder).and_return(connection_mock)
105
+ Faraday.stub(:new).and_yield(builder).and_return(connection_double)
106
106
 
107
107
  Pling::C2DM::Gateway.new(valid_configuration.merge(:adapter => :typheus))
108
108
  end
109
109
 
110
110
  it 'should allow configuring the authentication_url' do
111
- connection_mock.should_receive(:post).
111
+ connection_double.should_receive(:post).
112
112
  with('http://example.com/authentication', anything).
113
- and_return(authentication_response_mock)
113
+ and_return(authentication_response_double)
114
114
 
115
115
  Pling::C2DM::Gateway.new(valid_configuration.merge(:authentication_url => 'http://example.com/authentication'))
116
116
  end
@@ -138,11 +138,11 @@ describe Pling::C2DM::Gateway do
138
138
  end
139
139
 
140
140
  it 'should raise an error if no message is given' do
141
- expect { subject.deliver(nil, device) }.to raise_error
141
+ expect { subject.deliver(nil, device) }.to raise_error(ArgumentError, /do not implement #to_pling_message/)
142
142
  end
143
143
 
144
144
  it 'should raise an error the device is given' do
145
- expect { subject.deliver(message, nil) }.to raise_error
145
+ expect { subject.deliver(message, nil) }.to raise_error(ArgumentError, /do not implement #to_pling_device/)
146
146
  end
147
147
 
148
148
  it 'should call #to_pling_message on the given message' do
@@ -156,49 +156,49 @@ describe Pling::C2DM::Gateway do
156
156
  end
157
157
 
158
158
  it 'should try to deliver the given message' do
159
- connection_mock.should_receive(:post).
159
+ connection_double.should_receive(:post).
160
160
  with('https://android.apis.google.com/c2dm/send', valid_push_params, valid_push_headers).
161
- and_return(push_response_mock)
161
+ and_return(push_response_double)
162
162
 
163
163
  subject.deliver(message, device)
164
164
  end
165
165
 
166
166
  it 'should raise a Pling::DeliveryFailed exception if the delivery was not successful' do
167
- connection_mock.should_receive(:post).with('https://android.apis.google.com/c2dm/send', anything, anything).
168
- and_return(push_response_mock)
169
- push_response_mock.stub(:status => 401, :success? => false, :body => "Something went wrong")
167
+ connection_double.should_receive(:post).with('https://android.apis.google.com/c2dm/send', anything, anything).
168
+ and_return(push_response_double)
169
+ push_response_double.stub(:status => 401, :success? => false, :body => "Something went wrong")
170
170
 
171
171
  expect { subject.deliver(message, device) }.to raise_error Pling::DeliveryFailed, /Something went wrong/
172
172
  end
173
173
 
174
174
  it 'should raise a Pling::DeliveryFailed exception if the response body contained an error' do
175
- connection_mock.should_receive(:post).with('https://android.apis.google.com/c2dm/send', anything, anything).
176
- and_return(push_response_mock)
177
- push_response_mock.stub(:status => 200, :success? => true, :body => "Error=SomeError")
175
+ connection_double.should_receive(:post).with('https://android.apis.google.com/c2dm/send', anything, anything).
176
+ and_return(push_response_double)
177
+ push_response_double.stub(:status => 200, :success? => true, :body => "Error=SomeError")
178
178
 
179
179
  expect { subject.deliver(message, device) }.to raise_error Pling::DeliveryFailed, /Error=SomeError/
180
180
  end
181
181
 
182
182
  it 'should send data.badge if the given message has a badge' do
183
- connection_mock.should_receive(:post).
183
+ connection_double.should_receive(:post).
184
184
  with(anything, hash_including(:'data.badge' => '10'), anything).
185
- and_return(push_response_mock)
185
+ and_return(push_response_double)
186
186
  message.badge = 10
187
187
  subject.deliver(message, device)
188
188
  end
189
189
 
190
190
  it 'should send data.sound if the given message has a sound' do
191
- connection_mock.should_receive(:post).
191
+ connection_double.should_receive(:post).
192
192
  with(anything, hash_including(:'data.sound' => 'pling'), anything).
193
- and_return(push_response_mock)
193
+ and_return(push_response_double)
194
194
  message.sound = :pling
195
195
  subject.deliver(message, device)
196
196
  end
197
197
 
198
198
  it 'should send data.subject if the given message has a subject' do
199
- connection_mock.should_receive(:post).
199
+ connection_double.should_receive(:post).
200
200
  with(anything, hash_including(:'data.subject' => 'Important!'), anything).
201
- and_return(push_response_mock)
201
+ and_return(push_response_double)
202
202
  message.subject = 'Important!'
203
203
  subject.deliver(message, device)
204
204
  end
@@ -210,9 +210,9 @@ and_return(push_response_mock)
210
210
  end
211
211
 
212
212
  it 'should include the given payload' do
213
- connection_mock.should_receive(:post).
213
+ connection_double.should_receive(:post).
214
214
  with(anything, hash_including(:'data.data' => 'available'), anything).
215
- and_return(push_response_mock)
215
+ and_return(push_response_double)
216
216
  subject.deliver(message, device)
217
217
  end
218
218
  end
@@ -224,9 +224,9 @@ and_return(push_response_mock)
224
224
  end
225
225
 
226
226
  it 'should include the given payload' do
227
- connection_mock.should_receive(:post).
227
+ connection_double.should_receive(:post).
228
228
  with(anything, hash_not_including(:'data.data' => 'available'), anything).
229
- and_return(push_response_mock)
229
+ and_return(push_response_double)
230
230
  subject.deliver(message, device)
231
231
  end
232
232
  end
@@ -235,9 +235,9 @@ and_return(push_response_mock)
235
235
  :InvalidRegistration, :NotRegistered,
236
236
  :MessageTooBig, :MissingCollapseKey].each do |exception|
237
237
  it "should raise a Pling::C2DM::#{exception} when the response body is ''" do
238
- push_response_mock.stub(:body => "Error=#{exception}")
238
+ push_response_double.stub(:body => "Error=#{exception}")
239
239
  expect { subject.deliver(message, device) }.to raise_error Pling::C2DM.const_get(exception)
240
240
  end
241
241
  end
242
242
  end
243
- end
243
+ end
@@ -4,7 +4,7 @@ describe Pling::Device do
4
4
 
5
5
  context 'when created with no arguments' do
6
6
  it 'should not require an argument' do
7
- expect { Pling::Device.new }.to_not raise_error ArgumentError
7
+ expect { Pling::Device.new }.to_not raise_error
8
8
  end
9
9
 
10
10
  specify { Pling::Device.new.should_not be_valid }
@@ -41,7 +41,7 @@ describe Pling::Device do
41
41
 
42
42
  describe '#identifier=' do
43
43
  it 'should call #to_s on the given identifier' do
44
- subject.identifier = stub(:to_s => 'XXXX')
44
+ subject.identifier = double(:identifier_double, :to_s => 'XXXX')
45
45
  subject.identifier.should eq('XXXX')
46
46
  end
47
47
  end
@@ -24,7 +24,7 @@ describe Pling::Gateway do
24
24
  describe '.discover' do
25
25
  it 'should do a delayed initialization' do
26
26
  Pling.stub(:gateways).and_return(Pling::DelayedInitializer.new([[gateway_class, { :some => :option }]]))
27
- gateway_class.should_receive(:new).with({ :some => :option }).and_return(mock.as_null_object)
27
+ gateway_class.should_receive(:new).with({ :some => :option }).and_return(double.as_null_object)
28
28
  subject.discover(device)
29
29
  end
30
30
 
@@ -50,15 +50,15 @@ describe Pling::Gateway do
50
50
  describe '#handles?' do
51
51
  it 'should return true if the gateway supports the given device\'s type' do
52
52
  device.type = :android
53
- gateway.handles?(device).should be_true
53
+ gateway.handles?(device).should be true
54
54
 
55
55
  device.type = :c2dm
56
- gateway.handles?(device).should be_true
56
+ gateway.handles?(device).should be true
57
57
  end
58
58
 
59
59
  it 'should return false if the gateway does not support the given device\'s type' do
60
60
  device.type = :random
61
- gateway.handles?(device).should be_false
61
+ gateway.handles?(device).should be false
62
62
  end
63
63
  end
64
64
 
@@ -98,9 +98,9 @@ describe Pling::Gateway do
98
98
  end
99
99
 
100
100
  it 'should not raise an Pling::Errors if an on_exception callback is set' do
101
- gateway = gateway_class.new(:on_exception => lambda {})
101
+ gateway = gateway_class.new(:on_exception => lambda {|_| })
102
102
  gateway.stub(:deliver!).and_raise(Pling::Error)
103
- expect { gateway.deliver(message, device) }.to_not raise_error Pling::Error
103
+ expect { gateway.deliver(message, device) }.to_not raise_error
104
104
  end
105
105
 
106
106
  it 'should pass the exception to the callback' do
@@ -109,4 +109,4 @@ describe Pling::Gateway do
109
109
  gateway.deliver(message, device)
110
110
  end
111
111
  end
112
- end
112
+ end
@@ -6,15 +6,15 @@ describe Pling::GCM::Gateway do
6
6
  { :key => 'some-key' }
7
7
  end
8
8
 
9
- let(:push_response_mock) do
10
- mock('Faraday send response', :success? => true, :status => 200, :body => "")
9
+ let(:push_response_double) do
10
+ double(:response_double, :success? => true, :status => 200, :body => "")
11
11
  end
12
12
 
13
13
  let(:connection_mock) do
14
- mock('Faraday connection').tap do |mock|
15
- mock.stub(:post).
14
+ double(:connection_double).tap do |connection|
15
+ connection.stub(:post).
16
16
  with('https://android.googleapis.com/gcm/send', anything, anything).
17
- and_return(push_response_mock)
17
+ and_return(push_response_double)
18
18
  end
19
19
  end
20
20
 
@@ -47,7 +47,7 @@ describe Pling::GCM::Gateway do
47
47
  end
48
48
 
49
49
  it 'should use Faraday::Response::Logger when :debug is set to true' do
50
- builder = mock(:use => true, :adapter => true)
50
+ builder = double(:builder_double, :use => true, :adapter => true)
51
51
  builder.should_receive(:use).with(Faraday::Response::Logger)
52
52
  Faraday.stub(:new).and_yield(builder).and_return(connection_mock)
53
53
 
@@ -55,7 +55,7 @@ describe Pling::GCM::Gateway do
55
55
  end
56
56
 
57
57
  it 'should use the adapter set with :adapter' do
58
- builder = mock(:use => true, :adapter => true)
58
+ builder = double(:builder_double, :use => true, :adapter => true)
59
59
  builder.should_receive(:adapter).with(:typheus)
60
60
  Faraday.stub(:new).and_yield(builder).and_return(connection_mock)
61
61
 
@@ -83,11 +83,11 @@ describe Pling::GCM::Gateway do
83
83
  end
84
84
 
85
85
  it 'should raise an error if no message is given' do
86
- expect { subject.deliver(nil, device) }.to raise_error
86
+ expect { subject.deliver(nil, device) }.to raise_error(ArgumentError, /do not implement #to_pling_message/)
87
87
  end
88
88
 
89
89
  it 'should raise an error the device is given' do
90
- expect { subject.deliver(message, nil) }.to raise_error
90
+ expect { subject.deliver(message, nil) }.to raise_error(ArgumentError, /do not implement #to_pling_device/)
91
91
  end
92
92
 
93
93
  it 'should call #to_pling_message on the given message' do
@@ -103,21 +103,21 @@ describe Pling::GCM::Gateway do
103
103
  it 'should try to deliver the given message' do
104
104
  connection_mock.should_receive(:post).
105
105
  with('https://android.googleapis.com/gcm/send', valid_push_params, valid_push_headers).
106
- and_return(push_response_mock)
106
+ and_return(push_response_double)
107
107
 
108
108
  subject.deliver(message, device)
109
109
  end
110
110
 
111
111
  it 'should raise a Pling::DeliveryFailed exception if the delivery was not successful' do
112
- connection_mock.should_receive(:post).and_return(push_response_mock)
113
- push_response_mock.stub(:status => 401, :success? => false, :body => "Something went wrong")
112
+ connection_mock.should_receive(:post).and_return(push_response_double)
113
+ push_response_double.stub(:status => 401, :success? => false, :body => "Something went wrong")
114
114
 
115
115
  expect { subject.deliver(message, device) }.to raise_error Pling::DeliveryFailed, /Something went wrong/
116
116
  end
117
117
 
118
118
  it 'should raise a Pling::DeliveryFailed exception if the response body contained an error' do
119
- connection_mock.should_receive(:post).and_return(push_response_mock)
120
- push_response_mock.stub(:status => 200, :success? => true, :body => { 'failure' => 1, 'results' => ['error' => 'SomeError'] })
119
+ connection_mock.should_receive(:post).and_return(push_response_double)
120
+ push_response_double.stub(:status => 200, :success? => true, :body => { 'failure' => 1, 'results' => ['error' => 'SomeError'] })
121
121
 
122
122
  expect { subject.deliver(message, device) }.to raise_error Pling::DeliveryFailed, /SomeError/
123
123
  end
@@ -125,7 +125,7 @@ describe Pling::GCM::Gateway do
125
125
  it 'should send data.badge if the given message has a badge' do
126
126
  connection_mock.should_receive(:post).
127
127
  with(anything, hash_including(:data => hash_including({ :badge => '10' })), anything).
128
- and_return(push_response_mock)
128
+ and_return(push_response_double)
129
129
  message.badge = 10
130
130
  subject.deliver(message, device)
131
131
  end
@@ -133,7 +133,7 @@ describe Pling::GCM::Gateway do
133
133
  it 'should send data.sound if the given message has a sound' do
134
134
  connection_mock.should_receive(:post).
135
135
  with(anything, hash_including(:data => hash_including({ :sound => 'pling' })), anything).
136
- and_return(push_response_mock)
136
+ and_return(push_response_double)
137
137
  message.sound = :pling
138
138
  subject.deliver(message, device)
139
139
  end
@@ -141,7 +141,7 @@ describe Pling::GCM::Gateway do
141
141
  it 'should send data.subject if the given message has a subject' do
142
142
  connection_mock.should_receive(:post).
143
143
  with(anything, hash_including(:data => hash_including({ :subject => 'Important!' })), anything).
144
- and_return(push_response_mock)
144
+ and_return(push_response_double)
145
145
  message.subject = 'Important!'
146
146
  subject.deliver(message, device)
147
147
  end
@@ -155,7 +155,7 @@ describe Pling::GCM::Gateway do
155
155
  it 'should include the given payload' do
156
156
  connection_mock.should_receive(:post).
157
157
  with(anything, hash_including(:data => hash_including({ :data => 'available' })), anything).
158
- and_return(push_response_mock)
158
+ and_return(push_response_double)
159
159
  subject.deliver(message, device)
160
160
  end
161
161
  end
@@ -169,7 +169,7 @@ describe Pling::GCM::Gateway do
169
169
  it 'should include the given payload' do
170
170
  connection_mock.should_receive(:post).
171
171
  with(anything, hash_not_including(:'data.data' => 'available'), anything).
172
- and_return(push_response_mock)
172
+ and_return(push_response_double)
173
173
  subject.deliver(message, device)
174
174
  end
175
175
  end
@@ -178,9 +178,9 @@ describe Pling::GCM::Gateway do
178
178
  :NotRegistered, :MessageTooBig, :InvalidTtl, :Unavailable,
179
179
  :InternalServerError].each do |exception|
180
180
  it "should raise a Pling::GCM::#{exception} when the response body is ''" do
181
- push_response_mock.stub(:body => { 'failure' => 1, 'results' => [{ 'error' => exception }]})
181
+ push_response_double.stub(:body => { 'failure' => 1, 'results' => [{ 'error' => exception }]})
182
182
  expect { subject.deliver(message, device) }.to raise_error Pling::GCM.const_get(exception)
183
183
  end
184
184
  end
185
185
  end
186
- end
186
+ end
@@ -4,7 +4,7 @@ describe Pling::Message do
4
4
 
5
5
  context 'when created with no arguments' do
6
6
  it 'should not require an argument' do
7
- expect { Pling::Message.new() }.to_not raise_error ArgumentError
7
+ expect { Pling::Message.new() }.to_not raise_error
8
8
  end
9
9
 
10
10
  specify { Pling::Message.new().should_not be_valid }
@@ -47,6 +47,32 @@ describe Pling::Message do
47
47
  its(:payload) { should eq({ :data => true }) }
48
48
  end
49
49
 
50
+ context 'when created with a hash that contains a :content_available key' do
51
+ subject { Pling::Message.new(:content_available => true)}
52
+ its(:content_available) { should eq(true) }
53
+
54
+ context 'when the key is not present' do
55
+ subject { Pling::Message.new }
56
+ its(:content_available) { should eq(nil) }
57
+ end
58
+ end
59
+
60
+ context 'when created with a hash that contains a :category key' do
61
+ subject { Pling::Message.new(:category => 'foobar')}
62
+ its(:category) { should eq('foobar') }
63
+
64
+ context 'when the value behind the :category key is not a string' do
65
+ subject { Pling::Message.new(:category => :foobar)}
66
+
67
+ its(:category) { should eq('foobar') }
68
+ end
69
+
70
+ context 'when the key is not present' do
71
+ subject { Pling::Message.new }
72
+ its(:category) { should eq(nil) }
73
+ end
74
+ end
75
+
50
76
  context 'when created with an hash of invalid attributes' do
51
77
  it 'should ignore the invalid paramters' do
52
78
  expect { Pling::Message.new({ :random_param => true }) }.to_not raise_error
@@ -55,7 +81,7 @@ describe Pling::Message do
55
81
 
56
82
  describe '#body=' do
57
83
  it 'should call #to_s on the given body' do
58
- subject.body = stub(:to_s => 'Hello from Pling')
84
+ subject.body = double(:body_double, :to_s => 'Hello from Pling')
59
85
  subject.body.should eq('Hello from Pling')
60
86
  end
61
87
  end
@@ -59,18 +59,18 @@ describe Pling do
59
59
 
60
60
  let(:message) { Pling::Message.new }
61
61
  let(:device) { Pling::Device.new }
62
- let(:adapter) { mock(:deliver => true) }
62
+ let(:adapter) { double(:adapter_double, :deliver => true) }
63
63
 
64
64
  before do
65
65
  Pling.stub(:adapter).and_return(adapter)
66
66
  end
67
67
 
68
68
  it 'should raise an error if no message is given' do
69
- expect { Pling.deliver(nil, device) }.to raise_error
69
+ expect { Pling.deliver(nil, device) }.to raise_error(ArgumentError, /do not implement #to_pling_message/)
70
70
  end
71
71
 
72
72
  it 'should raise an error the device is given' do
73
- expect { Pling.deliver(message, nil) }.to raise_error
73
+ expect { Pling.deliver(message, nil) }.to raise_error(ArgumentError, /do not implement #to_pling_device/)
74
74
  end
75
75
 
76
76
  it 'should call #to_pling_message on the given message' do
@@ -1,10 +1,17 @@
1
1
  require 'rubygems'
2
2
  require 'bundler'
3
3
 
4
+ require 'rspec/its'
4
5
  Bundler.require
5
6
 
6
7
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
7
8
 
8
9
  RSpec.configure do |config|
9
- config.mock_with :rspec
10
+ config.mock_with :rspec do |mocks|
11
+ mocks.syntax = [:should, :expect]
12
+ end
13
+
14
+ config.expect_with :rspec do |expectations|
15
+ expectations.syntax = [:should, :expect]
16
+ end
10
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pling
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benedikt Deicke
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-10-13 00:00:00.000000000 Z
13
+ date: 2015-11-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: faraday
@@ -74,14 +74,28 @@ dependencies:
74
74
  requirements:
75
75
  - - "~>"
76
76
  - !ruby/object:Gem::Version
77
- version: '2.7'
77
+ version: '3.3'
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - "~>"
83
83
  - !ruby/object:Gem::Version
84
- version: '2.7'
84
+ version: '3.3'
85
+ - !ruby/object:Gem::Dependency
86
+ name: rspec-its
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '1.2'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '1.2'
85
99
  - !ruby/object:Gem::Dependency
86
100
  name: yard
87
101
  requirement: !ruby/object:Gem::Requirement
@@ -180,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
194
  version: '0'
181
195
  requirements: []
182
196
  rubyforge_project:
183
- rubygems_version: 2.4.6
197
+ rubygems_version: 2.4.5
184
198
  signing_key:
185
199
  specification_version: 4
186
200
  summary: Pling is a notification framework that supports multiple gateways