grocer 0.5.0 → 0.6.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: 22fd48d5c9119fdaf4ebe30482265fd29b42dcda
4
- data.tar.gz: e4d34ea7dd2625b96e17a1e373b6d7172b8752c6
3
+ metadata.gz: 907e31ec8991cc7e09d08d4eebf0a3e59e46df03
4
+ data.tar.gz: 7615fdc0dd345d9714cdb036f3feaafa94ae1d35
5
5
  SHA512:
6
- metadata.gz: 378b66ae89f8a80446f4b5c36a10894a0f4674e69f8ca041608a162e0030d9d44ec8daecd636119774150391e2c63c17f2dc08c91167899095e2aca5fcecf363
7
- data.tar.gz: f2498ef365ec5e89fad9d57f79e1dd173fea1742bd6e3b106177383f03d221a3d43d0c915ada43cc11d1f42c67b3112628f60b584627e0c0becade524a57c606
6
+ metadata.gz: 799ca81894f2c703eb4997fe6d9ffaaaa41a5c3ff1105a90d27c2acb0b01f6104ecedf2730a8db0de6fed5cccc4f2e752f58e329f0cc196336be9a451249c501
7
+ data.tar.gz: fa7b760b7c12fc8992c7c2ebf6b1695403466a8128242b86ce0df365ef16ec79825c816fe2426dead79dbe51ab1d610f53f7ad10dc1f8bc7400336397c568418
data/.gitignore CHANGED
@@ -4,9 +4,11 @@
4
4
  .bundle
5
5
  .config
6
6
  .yardoc
7
+ .ruby-version
7
8
  Gemfile.lock
8
9
  InstalledFiles
9
10
  _yardoc
11
+ bin/
10
12
  coverage
11
13
  doc/
12
14
  lib/bundler/man
data/.travis.yml CHANGED
@@ -1,8 +1,13 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.2
4
- - 1.9.3
3
+ - 2.1.1
4
+ - 2.1.0
5
5
  - 2.0.0
