five_mobile_push 0.4.1 → 0.4.2
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.
data/Rakefile
CHANGED
@@ -1,2 +1,13 @@
|
|
1
|
-
require '
|
2
|
-
|
1
|
+
require 'rake'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
desc "Run all examples"
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
6
|
+
|
7
|
+
task :default => :spec
|
8
|
+
|
9
|
+
desc "Build the gemfile"
|
10
|
+
task :build do
|
11
|
+
sh "gem build five_mobile_push.gemspec"
|
12
|
+
end
|
13
|
+
task :gem => :build
|
@@ -2,17 +2,27 @@ module FiveMobilePush
|
|
2
2
|
# @private Used internally. You'll never use this class directly.
|
3
3
|
# Documented for the benefit of contributors.
|
4
4
|
class Payload
|
5
|
-
|
6
|
-
|
5
|
+
MAXIMUM_MESSAGE_LENGTH = 128
|
6
|
+
|
7
|
+
# This exception is raised when a payload meta data exceed its maximum length
|
8
|
+
class MessageTooLargeError < ArgumentError
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :message, :meta_data
|
7
12
|
|
8
13
|
# @param [#to_s] message The message you wish to send with a notice
|
9
14
|
# @param [Hash] meta_data (nil) Any meta data to send along with the
|
10
15
|
# notice. Leave as +nil+ if none is to be sent.
|
11
|
-
def initialize(message, meta_data=
|
16
|
+
def initialize(message, meta_data={})
|
12
17
|
self.message = message
|
13
18
|
self.meta_data = meta_data
|
14
19
|
end
|
15
20
|
|
21
|
+
def meta_data=(new_meta_data)
|
22
|
+
validate_meta_data!(new_meta_data)
|
23
|
+
@meta_data = new_meta_data
|
24
|
+
end
|
25
|
+
|
16
26
|
# @param [#to_s] message The message you wish to send with a notice
|
17
27
|
def message=(message)
|
18
28
|
@message = message.to_s
|
@@ -25,17 +35,33 @@ module FiveMobilePush
|
|
25
35
|
|
26
36
|
private
|
27
37
|
|
38
|
+
def validate_meta_data!(meta_data)
|
39
|
+
meta_data_is_correct_type!(meta_data)
|
40
|
+
meta_data_messages_is_valid_length!(meta_data)
|
41
|
+
end
|
42
|
+
|
43
|
+
def meta_data_is_correct_type!(meta_data)
|
44
|
+
unless meta_data.is_a?(Hash)
|
45
|
+
raise ArgumentError, 'meta_data must be a Hash'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# @todo Better error message for lengthy meta data
|
50
|
+
def meta_data_messages_is_valid_length!(meta_data)
|
51
|
+
unless meta_data.all? { |k, v| v.length <= MAXIMUM_MESSAGE_LENGTH }
|
52
|
+
raise MessageTooLargeError
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
28
56
|
def as_json
|
29
|
-
|
57
|
+
{
|
30
58
|
'msg' => {
|
31
59
|
'type' => 'string',
|
32
60
|
'value' => message
|
33
61
|
},
|
34
62
|
'sound' => 'default',
|
35
63
|
'launch' => true
|
36
|
-
}
|
37
|
-
payload['meta'] = meta_data if meta_data
|
38
|
-
payload
|
64
|
+
}.merge(meta_data)
|
39
65
|
end
|
40
66
|
end
|
41
67
|
end
|
@@ -2,7 +2,6 @@ require 'spec_helper'
|
|
2
2
|
require 'uri'
|
3
3
|
|
4
4
|
describe FiveMobilePush::Notifier do
|
5
|
-
|
6
5
|
let(:client) { Fabricate.build(:client) }
|
7
6
|
|
8
7
|
subject { FiveMobilePush::Notifier.new(client) }
|
@@ -15,15 +14,14 @@ describe FiveMobilePush::Notifier do
|
|
15
14
|
|
16
15
|
subject.broadcast(:iphone) do |message|
|
17
16
|
message.body "Minor downtime tonight from 7PM-9PM EST"
|
17
|
+
message.meta_data :a => '/a/b/c'
|
18
18
|
end
|
19
19
|
|
20
20
|
a_request(:post, broadcast_endpoint).should have_been_made
|
21
21
|
end
|
22
|
-
|
23
22
|
end
|
24
23
|
|
25
24
|
describe '#notify_devices' do
|
26
|
-
|
27
25
|
let(:notify_devices_endpoint) { notifier_endpoint('toDevices') }
|
28
26
|
|
29
27
|
it "notifies a list of devices" do
|
@@ -31,15 +29,14 @@ describe FiveMobilePush::Notifier do
|
|
31
29
|
|
32
30
|
subject.notify_devices(['abc', 'def']) do |message|
|
33
31
|
message.body 'You win a prize!'
|
32
|
+
message.meta_data :a => '/a/b/c'
|
34
33
|
end
|
35
34
|
|
36
35
|
a_request(:post, notify_devices_endpoint).should have_been_made
|
37
36
|
end
|
38
|
-
|
39
37
|
end
|
40
38
|
|
41
39
|
describe "#notify_by_tags" do
|
42
|
-
|
43
40
|
let(:notify_by_tags_endpoint) { notifier_endpoint('toTags') }
|
44
41
|
|
45
42
|
it "notifies devices by tags" do
|
@@ -47,15 +44,14 @@ describe FiveMobilePush::Notifier do
|
|
47
44
|
|
48
45
|
subject.notify_by_tags([:iphone, :android], ['tag1', 'tag2']) do |message|
|
49
46
|
message.body 'tag1 and tag2'
|
47
|
+
message.meta_data :a => '/a/b/c'
|
50
48
|
end
|
51
49
|
|
52
50
|
a_request(:post, notify_by_tags_endpoint).should have_been_made
|
53
51
|
end
|
54
|
-
|
55
52
|
end
|
56
53
|
|
57
54
|
def notifier_endpoint(name)
|
58
55
|
"https://push.fivemobile.com/rest/notify/#{name}"
|
59
56
|
end
|
60
|
-
|
61
57
|
end
|
@@ -1,6 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe FiveMobilePush::Payload do
|
4
|
+
describe '#meta_data=' do
|
5
|
+
subject { Fabricate.build(:payload) }
|
6
|
+
|
7
|
+
it 'sets meta data' do
|
8
|
+
subject.meta_data = meta_data = { a: 'b' }
|
9
|
+
subject.meta_data.should == meta_data
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'raises an ArgumentError if a Hash is not provided' do
|
13
|
+
expect {
|
14
|
+
subject.meta_data = nil
|
15
|
+
}.to raise_error(ArgumentError, 'meta_data must be a Hash')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'raises a MessageTooLargeError if a value is too large in the meta data' do
|
19
|
+
expect {
|
20
|
+
subject.meta_data = {
|
21
|
+
just_right: 'c' * FiveMobilePush::Payload::MAXIMUM_MESSAGE_LENGTH,
|
22
|
+
too_long: 'f' * FiveMobilePush::Payload::MAXIMUM_MESSAGE_LENGTH.next
|
23
|
+
}
|
24
|
+
}.to raise_error(FiveMobilePush::Payload::MessageTooLargeError)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
4
28
|
describe '#to_json' do
|
5
29
|
subject { Fabricate.build(:payload) }
|
6
30
|
|
@@ -8,13 +32,9 @@ describe FiveMobilePush::Payload do
|
|
8
32
|
subject.to_json.should include(subject.message)
|
9
33
|
end
|
10
34
|
|
11
|
-
it 'includes meta data' do
|
12
|
-
subject.
|
13
|
-
|
14
|
-
|
15
|
-
it 'excludes meta data if there is none' do
|
16
|
-
subject.meta_data = nil
|
17
|
-
subject.to_json.should_not include('meta')
|
35
|
+
it 'includes any meta data' do
|
36
|
+
subject.meta_data = { a: 'b' }
|
37
|
+
subject.to_json.should include('"a":"b"')
|
18
38
|
end
|
19
39
|
end
|
20
40
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: five_mobile_push
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.4.
|
5
|
+
version: 0.4.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kevin Faustino
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-05-
|
14
|
+
date: 2011-05-03 00:00:00 -04:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|