grocer 0.7.0 → 0.7.1

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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- Y2E3NDU5NjNkYjQyYTAyMjUyM2RkOWVhNTljNjNiYWVlMDU5OTkxNw==
5
- data.tar.gz: !binary |-
6
- ZDRlNTFjOTRhOGI4NzAyNzU3YjEwZjhmNzZhNTcyMmM0Y2QxZTQ3MA==
2
+ SHA1:
3
+ metadata.gz: 75905d43e4c20c6e907667758001df9afe1d504d
4
+ data.tar.gz: 6eb2736ad5455fae0eddc8541cd025d5713cae37
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MGQ0ZDc5ZWFiOGI1NGE2MjQ4NzQ5ZWE3YzJmYjYxNTcyMDFhNTQyMWQ1Y2Y5
10
- YzI4NTEwNGYyN2ViMDFjMWNiYWQ0NGRiOGYzM2Y1YTA4MTVlYzY1MTI2YTU5
11
- MjM2M2U4MzQ2Yzc2MDEyOWQ2MDQ4ZDNkOWJkZjZmNzcxYzkyOTE=
12
- data.tar.gz: !binary |-
13
- MTE4YzBiODQ2M2NlNmE0MTJmMzY1NGE2OTBmODc4ZTY5NDY3OGE2MjkxMzMz
14
- YWQyMjcwOTM2NDBlYjRkMmFlOWRmZjk4MDRmMjllZmRlYzU0YjQ3ZGJlY2I5
15
- MGYwN2QyY2VmZmIwYThhNGI0ZjEyZWM2YTVkMDA4Y2U3OTExMTE=
6
+ metadata.gz: 75833048b5daface771a1e56a0c0cb81a2de9d37945077e7aa1577c21f2f9dab687333440d26634427446e641b16c0d87efca5b9909f26fc03f74a212511997d
7
+ data.tar.gz: 780a1bbb33f9017d386f5a56a15cf4e693a37a889a50cea4a56508c18d88b99538e6af4bbafdecf08b56f03517aafd25ad94c7b5a8cb31f1e0f6ff75a854d2b9
@@ -1,12 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.1
4
- - 2.2.5
3
+ - 2.4.1
4
+ - 2.3.4
5
+ - 2.2.7
5
6
  - 2.1.10
6
7
  - 2.0.0
7
8
  - jruby
8
- - rbx
9
- - rbx-2
9
+ - rbx-2.2.7
10
10
  sudo: false
11
11
  addons:
12
12
  code_climate:
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.7.1
6
+
7
+ * Convert Fixnum to Integer, for Ruby >= 2.4.0. ([Ben
8
+ Rugg](https://github.com/benrugg))
9
+
5
10
  ## 0.7.0
6
11
 
7
12
  * Support for `mutable-content` flag (for iOS 10). ([Matthias
data/README.md CHANGED
@@ -5,9 +5,7 @@
5
5
  [![Build Status](https://img.shields.io/travis/grocer/grocer.svg)](https://travis-ci.org/grocer/grocer)
6
6
  [![Dependency Status](https://img.shields.io/gemnasium/grocer/grocer.svg)](https://gemnasium.com/grocer/grocer)
7
7
 
8
- **grocer** interfaces with the [Apple Push Notification
9
- Service](http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html)
10
- to send push notifications to iOS devices.
8
+ **grocer** interfaces with the [Apple Push Notification Service](http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html) to send push notifications to iOS devices.
11
9
 
12
10
  There are other gems out there to do this, but **grocer** plans to be the cleanest, most extensible, and friendliest.
13
11
 
@@ -65,17 +63,11 @@ pusher = Grocer.pusher(
65
63
 
66
64
  #### Notes
67
65
 
68
- * `certificate`: If you don't have the certificate stored in a file, you
69
- can pass any object that responds to `read`.
66
+ * `certificate`: If you don't have the certificate stored in a file, you can pass any object that responds to `read`.
70
67
  Example: `certificate: StringIO.new(pem_string)`
71
- * `gateway`: Defaults to different values depending on the `RAILS_ENV` or
72
- `RACK_ENV` environment variables. If set to `production`, defaults to
73
- `gateway.push.apple.com`, if set to `test`, defaults to `localhost` (see
74
- [Acceptance Testing](#acceptance-testing) later), otherwise defaults to
75
- `gateway.sandbox.push.apple.com`.
76
- * `retries`: The number of times **grocer** will retry writing to or reading
77
- from the Apple Push Notification Service before raising any errors to client
78
- code.
68
+ * `gateway`: Defaults to different values depending on the `RAILS_ENV` or `RACK_ENV` environment variables.
69
+ If set to `production`, defaults to `gateway.push.apple.com`, if set to `test`, defaults to `localhost` (see [Acceptance Testing](#acceptance-testing) later), otherwise defaults to `gateway.sandbox.push.apple.com`.
70
+ * `retries`: The number of times **grocer** will retry writing to or reading from the Apple Push Notification Service before raising any errors to client code.
79
71
 
80
72
  ### Sending Notifications
81
73
 
@@ -98,8 +90,7 @@ notification = Grocer::Notification.new(
98
90
  pusher.push(notification) # return value is the number of bytes sent successfully
99
91
  ```
100
92
 
101
- It is desirable to reuse the same connection to send multiple notifications, as
102
- is recommended by Apple.
93
+ It is desirable to reuse the same connection to send multiple notifications, as is recommended by Apple.
103
94
 
104
95
  ```ruby
105
96
  pusher = Grocer.pusher(connection_options)
@@ -110,9 +101,8 @@ end
110
101
 
111
102
  #### Custom Payloads
112
103
 
113
- The Apple documentation says "Providers can specify custom payload values
114
- outside the Apple-reserved aps namespace." To specify a custom payload, set
115
- `Grocer::Notification#custom`.
104
+ The Apple documentation says "Providers can specify custom payload values outside the Apple-reserved aps namespace."
105
+ To specify a custom payload, set `Grocer::Notification#custom`.
116
106
 
117
107
  ```ruby
118
108
  notification = Grocer::Notification.new(
@@ -129,10 +119,9 @@ notification = Grocer::Notification.new(
129
119
 
130
120
  #### Passbook Notifications
131
121
 
132
- A `Grocer::PassbookNotification` is a specialized kind of notification which
133
- does not require any payload. That is, you need not (and *[Apple explicitly says
134
- not to](http://developer.apple.com/library/ios/#Documentation/UserExperience/Conceptual/PassKit_PG/Chapters/Updating.html#//apple_ref/doc/uid/TP40012195-CH5-SW1)*)
135
- send any payload for a Passbook notification. If you do, it will be ignored.
122
+ A `Grocer::PassbookNotification` is a specialized kind of notification which does not require any payload.
123
+ That is, you need not (and *[Apple explicitly says not to](http://developer.apple.com/library/ios/#Documentation/UserExperience/Conceptual/PassKit_PG/Chapters/Updating.html#//apple_ref/doc/uid/TP40012195-CH5-SW1)*) send any payload for a Passbook notification.
124
+ If you do, it will be ignored.
136
125
 
137
126
  ```ruby
138
127
  notification = Grocer::PassbookNotification.new(device_token: "...")
@@ -143,21 +132,19 @@ notification = Grocer::PassbookNotification.new(device_token: "...")
143
132
  #### Newsstand Notifications
144
133
 
145
134
  Grocer also supports the special Newsstand 'content-available' notification.
146
- `Grocer::NewsstandNotification` can be used for this. Like
147
- `Grocer::PassbookNotification`, it is a specialized kind of notification which
148
- does not require any payload. Likewise, anything you add to it will be ignored.
135
+ `Grocer::NewsstandNotification` can be used for this.
136
+ Like `Grocer::PassbookNotification`, it is a specialized kind of notification which does not require any payload.
137
+ Likewise, anything you add to it will be ignored.
149
138
 
150
139
  ```ruby
151
140
  notification = Grocer::NewsstandNotification.new(device_token: "...")
152
141
  # Generates a JSON payload like:
153
142
  # {"aps": {"content-available":1}}
154
- ````
143
+ ```
155
144
 
156
145
  #### Safari Notifications
157
146
 
158
- Grocer can be used for [Safari Push
159
- Notifications](https://developer.apple.com/notifications/safari-push-notifications/)
160
- introduced in Mavericks.
147
+ Grocer can be used for [Safari Push Notifications](https://developer.apple.com/notifications/safari-push-notifications/) introduced in Mavericks.
161
148
 
162
149
  ```ruby
163
150
  notification = Grocer::SafariNotification.new(
@@ -204,26 +191,20 @@ end
204
191
 
205
192
  #### Notes
206
193
 
207
- * `gateway`: Defaults to `feedback.push.apple.com` **only** when running in a
208
- production environment, as determined by either the `RAILS_ENV` or
209
- `RACK_ENV` environment variables. In all other cases, it defaults to the
210
- sandbox gateway, `feedback.sandbox.push.apple.com`.
211
- * `retries`: The number of times **grocer** will retry writing to or reading
212
- from the Apple Push Notification Service before raising any errors to client
213
- code.
194
+ * `gateway`: Defaults to `feedback.push.apple.com` **only** when running in a production environment, as determined by either the `RAILS_ENV` or `RACK_ENV` environment variables.
195
+ In all other cases, it defaults to the sandbox gateway, `feedback.sandbox.push.apple.com`.
196
+ * `retries`: The number of times **grocer** will retry writing to or reading from the Apple Push Notification Service before raising any errors to client code.
214
197
 
215
198
  ### Acceptance Testing
216
199
 
217
- Grocer ships with framework to setup a real looking APNS server. It listens on
218
- a real SSL-capable socket bound to localhost. See the [Connecting
219
- Notes](#notes) above for details.
200
+ Grocer ships with framework to setup a real looking APNS server.
201
+ It listens on a real SSL-capable socket bound to localhost.
202
+ See the [Connecting Notes](#notes) above for details.
220
203
 
221
- You can setup an APNS client to talk to it, then inspect the notifications the
222
- server received.
204
+ You can setup an APNS client to talk to it, then inspect the notifications the server received.
223
205
 
224
- The server simply exposes a blocking queue where notifications are placed when
225
- they are received. It is your responsibility to timeout if a message is not
226
- received in a reasonable amount of time.
206
+ The server simply exposes a blocking queue where notifications are placed when they are received.
207
+ It is your responsibility to timeout if a message is not received in a reasonable amount of time.
227
208
 
228
209
  For example, in RSpec:
229
210
 
@@ -253,10 +234,8 @@ end
253
234
 
254
235
  ## Device Token
255
236
 
256
- A device token is obtained from within the iOS app. More details are in Apple's
257
- [Registering for Remote
258
- Notifications](http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1)
259
- documentation.
237
+ A device token is obtained from within the iOS app.
238
+ More details are in Apple's [Registering for Remote Notifications](http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1) documentation.
260
239
 
261
240
  The key code for this purpose is:
262
241
 
@@ -279,37 +258,38 @@ The key code for this purpose is:
279
258
 
280
259
  ## Certificate File
281
260
 
282
- Login to the [iOS Provisioning Portal (App IDs)](https://developer.apple.com/ios/manage/bundles/index.action).
261
+ Login to the [iOS Provisioning Portal (App IDs)](https://developer.apple.com/account/ios/identifier/bundle).
262
+
263
+ Select your app bundle, scroll down and click "Edit."
264
+ This will bring you to a page that will allow you to setup and configure services for your app.
265
+ Scroll down until you see the service labeled "Push Notifications."
266
+ Depending on whether you’re creating a Development or Production certificate, click the appropriate "Create Certificate" button.
283
267
 
284
- Configure the appropriate certificate for push notifications and download the
285
- certificate:
268
+ ![Creating the Push Notification
269
+ Certificate](images/Creating_the_Push_Notification_Certificate.png)
286
270
 
287
- ![Downloading the Push Notification
288
- Certificate](images/Downloading_the_Push_Notification_Certificate.png)
271
+ Follow the instructions to create a Certificate Signing Request, click "Continue," upload the CSR, and download the resulting `.cer` file.
289
272
 
290
- Open the file in Keychain Access, then expand the certificate to show both the
291
- certificate *and* the private key. Command select so both are highlighted:
273
+ Open the `.cer` file in Keychain Access, then expand the certificate to show both the certificate *and* the private key.
274
+ Command-select so both are highlighted:
292
275
 
293
- ![Selecting both the certificate and private
294
- key](images/Selecting_both_the_certificate_and_private_key.png)
276
+ ![Selecting both the certificate and private key](images/Selecting_both_the_certificate_and_private_key.png)
295
277
 
296
278
  Control click and select to export the 2 items:
297
279
 
298
- ![Exporting the certificate and private
299
- key](images/Exporting_the_certificate_and_private_key.png)
280
+ ![Exporting the certificate and private key](images/Exporting_the_certificate_and_private_key.png)
300
281
 
301
- Save the items as a `.p12` file. Open a terminal window and run the following
302
- command:
282
+ Save the items as a `.p12` file.
283
+ Open a terminal window and run the following command:
303
284
 
304
285
  ```bash
305
286
  openssl pkcs12 -in exported_certificate.p12 -out certificate.pem -nodes -clcerts -des3
306
287
  ```
307
288
 
308
- You will be prompted for two password. The first one is the password
309
- that you used when you exported the private key and certificate from
310
- Keychain Access. The second password will be used to encrypt and lock
311
- the private key. This will be the passphrase used when configuring
312
- **grocer** to connect to APNs.
289
+ You will be prompted for two password.
290
+ The first one is the password that you used when you exported the private key and certificate from Keychain Access.
291
+ The second password will be used to encrypt and lock the private key.
292
+ This will be the passphrase used when configuring **grocer** to connect to APNs.
313
293
 
314
294
  The `certificate.pem` file that is generated can be used with **grocer**.
315
295
 
@@ -340,9 +320,6 @@ cat push.pem push_private_key.pem > certificate.pem
340
320
 
341
321
  ## Support Channels
342
322
 
343
- [GitHub Issues](https://github.com/grocer/grocer/issues) and [Pull
344
- Requests](https://github.com/grocer/grocer/pulls) are the primary venues for
345
- communicating issues and discussing possible features. Several of us also
346
- regularly hang out in the `#grocer` channel on Freenode; feel free to pop in
347
- and ask questions there as well. Thanks! :heart:
348
-
323
+ [GitHub Issues](https://github.com/grocer/grocer/issues) and [Pull Requests](https://github.com/grocer/grocer/pulls) are the primary venues for communicating issues and discussing possible features.
324
+ Several of us also regularly hang out in the `#grocer` channel on Freenode; feel free to pop in and ask questions there as well.
325
+ Thanks! :heart:
@@ -6,7 +6,8 @@ module Grocer
6
6
  result = {}
7
7
  each do |key, value|
8
8
  # Workaround for JRuby defining Fixnum#to_sym even in 1.9 mode
9
- symbolized_key = key.is_a?(Fixnum) ? key : (key.to_sym rescue key)
9
+ # (now updated to Integer, for Ruby >= 2.4.0)
10
+ symbolized_key = key.is_a?(Integer) ? key : (key.to_sym rescue key)
10
11
 
11
12
  result[symbolized_key] = value.is_a?(Hash) ?
12
13
  (value.extend DeepSymbolizeKeys).deep_symbolize_keys : value
@@ -1,3 +1,3 @@
1
1
  module Grocer
2
- VERSION = '0.7.0'
2
+ VERSION = '0.7.1'
3
3
  end
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.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Lindeman
@@ -10,84 +10,88 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-07-15 00:00:00.000000000 Z
13
+ date: 2017-04-22 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
21
  version: '3.4'
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
28
  version: '3.4'
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.10.1
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.10.1
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
- description: ! " Grocer interfaces with the Apple Push\n
86
- \ Notification Service to send push\n notifications
87
- to iOS devices and collect\n notification feedback via
88
- the Feedback\n Service.\n\n There
89
- are other gems out there to do this,\n but Grocer plans
90
- to be the cleanest, most\n extensible, and friendliest.\n"
85
+ description: |2
86
+ Grocer interfaces with the Apple Push
87
+ Notification Service to send push
88
+ notifications to iOS devices and collect
89
+ notification feedback via the Feedback
90
+ Service.
91
+
92
+ There are other gems out there to do this,
93
+ but Grocer plans to be the cleanest, most
94
+ extensible, and friendliest.
91
95
  email:
92
96
  - alindeman@gmail.com
93
97
  - steveharman@gmail.com
@@ -96,16 +100,16 @@ executables: []
96
100
  extensions: []
97
101
  extra_rdoc_files: []
98
102
  files:
99
- - .gitignore
100
- - .rspec
101
- - .travis.yml
103
+ - ".gitignore"
104
+ - ".rspec"
105
+ - ".travis.yml"
102
106
  - CHANGELOG.md
103
107
  - Gemfile
104
108
  - LICENSE
105
109
  - README.md
106
110
  - Rakefile
107
111
  - grocer.gemspec
108
- - images/Downloading_the_Push_Notification_Certificate.png
112
+ - images/Creating_the_Push_Notification_Certificate.png
109
113
  - images/Exporting_the_certificate_and_private_key.png
110
114
  - images/Selecting_both_the_certificate_and_private_key.png
111
115
  - lib/grocer.rb
@@ -164,17 +168,17 @@ require_paths:
164
168
  - lib
165
169
  required_ruby_version: !ruby/object:Gem::Requirement
166
170
  requirements:
167
- - - ! '>='
171
+ - - ">="
168
172
  - !ruby/object:Gem::Version
169
173
  version: '0'
170
174
  required_rubygems_version: !ruby/object:Gem::Requirement
171
175
  requirements:
172
- - - ! '>='
176
+ - - ">="
173
177
  - !ruby/object:Gem::Version
174
178
  version: '0'
175
179
  requirements: []
176
180
  rubyforge_project:
177
- rubygems_version: 2.6.6
181
+ rubygems_version: 2.6.8
178
182
  signing_key:
179
183
  specification_version: 4
180
184
  summary: Pushing Apple notifications since 2012.