6
- - jruby-19mode # JRuby 1.7.0
7
- - rbx-19mode
8
- # - ruby-head # seems unstable on travis at this time
6
+ - 1.9.3
7
+ - 1.9.2
8
+ - jruby-19mode
9
+ - rbx
10
+ - rbx-2
11
+ addons:
12
+ code_climate:
13
+ repo_token: d414084f17a07a6b2d7da72eaa35d92281554a4266ab8d6246fee1f6c0c161b6
data/CHANGELOG.md CHANGED
@@ -2,11 +2,16 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.6.0
6
+
7
+ * Add `category` option for custom notification actions. ([Michel
8
+ Billard](https://github.com/mbillard))
9
+
5
10
  ## 0.5.0
6
11
 
7
12
  * Add `Grocer::SafariNotification` for sending Safari notifications in OS X
8
13
  Mavericks. ([Ben Ubois](https://github.com/benubois) and [Adam
9
- Duke](adamvduke))
14
+ Duke](https://github.com/adamvduke))
10
15
 
11
16
  ## 0.4.1
12
17
 
data/Gemfile CHANGED
@@ -1,4 +1,17 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ platforms :rbx do
4
+ gem 'rubysl', '~> 2.0'
5
+ gem 'json'
6
+ gem 'rubinius-developer_tools'
7
+ end
8
+
3
9
  # Specify your gem's dependencies in grocer.gemspec
4
10
  gemspec
11
+
12
+ # Code coverage
13
+ gem 'codeclimate-test-reporter', :group => :test, :require => nil
14
+
15
+ # Require Simplecov explicitly. Remove this explicit dependency when
16
+ # the following is fixed: https://github.com/colszowka/simplecov/issues/281
17
+ gem 'simplecov', '~> 0.7.1'
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Grocer
2
2
 
3
- [![Build Status](https://api.travis-ci.org/grocer/grocer.png?branch=master)](https://travis-ci.org/grocer/grocer)
4
- [![Dependency Status](https://gemnasium.com/grocer/grocer.png)](https://gemnasium.com/grocer/grocer)
5
- [![Code Climate](https://codeclimate.com/github/grocer/grocer.png)](https://codeclimate.com/github/grocer/grocer)
3
+ [![Gem Version](http://img.shields.io/gem/v/grocer.svg)](https://rubygems.org/gems/grocer)
4
+ [![Code Climate](http://img.shields.io/codeclimate/github/grocer/grocer.svg)](https://codeclimate.com/github/grocer/grocer)
5
+ [![Build Status](https://img.shields.io/travis/grocer/grocer.svg)](https://travis-ci.org/grocer/grocer)
6
+ [![Dependency Status](https://img.shields.io/gemnasium/grocer/grocer.svg)](https://gemnasium.com/grocer/grocer)
6
7
 
7
8
  **grocer** interfaces with the [Apple Push Notification
8
9
  Service](http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html)
@@ -13,7 +14,7 @@ cleanest, most extensible, and friendliest.
13
14
 
14
15
  ## Requirements
15
16
 
16
- * Ruby/MRI 1.9.x, JRuby 1.7.x in 1.9 mode, Rubinius in 1.9 mode
17
+ * Ruby/MRI 2.1, 2.0, 1.9.x, JRuby 1.7.x in 1.9 mode, Rubinius in 1.9 mode
17
18
 
18
19
  ## Installation
19
20
 
@@ -72,9 +73,10 @@ notification = Grocer::Notification.new(
72
73
  device_token: "fe15a27d5df3c34778defb1f4f3880265cc52c0c047682223be59fb68500a9a2",
73
74
  alert: "Hello from Grocer!",
74
75
  badge: 42,
76
+ category: "a category", # optional; used for custom notification actions
75
77
  sound: "siren.aiff", # optional
76
78
  expiry: Time.now + 60*60, # optional; 0 is default, meaning the message is not stored
77
- identifier: 1234, # optional
79
+ identifier: 1234, # optional; must be an integer
78
80
  content_available: true # optional; any truthy value will set 'content-available' to 1
79
81
  )
80
82
 
data/grocer.gemspec CHANGED
@@ -19,14 +19,13 @@ Gem::Specification.new do |gem|
19
19
  gem.homepage = 'https://github.com/grocer/grocer'
20
20
  gem.license = 'MIT'
21
21
 
22
- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
22
  gem.files = `git ls-files`.split("\n")
24
23
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
24
  gem.name = "grocer"
26
25
  gem.require_paths = ["lib"]
27
26
  gem.version = Grocer::VERSION
28
27
 
29
- gem.add_development_dependency 'rspec', '~> 2.11'
28
+ gem.add_development_dependency 'rspec', '~> 3.0.0.rc1'
30
29
  gem.add_development_dependency 'pry', '~> 0.9.8'
31
30
  gem.add_development_dependency 'mocha'
32
31
  gem.add_development_dependency 'bourne'
@@ -3,11 +3,11 @@ require 'json'
3
3
  module Grocer
4
4
  # Public: An object used to send notifications to APNS.
5
5
  class Notification
6
- MAX_PAYLOAD_SIZE = 256
6
+ MAX_PAYLOAD_SIZE = 2048
7
7
  CONTENT_AVAILABLE_INDICATOR = 1
8
8
 
9
9
  attr_accessor :identifier, :expiry, :device_token
10
- attr_reader :alert, :badge, :custom, :sound, :content_available
10
+ attr_reader :alert, :badge, :custom, :sound, :content_available, :category
11
11
 
12
12
  # Public: Initialize a new Grocer::Notification. You must specify at least an `alert` or `badge`.
13
13
  #
@@ -19,6 +19,7 @@ module Grocer
19
19
  # :expiry - The Integer representing UNIX epoch date sent to APNS as the notification expiry. (default: 0)
20
20
  # :identifier - The arbitrary Integer sent to APNS to uniquely this notification. (default: 0)
21
21
  # :content_available - The truthy or falsy value indicating the availability of new content for background fetch. (optional)
22
+ # :category - The String to be sent as the category portion of the payload. (optional)
22
23
  def initialize(payload = {})
23
24
  @identifier = 0
24
25
 
@@ -61,11 +62,20 @@ module Grocer
61
62
  @encoded_payload = nil
62
63
  end
63
64
 
65
+ def category=(category)
66
+ @category = category
67
+ @encoded_payload = nil
68
+ end
69
+
64
70
  def content_available=(content_available)
65
71
  @content_available = CONTENT_AVAILABLE_INDICATOR if content_available
66
72
  @encoded_payload = nil
67
73
  end
68
74
 
75
+ def content_available?
76
+ !!content_available
77
+ end
78
+
69
79
  def validate_payload
70
80
  fail NoPayloadError unless alert || badge || custom
71
81
  fail PayloadTooLargeError if payload_too_large?
@@ -87,7 +97,8 @@ module Grocer
87
97
  aps_hash[:alert] = alert if alert
88
98
  aps_hash[:badge] = badge if badge
89
99
  aps_hash[:sound] = sound if sound
90
- aps_hash[:'content-available'] = content_available if content_available
100
+ aps_hash[:'content-available'] = content_available if content_available?
101
+ aps_hash[:category] = category if category
91
102
 
92
103
  { aps: aps_hash }.merge(custom || { })
93
104
  end
@@ -1,3 +1,3 @@
1
1
  module Grocer
2
- VERSION = '0.5.0'
2
+ VERSION = '0.6.0'
3
3
  end
@@ -35,7 +35,7 @@ describe Grocer::Connection do
35
35
 
36
36
  it 'requires a gateway' do
37
37
  connection_options.delete(:gateway)
38
- -> { described_class.new(connection_options) }.should raise_error(Grocer::NoGatewayError)
38
+ expect { described_class.new(connection_options) }.to raise_error(Grocer::NoGatewayError)
39
39
  end
40
40
 
41
41
  it 'can be initialized with a gateway' do
@@ -44,7 +44,7 @@ describe Grocer::Connection do
44
44
 
45
45
  it 'requires a port' do
46
46
  connection_options.delete(:port)
47
- -> { described_class.new(connection_options) }.should raise_error(Grocer::NoPortError)
47
+ expect { described_class.new(connection_options) }.to raise_error(Grocer::NoPortError)
48
48
  end
49
49
 
50
50
  it 'can be initialized with a port' do
@@ -53,12 +53,12 @@ describe Grocer::Connection do
53
53
 
54
54
  it 'can open the connection to the apple push notification service' do
55
55
  subject.connect
56
- ssl.should have_received(:connect)
56
+ expect(ssl).to have_received(:connect)
57
57
  end
58
58
 
59
59
  it 'raises CertificateExpiredError for OpenSSL::SSL::SSLError with /certificate expired/i message' do
60
60
  ssl.stubs(:write).raises(OpenSSL::SSL::SSLError.new('certificate expired'))
61
- -> {subject.write('abc123')}.should raise_error(Grocer::CertificateExpiredError)
61
+ expect {subject.write('abc123')}.to raise_error(Grocer::CertificateExpiredError)
62
62
  end
63
63
 
64
64
  context 'an open SSLConnection' do
@@ -68,12 +68,12 @@ describe Grocer::Connection do
68
68
 
69
69
  it '#write delegates to open SSLConnection' do
70
70
  subject.write('Apples to Oranges')
71
- ssl.should have_received(:write).with('Apples to Oranges')
71
+ expect(ssl).to have_received(:write).with('Apples to Oranges')
72
72
  end
73
73
 
74
74
  it '#read delegates to open SSLConnection' do
75
75
  subject.read(42, 'IO')
76
- ssl.should have_received(:read).with(42, 'IO')
76
+ expect(ssl).to have_received(:read).with(42, 'IO')
77
77
  end
78
78
  end
79
79
 
@@ -84,14 +84,14 @@ describe Grocer::Connection do
84
84
 
85
85
  it '#write connects SSLConnection and delegates to it' do
86
86
  subject.write('Apples to Oranges')
87
- ssl.should have_received(:connect)
88
- ssl.should have_received(:write).with('Apples to Oranges')
87
+ expect(ssl).to have_received(:connect)
88
+ expect(ssl).to have_received(:write).with('Apples to Oranges')
89
89
  end
90
90
 
91
91
  it '#read connects SSLConnection delegates to open SSLConnection' do
92
92
  subject.read(42, 'IO')
93
- ssl.should have_received(:connect)
94
- ssl.should have_received(:read).with(42, 'IO')
93
+ expect(ssl).to have_received(:connect)
94
+ expect(ssl).to have_received(:read).with(42, 'IO')
95
95
  end
96
96
  end
97
97
 
@@ -110,7 +110,7 @@ describe Grocer::Connection do
110
110
  it 'raises the error if none of the retries work' do
111
111
  connection_options[:retries] = 1
112
112
  ssl.stubs(:read).raises(error).then.raises(error)
113
- -> { subject.read }.should raise_error(error)
113
+ expect { subject.read }.to raise_error(error)
114
114
  end
115
115
  end
116
116
  end
@@ -4,7 +4,7 @@ describe Grocer::ErrorResponse do
4
4
  let(:status_code) { 1 }
5
5
  let(:identifier) { 8342 }
6
6
  let(:binary_tuple) { [described_class::COMMAND, status_code, identifier].pack('CCN') }
7
- let(:invalid_binary_tuple) { 'totally not the right format' }
7
+ let(:invalid_binary_tuple) { 'short' }
8
8
 
9
9
  subject(:error_response) { described_class.new(binary_tuple) }
10
10
 
@@ -15,8 +15,7 @@ describe Grocer::ErrorResponse do
15
15
  end
16
16
 
17
17
  it 'raises an exception when there are problems decoding' do
18
- -> { described_class.new(invalid_binary_tuple) }.should
19
- raise_error(Grocer::InvalidFormatError)
18
+ expect { described_class.new(invalid_binary_tuple) }.to raise_error(Grocer::InvalidFormatError)
20
19
  end
21
20
  end
22
21
 
@@ -5,7 +5,7 @@ describe Grocer::FailedDeliveryAttempt do
5
5
  let(:timestamp) { Time.utc(1995, 12, 21) }
6
6
  let(:device_token) { 'fe15a27d5df3c34778defb1f4f3980265cc52c0c047682223be59fb68500a9a2' }
7
7
  let(:binary_tuple) { [timestamp.to_i, 32, device_token].pack('NnH64') }
8
- let(:invalid_binary_tuple) { 'totally not the right format' }
8
+ let(:invalid_binary_tuple) { 's' }
9
9
 
10
10
  describe 'decoding' do
11
11
  it 'accepts a binary tuple and sets each attribute' do
@@ -15,8 +15,7 @@ describe Grocer::FailedDeliveryAttempt do
15
15
  end
16
16
 
17
17
  it 'raises an exception when there are problems decoding' do
18
- -> { described_class.new(invalid_binary_tuple) }.should
19
- raise_error(Grocer::InvalidFormatError)
18
+ expect{ described_class.new(invalid_binary_tuple) }.to raise_error(Grocer::InvalidFormatError)
20
19
  end
21
20
  end
22
21
  end
@@ -4,7 +4,7 @@ require 'grocer/feedback_connection'
4
4
  describe Grocer::FeedbackConnection do
5
5
  subject { described_class.new(options) }
6
6
  let(:options) { { certificate: '/path/to/cert.pem' } }
7
- let(:connection) { stub('Connection') }
7
+ let(:connection) { double('Connection') }
8
8
 
9
9
  it 'delegates reading to the Connection' do
10
10
  Grocer::Connection.any_instance.expects(:read).with(42, 'lolIO')
@@ -18,16 +18,16 @@ describe Grocer::Feedback do
18
18
  let(:jan2) { Time.utc(2012, 1, 2) }
19
19
  let(:device_token) { 'fe15a27d5df3c34778defb1f4f3880265cc52c0c047682223be59fb68500a9a2' }
20
20
 
21
- subject { described_class.new(connection) }
21
+ subject(:feedback) { described_class.new(connection) }
22
22
 
23
23
  it 'is enumerable' do
24
- expect(subject).to be_kind_of(Enumerable)
24
+ expect(feedback).to be_kind_of(Enumerable)
25
25
  end
26
26
 
27
27
  it 'reads failed delivery attempt messages from the connection' do
28
28
  stub_feedback
29
29
 
30
- delivery_attempts = subject.to_a
30
+ delivery_attempts = feedback.to_a
31
31
 
32
32
  expect(delivery_attempts[0].timestamp).to eq(jan1)
33
33
  expect(delivery_attempts[0].device_token).to eq(device_token)
@@ -24,7 +24,7 @@ describe Grocer::MobileDeviceManagementNotification do
24
24
  let(:notification) { Grocer::MobileDeviceManagementNotification.new(device_token: "token", alert: "Moo") }
25
25
 
26
26
  it 'should raise a payload error' do
27
- -> { notification.to_bytes }.should raise_error(Grocer::NoPayloadError)
27
+ expect { notification.to_bytes }.to raise_error(Grocer::NoPayloadError)
28
28
  end
29
29
  end
30
30
 
@@ -32,7 +32,7 @@ describe Grocer::MobileDeviceManagementNotification do
32
32
  let(:notification) { Grocer::MobileDeviceManagementNotification.new(device_token: "token", push_magic: "00000000-1111-3333-4444-555555555555", alert: "test") }
33
33
 
34
34
  it 'should raise a format error' do
35
- -> { payload_dictionary_from_bytes }.should raise_error(Grocer::InvalidFormatError)
35
+ expect { payload_dictionary_from_bytes }.to raise_error(Grocer::InvalidFormatError)
36
36
  end
37
37
  end
38
38
  end
@@ -68,7 +68,17 @@ describe Grocer::NotificationReader do
68
68
  io.rewind
69
69
 
70
70
  notification = subject.first
71
- expect(notification.content_available).to be_true
71
+ expect(notification.content_available).to be_truthy
72
+ expect(notification.content_available?).to be true
73
+ end
74
+
75
+ it 'reports content not available when non is provided' do
76
+ io.write(Grocer::Notification.new(alert: 'Foo').to_bytes)
77
+ io.rewind
78
+
79
+ notification = subject.first
80
+ expect(notification.content_available).to be_falsey
81
+ expect(notification.content_available?).to be false
72
82
  end
73
83
  end
74
84
  end
@@ -5,7 +5,7 @@ require 'grocer/shared_examples_for_notifications'
5
5
 
6
6
  describe Grocer::Notification do
7
7
  describe 'binary format' do
8
- let(:payload_options) { { alert: 'hi', badge: 2, sound: 'siren.aiff' } }
8
+ let(:payload_options) { { alert: 'hi', badge: 2, sound: 'siren.aiff', category: 'a category' } }
9
9
  let(:payload) { payload_hash(notification) }
10
10
 
11
11
  include_examples 'a notification'
@@ -25,6 +25,11 @@ describe Grocer::Notification do
25
25
  expect(payload[:aps][:sound]).to eq('siren.aiff')
26
26
  end
27
27
 
28
+ it 'encodes category as part of the payload' do
29
+ notification.category = 'a different category'
30
+ expect(payload[:aps][:category]).to eq('a different category')
31
+ end
32
+
28
33
  it 'encodes custom payload attributes' do
29
34
  notification.custom = { :foo => 'bar' }
30
35
  expect(payload[:foo]).to eq('bar')
@@ -56,18 +61,18 @@ describe Grocer::Notification do
56
61
  end
57
62
 
58
63
  it "is valid" do
59
- expect(notification.valid?).to be_true
64
+ expect(notification.valid?).to be true
60
65
  end
61
66
 
62
67
  context 'missing payload' do
63
68
  let(:payload_options) { Hash.new }
64
69
 
65
70
  it 'raises an error when none of alert, badge, or custom are specified' do
66
- -> { notification.to_bytes }.should raise_error(Grocer::NoPayloadError)
71
+ expect { notification.to_bytes }.to raise_error(Grocer::NoPayloadError)
67
72
  end
68
73
 
69
74
  it 'is not valid' do
70
- expect(notification.valid?).to be_false
75
+ expect(notification.valid?).to be false
71
76
  end
72
77
 
73
78
  [{alert: 'hi'}, {badge: 1}, {custom: {a: 'b'}}].each do |payload|
@@ -75,7 +80,7 @@ describe Grocer::Notification do
75
80
  let(:payload_options) { payload }
76
81
 
77
82
  it 'does not raise an error' do
78
- -> { notification.to_bytes }.should_not raise_error
83
+ expect { notification.to_bytes }.not_to raise_error
79
84
  end
80
85
  end
81
86
  end
@@ -85,11 +90,11 @@ describe Grocer::Notification do
85
90
  let(:payload_options) { { alert: 'a' * (Grocer::Notification::MAX_PAYLOAD_SIZE + 1) } }
86
91
 
87
92
  it 'raises an error when the size of the payload in bytes is too large' do
88
- -> { notification.to_bytes }.should raise_error(Grocer::PayloadTooLargeError)
93
+ expect { notification.to_bytes }.to raise_error(Grocer::PayloadTooLargeError)
89
94
  end
90
95
 
91
96
  it 'is not valid' do
92
- expect(notification.valid?).to be_false
97
+ expect(notification.valid?).to be false
93
98
  end
94
99
  end
95
100
  end
@@ -4,7 +4,7 @@ require 'grocer/push_connection'
4
4
  describe Grocer::PushConnection do
5
5
  subject { described_class.new(options) }
6
6
  let(:options) { { certificate: '/path/to/cert.pem' } }
7
- let(:connection) { stub('Connection') }
7
+ let(:connection) { double('Connection') }
8
8
 
9
9
  it 'delegates reading to the Connection' do
10
10
  Grocer::Connection.any_instance.expects(:read).with(42, 'lolIO')
@@ -11,7 +11,7 @@ describe Grocer::Pusher do
11
11
  notification = stub(:to_bytes => 'abc123')
12
12
  subject.push(notification)
13
13
 
14
- connection.should have_received(:write).with('abc123')
14
+ expect(connection).to have_received(:write).with('abc123')
15
15
  end
16
16
  end
17
17
  end
@@ -38,7 +38,7 @@ describe Grocer::SafariNotification do
38
38
  end
39
39
 
40
40
  it 'is valid' do
41
- expect(notification.valid?).to be_true
41
+ expect(notification.valid?).to be true
42
42
  end
43
43
 
44
44
  context 'missing parameters' do
@@ -46,11 +46,11 @@ describe Grocer::SafariNotification do
46
46
  let(:payload_options) { { alert: { body: 'This is a body' } } }
47
47
 
48
48
  it 'raises an error when title is missing' do
49
- -> { notification.to_bytes }.should raise_error(ArgumentError)
49
+ expect { notification.to_bytes }.to raise_error(ArgumentError)
50
50
  end
51
51
 
52
52
  it 'is not valid' do
53
- expect(notification.valid?).to be_false
53
+ expect(notification.valid?).to be false
54
54
  end
55
55
  end
56
56
 
@@ -58,11 +58,11 @@ describe Grocer::SafariNotification do
58
58
  let(:payload_options) { { alert: { title: 'This is a title' } } }
59
59
 
60
60
  it 'raises an error when body is missing' do
61
- -> { notification.to_bytes }.should raise_error(ArgumentError)
61
+ expect { notification.to_bytes }.to raise_error(ArgumentError)
62
62
  end
63
63
 
64
64
  it 'is not valid' do
65
- expect(notification.valid?).to be_false
65
+ expect(notification.valid?).to be false
66
66
  end
67
67
  end
68
68
  end
@@ -71,11 +71,11 @@ describe Grocer::SafariNotification do
71
71
  let(:payload_options) { { alert: { title: 'Test', body: 'a' * (Grocer::Notification::MAX_PAYLOAD_SIZE + 1) } } }
72
72
 
73
73
  it 'raises an error when the size of the payload in bytes is too large' do
74
- -> { notification.to_bytes }.should raise_error(Grocer::PayloadTooLargeError)
74
+ expect { notification.to_bytes }.to raise_error(Grocer::PayloadTooLargeError)
75
75
  end
76
76
 
77
77
  it 'is not valid' do
78
- expect(notification.valid?).to be_false
78
+ expect(notification.valid?).to be false
79
79
  end
80
80
  end
81
81
 
@@ -67,13 +67,13 @@ describe Grocer::SSLConnection do
67
67
 
68
68
  it 'sets up an socket connection' do
69
69
  subject.connect
70
- TCPSocket.should have_received(:new).with(connection_options[:gateway],
70
+ expect(TCPSocket).to have_received(:new).with(connection_options[:gateway],
71
71
  connection_options[:port])
72
72
  end
73
73
 
74
74
  it 'sets up an SSL connection' do
75
75
  subject.connect
76
- OpenSSL::SSL::SSLSocket.should have_received(:new).with(mock_socket, anything)
76
+ expect(OpenSSL::SSL::SSLSocket).to have_received(:new).with(mock_socket, anything)
77
77
  end
78
78
  end
79
79
 
@@ -87,7 +87,7 @@ describe Grocer::SSLConnection do
87
87
  subject.connect
88
88
  subject.write('abc123')
89
89
 
90
- mock_ssl.should have_received(:write).with('abc123')
90
+ expect(mock_ssl).to have_received(:write).with('abc123')
91
91
  end
92
92
  end
93
93
 
@@ -101,7 +101,7 @@ describe Grocer::SSLConnection do
101
101
  subject.connect
102
102
  subject.read(42)
103
103
 
104
- mock_ssl.should have_received(:read).with(42)
104
+ expect(mock_ssl).to have_received(:read).with(42)
105
105
  end
106
106
  end
107
107
  end
data/spec/grocer_spec.rb CHANGED
@@ -40,7 +40,7 @@ describe Grocer do
40
40
 
41
41
  it 'passes the connection options on to the underlying Connection' do
42
42
  subject.pusher(connection_options)
43
- Grocer::PushConnection.should have_received(:new).with(connection_options)
43
+ expect(Grocer::PushConnection).to have_received(:new).with(connection_options)
44
44
  end
45
45
  end
46
46
 
@@ -55,7 +55,7 @@ describe Grocer do
55
55
 
56
56
  it 'passes the connection options on to the underlying Connection' do
57
57
  subject.feedback(connection_options)
58
- Grocer::FeedbackConnection.should have_received(:new).with(connection_options)
58
+ expect(Grocer::FeedbackConnection).to have_received(:new).with(connection_options)
59
59
  end
60
60
  end
61
61
 
@@ -71,7 +71,7 @@ describe Grocer do
71
71
 
72
72
  it 'passes the connection options on to the underlying SSLServer' do
73
73
  subject.server(connection_options)
74
- Grocer::SSLServer.should have_received(:new).with(connection_options)
74
+ expect(Grocer::SSLServer).to have_received(:new).with(connection_options)
75
75
  end
76
76
  end
77
77
 
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,16 @@
1
1
  ENV['RACK_ENV'] = 'test'
2
+
3
+ if ENV['CODECLIMATE_REPO_TOKEN']
4
+ require 'codeclimate-test-reporter'
5
+ CodeClimate::TestReporter.start
6
+ end
7
+
2
8
  require 'mocha/api'
3
9
  require 'bourne'
4
10
  require 'support/notification_helpers'
11
+ require 'grocer'
5
12
 
6
13
  RSpec.configure do |config|
7
- config.treat_symbols_as_metadata_keys_with_true_values = true
8
14
  config.run_all_when_everything_filtered = true
9
15
  config.filter_run :focus
10
16
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grocer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Lindeman
@@ -10,76 +10,76 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-11-08 00:00:00.000000000 Z
13
+ date: 2014-09-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ~>
19
+ - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '2.11'
21
+ version: 3.0.0.rc1
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - ~>
26
+ - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '2.11'
28
+ version: 3.0.0.rc1
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: pry
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ~>
33
+ - - "~>"
34
34
  - !ruby/object:Gem::Version
35
35
  version: 0.9.8
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ~>
40
+ - - "~>"
41
41
  - !ruby/object:Gem::Version
42
42
  version: 0.9.8
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: mocha
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - '>='
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: bourne
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - '>='
61
+ - - ">="
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - '>='
68
+ - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: rake
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - '>='
75
+ - - ">="
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
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
84
  version: '0'
85
85
  description: |2
@@ -100,9 +100,9 @@ executables: []
100
100
  extensions: []
101
101
  extra_rdoc_files: []
102
102
  files:
103
- - .gitignore
104
- - .rspec
105
- - .travis.yml
103
+ - ".gitignore"
104
+ - ".rspec"
105
+ - ".travis.yml"
106
106
  - CHANGELOG.md
107
107
  - Gemfile
108
108
  - LICENSE
@@ -165,17 +165,17 @@ require_paths:
165
165
  - lib
166
166
  required_ruby_version: !ruby/object:Gem::Requirement
167
167
  requirements:
168
- - - '>='
168
+ - - ">="
169
169
  - !ruby/object:Gem::Version
170
170
  version: '0'
171
171
  required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  requirements:
173
- - - '>='
173
+ - - ">="
174
174
  - !ruby/object:Gem::Version
175
175
  version: '0'
176
176
  requirements: []
177
177
  rubyforge_project:
178
- rubygems_version: 2.1.10
178
+ rubygems_version: 2.4.1
179
179
  signing_key:
180
180
  specification_version: 4
181
181
  summary: Pushing Apple notifications since 2012.
@@ -204,4 +204,3 @@ test_files:
204
204
  - spec/grocer_spec.rb
205
205
  - spec/spec_helper.rb
206
206
  - spec/support/notification_helpers.rb
207
- has_rdoc: