pusher 1.2.0.rc3 → 1.2.0.rc4
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/lib/pusher/native_notification/client.rb +1 -58
- data/lib/pusher/request.rb +1 -1
- data/lib/pusher/version.rb +1 -1
- data/spec/client_spec.rb +2 -138
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b9efdaf822f5abafd54a89499c0475fd75dfde4
|
4
|
+
data.tar.gz: 698e043ffa4116cde7f9951631c865a4c191fff6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8aea046a40212d7b8bcc6467bea3e9ec142dce1917259e86dedadc3919e8cd396d4809bd18626d7ca392a0aea2878156802178d0e9af9a1ef5c9a190161b5d7b
|
7
|
+
data.tar.gz: fb590812921456d724f116482ca55195ef19af01eff2b6481a1030afe65064de9798f1c5038cb8f3b09dfc2721af8f3368e0446d50aa204266591786a8d787b2
|
@@ -5,9 +5,6 @@ module Pusher
|
|
5
5
|
|
6
6
|
API_PREFIX = "server_api"
|
7
7
|
API_VERSION = "v1"
|
8
|
-
GCM_TTL = 241920
|
9
|
-
RESTRICTED_GCM_PAYLOAD_KEYS = [:to, :registration_ids]
|
10
|
-
WEBHOOK_LEVELS = ["DEBUG", "INFO"]
|
11
8
|
|
12
9
|
def initialize(app_id, host, scheme, pusher_client)
|
13
10
|
@app_id = app_id
|
@@ -45,14 +42,8 @@ module Pusher
|
|
45
42
|
# @return [String]
|
46
43
|
def payload(interests, data)
|
47
44
|
interests = Array(interests).map(&:to_s)
|
48
|
-
|
49
45
|
raise Pusher::Error, "Too many interests provided" if interests.length > 1
|
50
|
-
|
51
|
-
data = deep_symbolize_keys!(data)
|
52
|
-
validate_payload(data)
|
53
|
-
|
54
|
-
data.merge!(interests: interests)
|
55
|
-
|
46
|
+
data = deep_symbolize_keys!(data).merge(interests: interests)
|
56
47
|
MultiJson.encode(data)
|
57
48
|
end
|
58
49
|
|
@@ -60,54 +51,6 @@ module Pusher
|
|
60
51
|
URI.parse("#{@scheme}://#{@host}/#{API_PREFIX}/#{API_VERSION}/apps/#{@app_id}#{path}")
|
61
52
|
end
|
62
53
|
|
63
|
-
# Validate payload
|
64
|
-
# `time_to_live` -> value b/w 0 and 241920
|
65
|
-
# If the `notification` key is provided, ensure
|
66
|
-
# that there is an accompanying `title` and `icon`
|
67
|
-
# field
|
68
|
-
def validate_payload(payload)
|
69
|
-
unless (payload.has_key?(:apns) || payload.has_key?(:gcm))
|
70
|
-
raise Pusher::Error, "GCM or APNS data must be provided"
|
71
|
-
end
|
72
|
-
|
73
|
-
if (gcm_payload = payload[:gcm])
|
74
|
-
# Restricted keys
|
75
|
-
RESTRICTED_GCM_PAYLOAD_KEYS.each { |k| gcm_payload.delete(k) }
|
76
|
-
if (ttl = gcm_payload[:time_to_live])
|
77
|
-
|
78
|
-
if ttl.to_i < 0 || ttl.to_i > GCM_TTL
|
79
|
-
raise Pusher::Error, "Time to live must be between 0 and 241920 (4 weeks)"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# If the notification key is provided
|
84
|
-
# validate the `icon` and `title`keys
|
85
|
-
if (notification = gcm_payload[:notification])
|
86
|
-
notification_title, notification_icon = notification.values_at(:title, :icon)
|
87
|
-
|
88
|
-
if (!notification_title || notification_title.empty?)
|
89
|
-
raise Pusher::Error, "Notification title is a required field"
|
90
|
-
end
|
91
|
-
|
92
|
-
if (!notification_icon || notification_icon.empty?)
|
93
|
-
raise Pusher::Error, "Notification icon is a required field"
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
if (webhook_url = payload[:webhook_url])
|
99
|
-
raise Pusher::Error, "Webhook url is invalid" unless webhook_url =~ /\A#{URI::regexp(['http', 'https'])}\z/
|
100
|
-
end
|
101
|
-
|
102
|
-
if (webhook_level = payload[:webhook_level])
|
103
|
-
raise Pusher::Error, "Webhook level cannot be used without a webhook url" if !payload.has_key?(:webhook_url)
|
104
|
-
|
105
|
-
unless WEBHOOK_LEVELS.include?(webhook_level.upcase)
|
106
|
-
raise Pusher::Error, "Webhook level must either be INFO or DEBUG"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
54
|
# Symbolize all keys in the hash recursively
|
112
55
|
def deep_symbolize_keys!(hash)
|
113
56
|
hash.keys.each do |k|
|
data/lib/pusher/request.rb
CHANGED
data/lib/pusher/version.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -550,10 +550,6 @@ describe Pusher do
|
|
550
550
|
expect(@client.notification_host).to eq(@client.notification_client.host)
|
551
551
|
end
|
552
552
|
|
553
|
-
it "should raise an error if the gcm or apns key isn't provided in the payload" do
|
554
|
-
expect { @client.notify(["test"], { foo: "bar" }) }.to raise_error(Pusher::Error)
|
555
|
-
end
|
556
|
-
|
557
553
|
it "should raise an error if more than one interest is provided" do
|
558
554
|
payload = {
|
559
555
|
gcm: {
|
@@ -567,70 +563,6 @@ describe Pusher do
|
|
567
563
|
expect { @client.notify(["test1", "test2"], payload) }.to raise_error(Pusher::Error)
|
568
564
|
end
|
569
565
|
|
570
|
-
it "should raise an error if the notification hash is missing the title field" do
|
571
|
-
payload = {
|
572
|
-
gcm: {
|
573
|
-
notification: {
|
574
|
-
icon: "someicon"
|
575
|
-
}
|
576
|
-
}
|
577
|
-
}
|
578
|
-
|
579
|
-
expect{ @client.notify(["test"], payload) }.to raise_error(Pusher::Error)
|
580
|
-
end
|
581
|
-
|
582
|
-
it "should raise an error if the notification title is empty" do
|
583
|
-
payload = {
|
584
|
-
gcm: {
|
585
|
-
notification: {
|
586
|
-
title: "",
|
587
|
-
icon: "myicon"
|
588
|
-
}
|
589
|
-
}
|
590
|
-
}
|
591
|
-
|
592
|
-
expect { @client.notify(["test"], payload) }.to raise_error(Pusher::Error)
|
593
|
-
end
|
594
|
-
|
595
|
-
it "should raise an error if the notification hash is missing the icon field" do
|
596
|
-
payload = {
|
597
|
-
gcm: {
|
598
|
-
notification: {
|
599
|
-
title: "sometitle"
|
600
|
-
}
|
601
|
-
}
|
602
|
-
}
|
603
|
-
|
604
|
-
expect{ @client.notify(["test"], payload) }.to raise_error(Pusher::Error)
|
605
|
-
end
|
606
|
-
|
607
|
-
it "should raise an error if the notification icon is empty" do
|
608
|
-
payload = {
|
609
|
-
gcm: {
|
610
|
-
notification: {
|
611
|
-
title: "title",
|
612
|
-
icon: ""
|
613
|
-
}
|
614
|
-
}
|
615
|
-
}
|
616
|
-
|
617
|
-
expect { @client.notify(["test"], payload) }.to raise_error(Pusher::Error)
|
618
|
-
end
|
619
|
-
|
620
|
-
it "should raise an error if the ttl field is provided and has an illegal value" do
|
621
|
-
payload = {
|
622
|
-
gcm: {
|
623
|
-
time_to_live: 98091283,
|
624
|
-
notification: {
|
625
|
-
title: "title",
|
626
|
-
icon: "icon",
|
627
|
-
}
|
628
|
-
}
|
629
|
-
}
|
630
|
-
|
631
|
-
expect{ @client.notify(["test"], payload) }.to raise_error(Pusher::Error)
|
632
|
-
end
|
633
|
-
|
634
566
|
it "should send a request to the notifications endpoint" do
|
635
567
|
notification_host_regexp = %r{nativepush-cluster1.pusher.com}
|
636
568
|
payload = {
|
@@ -653,76 +585,8 @@ describe Pusher do
|
|
653
585
|
:body => MultiJson.encode({ :foo => "bar" })
|
654
586
|
})
|
655
587
|
|
656
|
-
@client.notify(["test"], payload)
|
657
|
-
|
658
|
-
|
659
|
-
it "should delete restricted gcm keys before sending a notification" do
|
660
|
-
notification_host_regexp = %r{nativepush-cluster1.pusher.com}
|
661
|
-
payload = {
|
662
|
-
interests: ["test"],
|
663
|
-
gcm: {
|
664
|
-
notification: {
|
665
|
-
title: "Hello",
|
666
|
-
icon: "icon",
|
667
|
-
}
|
668
|
-
}
|
669
|
-
}
|
670
|
-
|
671
|
-
stub_request(
|
672
|
-
:post,
|
673
|
-
notification_host_regexp,
|
674
|
-
).with(
|
675
|
-
body: MultiJson.encode(payload)
|
676
|
-
).to_return({
|
677
|
-
:status => 200,
|
678
|
-
:body => MultiJson.encode({ :foo => "bar" })
|
679
|
-
})
|
680
|
-
|
681
|
-
payload[:gcm].merge!(to: "blah", registration_ids: ["reg1", "reg2"])
|
682
|
-
@client.notify(["test"], payload)
|
683
|
-
end
|
684
|
-
|
685
|
-
it "should raise an error for an invalid webhook url field" do
|
686
|
-
payload = {
|
687
|
-
gcm: {
|
688
|
-
notification: {
|
689
|
-
title: "Hello",
|
690
|
-
icon: "icon"
|
691
|
-
}
|
692
|
-
},
|
693
|
-
webhook_url: "totallyinvalid"
|
694
|
-
}
|
695
|
-
|
696
|
-
expect { @client.notify(["test"], payload) }.to raise_error(Pusher::Error)
|
697
|
-
end
|
698
|
-
|
699
|
-
it "should raise an error if the webhook level is not supported" do
|
700
|
-
payload = {
|
701
|
-
gcm: {
|
702
|
-
notification: {
|
703
|
-
title: "Hello",
|
704
|
-
icon: "icon"
|
705
|
-
}
|
706
|
-
},
|
707
|
-
webhook_url: "http://test.com/wh",
|
708
|
-
webhook_level: "meh"
|
709
|
-
}
|
710
|
-
|
711
|
-
expect { @client.notify(["test"], payload) }.to raise_error(Pusher::Error)
|
712
|
-
end
|
713
|
-
|
714
|
-
it "should raise an error if the webhook level is used without the webhook url" do
|
715
|
-
payload = {
|
716
|
-
gcm: {
|
717
|
-
notification: {
|
718
|
-
title: "Hello",
|
719
|
-
icon: "icon"
|
720
|
-
}
|
721
|
-
},
|
722
|
-
webhook_level: "meh"
|
723
|
-
}
|
724
|
-
|
725
|
-
expect { @client.notify(["test"], payload) }.to raise_error(Pusher::Error)
|
588
|
+
res = @client.notify(["test"], payload)
|
589
|
+
expect(res).to eq({foo: "bar"})
|
726
590
|
end
|
727
591
|
end
|
728
592
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pusher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.0.
|
4
|
+
version: 1.2.0.rc4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pusher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -186,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
186
|
version: 1.3.1
|
187
187
|
requirements: []
|
188
188
|
rubyforge_project:
|
189
|
-
rubygems_version: 2.
|
189
|
+
rubygems_version: 2.4.2
|
190
190
|
signing_key:
|
191
191
|
specification_version: 4
|
192
192
|
summary: Pusher API client
|