rack-push-notification 0.5.3 → 0.6.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 +4 -4
- data/Gemfile +3 -1
- data/Gemfile.lock +27 -23
- data/{LICENSE → LICENSE.md} +1 -1
- data/README.md +52 -55
- data/Rakefile +7 -5
- data/lib/rack/push-notification.rb +7 -5
- data/lib/rack/push-notification/migrations/001_base_schema.rb +4 -2
- data/lib/rack/push-notification/migrations/002_add_full_text_search.rb +6 -4
- data/lib/rack/push-notification/models/device.rb +3 -1
- data/lib/rack/push-notification/version.rb +7 -0
- data/rack-push-notification.gemspec +22 -19
- metadata +37 -38
- data/rack-push-notification-0.5.0.gem +0 -0
- data/rack-push-notification-0.5.1.gem +0 -0
- data/rack-push-notification-0.5.2.gem +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e465875b3138965e524b1a2f0955e967b3648d49
|
4
|
+
data.tar.gz: 9586b593cad69143d3fee2308930e9394cb1be7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 166942f0e5d44a0ebd405c10fe22f96ead905c46bcc8a9b03e8c79137027a2203eaaecd20a2d63e09b0e7255a523e4a37013882734d5cd6504e7d190ddc5aae7
|
7
|
+
data.tar.gz: 0f1a3267da641c984b4b44f8e0344f6d0744affff501f56e82dd0742ab15abbe147e75cc516583ea2a600f0c02fdc7e63805a9d00dec6a5b7d896d30e95b0f31
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rack-push-notification (0.
|
4
|
+
rack-push-notification (0.6.0)
|
5
5
|
rack (~> 1.4)
|
6
6
|
rack-contrib (~> 1.1)
|
7
7
|
sequel (>= 3.0)
|
@@ -11,33 +11,34 @@ PATH
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
-
diff-lcs (1.
|
15
|
-
rack (1.
|
16
|
-
rack-contrib (1.
|
17
|
-
rack (
|
18
|
-
rack-protection (1.5.
|
14
|
+
diff-lcs (1.3)
|
15
|
+
rack (1.6.11)
|
16
|
+
rack-contrib (1.8.0)
|
17
|
+
rack (~> 1.4)
|
18
|
+
rack-protection (1.5.5)
|
19
19
|
rack
|
20
|
-
rake (
|
21
|
-
rspec (3.
|
22
|
-
rspec-core (~> 3.
|
23
|
-
rspec-expectations (~> 3.
|
24
|
-
rspec-mocks (~> 3.
|
25
|
-
rspec-core (3.
|
26
|
-
rspec-support (~> 3.
|
27
|
-
rspec-expectations (3.
|
20
|
+
rake (12.3.2)
|
21
|
+
rspec (3.8.0)
|
22
|
+
rspec-core (~> 3.8.0)
|
23
|
+
rspec-expectations (~> 3.8.0)
|
24
|
+
rspec-mocks (~> 3.8.0)
|
25
|
+
rspec-core (3.8.2)
|
26
|
+
rspec-support (~> 3.8.0)
|
27
|
+
rspec-expectations (3.8.4)
|
28
28
|
diff-lcs (>= 1.2.0, < 2.0)
|
29
|
-
rspec-support (~> 3.
|
30
|
-
rspec-mocks (3.
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
29
|
+
rspec-support (~> 3.8.0)
|
30
|
+
rspec-mocks (3.8.1)
|
31
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
32
|
+
rspec-support (~> 3.8.0)
|
33
|
+
rspec-support (3.8.2)
|
34
|
+
sequel (5.22.0)
|
35
|
+
sinatra (1.4.8)
|
36
|
+
rack (~> 1.5)
|
36
37
|
rack-protection (~> 1.4)
|
37
|
-
tilt (
|
38
|
+
tilt (>= 1.3, < 3)
|
38
39
|
sinatra-param (0.1.3)
|
39
40
|
sinatra (~> 1.3)
|
40
|
-
tilt (
|
41
|
+
tilt (2.0.9)
|
41
42
|
|
42
43
|
PLATFORMS
|
43
44
|
ruby
|
@@ -46,3 +47,6 @@ DEPENDENCIES
|
|
46
47
|
rack-push-notification!
|
47
48
|
rake
|
48
49
|
rspec
|
50
|
+
|
51
|
+
BUNDLED WITH
|
52
|
+
2.0.1
|
data/{LICENSE → LICENSE.md}
RENAMED
data/README.md
CHANGED
@@ -1,33 +1,55 @@
|
|
1
|
-
Rack::PushNotification
|
2
|
-
======================
|
3
|
-
**A Rack-mountable webservice for managing push notifications**
|
4
|
-
|
5
|
-
`Rack::PushNotification` generates API endpoints that can be consumed by iOS apps to register and unregister for push notifications.
|
6
|
-
|
7
|
-
## Example Record
|
8
|
-
|
9
|
-
<table>
|
10
|
-
<tr><td><tt>token</tt></td><td>"ce8be627 2e43e855 16033e24 b4c28922 0eeda487 9c477160 b2545e95 b68b5969"</td></tr>
|
11
|
-
<tr><td><tt>alias</tt></td><td>mattt@heroku.com</td></tr>
|
12
|
-
<tr><td><tt>badge</tt></td><td>0</td></tr>
|
13
|
-
<tr><td><tt>locale</tt></td><td>en_US</td></tr>
|
14
|
-
<tr><td><tt>language</tt></td><td>en</td></tr>
|
15
|
-
<tr><td><tt>timezone</tt></td><td>America/Los_Angeles</td></tr>
|
16
|
-
<tr><td><tt>ip_address</tt></td><td>0.0.0.0</td></tr>
|
17
|
-
<tr><td><tt>lat</tt></td><td>37.7716</td></tr>
|
18
|
-
<tr><td><tt>lng</tt></td><td>-122.4137</td></tr>
|
19
|
-
<tr><td><tt>tags</tt></td><td><tt>["iPhone OS 6.0", "v1.0", "iPhone"]</tt></td></tr>
|
20
|
-
</table>
|
1
|
+
# Rack::PushNotification
|
21
2
|
|
22
|
-
|
23
|
-
|
24
|
-
A device's `locale` & `language` can be used to localize outgoing communications to that particular user. Having `timezone` information gives you the ability to schedule messages for an exact time of day, to ensure maximum impact (and minimum annoyance). `ip_address` as well as `lat` and `lng` allows you to specifically target users according to their geographic location.
|
25
|
-
|
26
|
-
**It is strongly recommended that you use `Rack::PushNotification` in conjunction with some sort of Rack authentication middleware, so that the administration endpoints are not accessible without some form of credentials.**
|
3
|
+
**A Rack-mountable webservice for managing push notifications**
|
27
4
|
|
28
|
-
|
5
|
+
`Rack::PushNotification` is Rack middleware that
|
6
|
+
generates API endpoints that can be consumed by iOS apps
|
7
|
+
to register and unregister for push notifications.
|
8
|
+
|
9
|
+
**Example Record**
|
10
|
+
|
11
|
+
| Field | Value |
|
12
|
+
| ------------ | --------------------------------------------------------------------------- |
|
13
|
+
| `token` | `"ce8be627 2e43e855 16033e24 b4c28922 0eeda487 9c477160 b2545e95 b68b5969"` |
|
14
|
+
| `alias` | `mattt@heroku.com` |
|
15
|
+
| `badge` | `0` |
|
16
|
+
| `locale` | `en_US` |
|
17
|
+
| `language` | `en` |
|
18
|
+
| `timezone` | `America/Los_Angeles` |
|
19
|
+
| `ip_address` | `0.0.0.0` |
|
20
|
+
| `lat` | `37.7716` |
|
21
|
+
| `lng` | `-122.4137` |
|
22
|
+
| `tags` | `["iPhone OS 6.0", "v1.0", "iPhone"]` |
|
23
|
+
|
24
|
+
- Each device has a `token`,
|
25
|
+
which uniquely identifies the app installation on a particular device.
|
26
|
+
- This token can be associated with an `alias`,
|
27
|
+
which can be a domain-specific piece of identifying information,
|
28
|
+
such as a username or e-mail address.
|
29
|
+
- A running `badge` count keeps track of the badge count to show on the app icon.
|
30
|
+
- A device's `locale` & `language` can be used to
|
31
|
+
localize outgoing communications to that particular user.
|
32
|
+
- Having `timezone` information gives you the ability to
|
33
|
+
schedule messages for an exact time of day and to
|
34
|
+
ensure maximum impact (and minimum annoyance).
|
35
|
+
- An `ip_address` --- along with `lat` and `lng` ---
|
36
|
+
lets you to specifically target users according to their geographic location.
|
37
|
+
|
38
|
+
> **Important**
|
39
|
+
> Use `Rack::PushNotification` in conjunction with some kind of authentication,
|
40
|
+
> so that the administration endpoints aren't publicly accessible.
|
41
|
+
|
42
|
+
## Usage
|
43
|
+
|
44
|
+
Rack::PushNotification can be run as Rack middleware or as a single web application.
|
45
|
+
All that's required is a connection to a Postgres database.
|
46
|
+
Define this with the environment variable `DATABASE_URL`.
|
47
|
+
|
48
|
+
> For rails, use the
|
49
|
+
> [`rails-database-url`](https://github.com/glenngillen/rails-database-url) gem
|
50
|
+
> to define this from the `database.yml`.
|
29
51
|
|
30
|
-
|
52
|
+
An example application can be found in the `/example` directory of this repository.
|
31
53
|
|
32
54
|
### config.ru
|
33
55
|
|
@@ -38,28 +60,6 @@ Bundler.require
|
|
38
60
|
run Rack::PushNotification
|
39
61
|
```
|
40
62
|
|
41
|
-
An example application can be found in the `/example` directory of this repository.
|
42
|
-
|
43
|
-
## iOS Client Library
|
44
|
-
|
45
|
-
To get the full benefit of `Rack::PushNotification`, use the [Orbiter](https://github.com/mattt/Orbiter) library to register for Push Notifications on iOS.
|
46
|
-
|
47
|
-
```objective-c
|
48
|
-
#import "Orbiter.h"
|
49
|
-
|
50
|
-
- (void)application:(UIApplication *)application
|
51
|
-
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
|
52
|
-
{
|
53
|
-
NSURL *serverURL = [NSURL URLWithString:@"http://raging-notification-3556.herokuapp.com/"]
|
54
|
-
Orbiter *orbiter = [[Orbiter alloc] initWithBaseURL:serverURL credential:nil];
|
55
|
-
[orbiter registerDeviceToken:deviceToken withAlias:nil success:^(id responseObject) {
|
56
|
-
NSLog(@"Registration Success: %@", responseObject);
|
57
|
-
} failure:^(NSError *error) {
|
58
|
-
NSLog(@"Registration Error: %@", error);
|
59
|
-
}];
|
60
|
-
}
|
61
|
-
```
|
62
|
-
|
63
63
|
## Deployment
|
64
64
|
|
65
65
|
`Rack::PushNotification` can be deployed to Heroku with the following commands:
|
@@ -71,12 +71,9 @@ $ git push heroku master
|
|
71
71
|
|
72
72
|
## Contact
|
73
73
|
|
74
|
-
Mattt
|
75
|
-
|
76
|
-
- http://github.com/mattt
|
77
|
-
- http://twitter.com/mattt
|
78
|
-
- m@mattt.me
|
74
|
+
[Mattt](https://twitter.com/mattt)
|
79
75
|
|
80
76
|
## License
|
81
77
|
|
82
|
-
Rack::PushNotification is available under the MIT license.
|
78
|
+
Rack::PushNotification is available under the MIT license.
|
79
|
+
See the LICENSE file for more info.
|
data/Rakefile
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler'
|
2
4
|
Bundler.setup
|
3
5
|
|
4
|
-
gemspec = eval(File.read(
|
6
|
+
gemspec = eval(File.read('rack-push-notification.gemspec'))
|
5
7
|
|
6
|
-
task :
|
8
|
+
task build: "#{gemspec.full_name}.gem"
|
7
9
|
|
8
|
-
file "#{gemspec.full_name}.gem" => gemspec.files + [
|
9
|
-
system
|
10
|
+
file "#{gemspec.full_name}.gem" => gemspec.files + ['rack-push-notification.gemspec'] do
|
11
|
+
system 'gem build rack-push-notification.gemspec'
|
10
12
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rack'
|
2
4
|
require 'rack/contrib'
|
3
5
|
|
@@ -35,27 +37,27 @@ module Rack
|
|
35
37
|
param :tags, Array
|
36
38
|
|
37
39
|
record = Device.find(token: params[:token]) || Device.new
|
38
|
-
record.set(params.update(
|
40
|
+
record.set(params.update(ip_address: request.ip))
|
39
41
|
|
40
42
|
code = record.new? ? 201 : 200
|
41
43
|
|
42
44
|
if record.save
|
43
45
|
status code
|
44
|
-
{device: record}.to_json
|
46
|
+
{ device: record }.to_json
|
45
47
|
else
|
46
48
|
status 400
|
47
|
-
{errors: record.errors}.to_json
|
49
|
+
{ errors: record.errors }.to_json
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
51
53
|
delete '/devices/:token/?' do
|
52
|
-
record = Device.find(token: params[:token])
|
54
|
+
(record = Device.find(token: params[:token])) || halt(404)
|
53
55
|
|
54
56
|
if record.destroy
|
55
57
|
status 200
|
56
58
|
else
|
57
59
|
status 400
|
58
|
-
{errors: record.errors}.to_json
|
60
|
+
{ errors: record.errors }.to_json
|
59
61
|
end
|
60
62
|
end
|
61
63
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
Sequel.migration do
|
2
4
|
up do
|
3
5
|
create_table :push_notification_devices do
|
@@ -5,7 +7,7 @@ Sequel.migration do
|
|
5
7
|
|
6
8
|
column :token, :varchar, empty: false, unique: true
|
7
9
|
column :alias, :varchar
|
8
|
-
column :badge, :int4,
|
10
|
+
column :badge, :int4, null: false, default: 0
|
9
11
|
column :locale, :varchar
|
10
12
|
column :language, :varchar
|
11
13
|
column :timezone, :varchar, empty: false, default: 'UTC'
|
@@ -16,7 +18,7 @@ Sequel.migration do
|
|
16
18
|
|
17
19
|
index :token
|
18
20
|
index :alias
|
19
|
-
index [
|
21
|
+
index %i[lat lng]
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
Sequel.migration do
|
2
4
|
up do
|
3
5
|
add_column :push_notification_devices, :tsv, 'TSVector'
|
4
|
-
add_index :push_notification_devices, :tsv, type:
|
6
|
+
add_index :push_notification_devices, :tsv, type: 'GIN'
|
5
7
|
create_trigger :push_notification_devices, :tsv, :tsvector_update_trigger,
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
args: %i[tsv pg_catalog.english token alias locale timezone],
|
9
|
+
events: %i[insert update],
|
10
|
+
each_row: true
|
9
11
|
end
|
10
12
|
|
11
13
|
down do
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Rack
|
2
4
|
class PushNotification::Device < Sequel::Model
|
3
5
|
plugin :json_serializer, naked: true, except: :id
|
@@ -24,7 +26,7 @@ module Rack
|
|
24
26
|
private
|
25
27
|
|
26
28
|
def normalize_token!
|
27
|
-
self.token =
|
29
|
+
self.token = token.strip.gsub(/[<\s>]/, '')
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
@@ -1,27 +1,30 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
4
|
+
require 'rack/push-notification/version'
|
3
5
|
|
4
6
|
Gem::Specification.new do |s|
|
5
|
-
s.name =
|
6
|
-
s.authors = [
|
7
|
-
s.email =
|
8
|
-
s.homepage =
|
9
|
-
s.version =
|
7
|
+
s.name = 'rack-push-notification'
|
8
|
+
s.authors = ['Mattt']
|
9
|
+
s.email = 'mattt@me.com'
|
10
|
+
s.homepage = 'https://mat.tt'
|
11
|
+
s.version = Rack::PushNotification::VERSION
|
12
|
+
s.licenses = 'MIT'
|
10
13
|
s.platform = Gem::Platform::RUBY
|
11
|
-
s.summary =
|
12
|
-
s.description =
|
14
|
+
s.summary = 'Rack::PushNotification'
|
15
|
+
s.description = 'Generate a REST API for registering and querying push notification device tokens.'
|
13
16
|
|
14
|
-
s.add_dependency
|
15
|
-
s.add_dependency
|
16
|
-
s.add_dependency
|
17
|
-
s.add_dependency
|
18
|
-
s.add_dependency
|
17
|
+
s.add_dependency 'rack', '~> 1.4'
|
18
|
+
s.add_dependency 'rack-contrib', '~> 1.1'
|
19
|
+
s.add_dependency 'sequel', '>= 3.0'
|
20
|
+
s.add_dependency 'sinatra', '~> 1.3'
|
21
|
+
s.add_dependency 'sinatra-param', '~> 0.1'
|
19
22
|
|
20
|
-
s.add_development_dependency
|
21
|
-
s.add_development_dependency
|
23
|
+
s.add_development_dependency 'rake'
|
24
|
+
s.add_development_dependency 'rspec'
|
22
25
|
|
23
|
-
s.files = Dir[
|
26
|
+
s.files = Dir['./**/*'].reject { |file| file =~ %r{\./(bin|example|log|pkg|script|spec|test|vendor)} }
|
24
27
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
25
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
26
|
-
s.require_paths = [
|
28
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
29
|
+
s.require_paths = ['lib']
|
27
30
|
end
|
metadata
CHANGED
@@ -1,135 +1,134 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-push-notification
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Mattt
|
7
|
+
- Mattt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.4'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.4'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rack-contrib
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: sequel
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: sinatra
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.3'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sinatra-param
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0.1'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.1'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: Generate a REST API for registering and querying push notification device
|
112
112
|
tokens.
|
113
|
-
email:
|
113
|
+
email: mattt@me.com
|
114
114
|
executables: []
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
-
- ./Gemfile
|
119
|
-
- ./Gemfile.lock
|
120
|
-
- ./
|
121
|
-
- ./
|
122
|
-
- ./
|
123
|
-
- ./lib/rack/push-notification.rb
|
124
|
-
- ./
|
125
|
-
- ./rack
|
126
|
-
- ./rack
|
127
|
-
- ./rack
|
128
|
-
- ./rack-push-notification.gemspec
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
licenses: []
|
118
|
+
- "./Gemfile"
|
119
|
+
- "./Gemfile.lock"
|
120
|
+
- "./LICENSE.md"
|
121
|
+
- "./README.md"
|
122
|
+
- "./Rakefile"
|
123
|
+
- "./lib/rack/push-notification.rb"
|
124
|
+
- "./lib/rack/push-notification/migrations/001_base_schema.rb"
|
125
|
+
- "./lib/rack/push-notification/migrations/002_add_full_text_search.rb"
|
126
|
+
- "./lib/rack/push-notification/models/device.rb"
|
127
|
+
- "./lib/rack/push-notification/version.rb"
|
128
|
+
- "./rack-push-notification.gemspec"
|
129
|
+
homepage: https://mat.tt
|
130
|
+
licenses:
|
131
|
+
- MIT
|
133
132
|
metadata: {}
|
134
133
|
post_install_message:
|
135
134
|
rdoc_options: []
|
@@ -137,17 +136,17 @@ require_paths:
|
|
137
136
|
- lib
|
138
137
|
required_ruby_version: !ruby/object:Gem::Requirement
|
139
138
|
requirements:
|
140
|
-
- -
|
139
|
+
- - ">="
|
141
140
|
- !ruby/object:Gem::Version
|
142
141
|
version: '0'
|
143
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
143
|
requirements:
|
145
|
-
- -
|
144
|
+
- - ">="
|
146
145
|
- !ruby/object:Gem::Version
|
147
146
|
version: '0'
|
148
147
|
requirements: []
|
149
148
|
rubyforge_project:
|
150
|
-
rubygems_version: 2.
|
149
|
+
rubygems_version: 2.6.14
|
151
150
|
signing_key:
|
152
151
|
specification_version: 4
|
153
152
|
summary: Rack::PushNotification
|
Binary file
|
Binary file
|
Binary file
|