pntfr 0.1.3 → 0.1.4

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: 829fb782afdbc0f329c888243e0c764e7a834ee3
4
- data.tar.gz: 3ea3b3eebb5276bab7e97d9cb43aeb4809aea9d8
3
+ metadata.gz: 72f800de7abd264da783c00f614745d0707a1c67
4
+ data.tar.gz: 6a517da6bbb0289631ed30b446b446162a9afb55
5
5
  SHA512:
6
- metadata.gz: 9c6647911bfde73e6e622670c9168e75aa07c36926b63b7b553e754862c7f173545656b7e273a97455e34aaa3047b7db3be022aa54df382c082bbf465edbc5a3
7
- data.tar.gz: 62d5b85dab82325fef872b3d674ed1b670722af2775ca6162d3002ee39f1a03465976b68a788e5b7e3aa31dcbd145ca47560940b946f045e45355a6ee17fbb2c
6
+ metadata.gz: ef4c923993a150b1d72c02ff360675a86cd0b786836b12c558dd72e426d178fb0904640a7ec6a49b3c180643bc4f149f7e3997080073e47cc1587b7935ccdffc
7
+ data.tar.gz: 84b38c45c01d94fb1a70821da23f54eba0bcb4b2d4efb0fe8d59c953e5678540359be4ffc3359fdc6cc4042a81f5e33fd759189793ee8b3d1108b4d98d89597e
data/README.md CHANGED
@@ -65,8 +65,33 @@ Pntfr::Notifier.to(session).msg({:title => 'Some Title', :description => 'A desc
65
65
  #send many notifications to a given device
66
66
  vsession= Pntfr::Notifier.to(session)
67
67
  vsession.msg({:title => 'Some Title', :description => 'A description'}).notify
68
- vsession.msg({:title => 'Some Other Title', :description => 'Another description', :sound => 'flipping-sound.aiff'}).notify
68
+ vsession.msg({
69
+ :title => 'Some Other Title',
70
+ :description => 'Another description',
71
+ :sound => 'flipping-sound.aiff'})
72
+ vsession.notify
73
+
74
+ # send notifications with custom content (an extra optional parameter to #msg)
75
+ vsession= Pntfr::Notifier.to(session)
76
+ vsession.msg(
77
+ {:title => 'Some Title', :description => 'A description'},
78
+ {
79
+ :extra1 => 'extra one',
80
+ :extra_2 => 'extra 2',
81
+ :'last-extra' => {lastkey: 'last value'}
82
+ }
83
+ )
84
+ vsession.notify
85
+
86
+ # Custom content will be found into :custom key for Android.
87
+ # For iOS each custom key is transformed into an 'acme-' prefixed key.
69
88
  ```
89
+ # Testing
90
+ For testing one can check the messages to be sent to each given driver the same way
91
+ that Rails ActiveMailer works: messages are stacked into `Pntfr.deliveries[push_id]`,
92
+ where for each key (push_id is the identifier of the device) one will get an ordered array
93
+ with all messages sent to the device while testing. Of course, while testing,
94
+ notifications are not sent, only stored in the stack.
70
95
 
71
96
  # Resources
72
97
  - Depends on APNS gem: https://rubygems.org/gems/apns
data/lib/pntfr/version.rb CHANGED
@@ -1,3 +1,6 @@
1
1
  module Pntfr
2
- VERSION = '0.1.3'
2
+ # [FEATURE] Accept custom content.
3
+ # [DOC] Documentation for testing.
4
+ # [TEST] Facilitate Rails testing.
5
+ VERSION = '0.1.4'
3
6
  end
@@ -13,12 +13,13 @@ module Pntfr
13
13
  @gcm= ::GCM.new(@notification_key) unless Pntfr.test_env?
14
14
  end
15
15
 
16
- def msg content
16
+ def msg content, custom=nil
17
17
  @data= {
18
18
  :title => content[:title],
19
19
  :description => content[:description],
20
20
  }
21
21
  @data[:sound]= parse_sound_file(content[:sound]) unless content[:sound].nil?
22
+ @data[:custom]= custom if custom
22
23
  self
23
24
  end
24
25
  def notify
@@ -5,14 +5,15 @@ require 'apns'
5
5
  module Pntfr
6
6
  module VirtualSession
7
7
  class Ios < Pntfr::VirtualSession::Base
8
- def msg content
8
+ def msg content, custom=nil
9
9
  configure_apns
10
10
  reset_msg
11
11
  @alert= content[:title]
12
- @alert+= "\n#{content[:description]}"
12
+ @alert+= "\n#{content[:description]}" if content.key?(:description)
13
13
  @sound= content[:sound]
14
14
  badge= content[:badge]
15
15
  @badge= content[:badge].to_i if badge
16
+ add_custom_content(custom) if custom
16
17
  self
17
18
  end
18
19
 
@@ -25,6 +26,7 @@ module Pntfr
25
26
  n[:badge]= @session.num_notifs
26
27
  end
27
28
  n[:sound]= @sound if @sound
29
+ n.merge!(@custom) if @custom
28
30
 
29
31
  if Pntfr.test_env?
30
32
  Pntfr.add_delivery(@push_id, n)
@@ -48,7 +50,13 @@ module Pntfr
48
50
  def reset_msg
49
51
  @alert= @sound= @badge= nil
50
52
  end
51
-
53
+ def add_custom_content custom
54
+ @custom= {}
55
+ custom.each_pair { |k, v|
56
+ key= "acme-#{k}".to_sym
57
+ @custom[key]= v
58
+ }
59
+ end
52
60
  end
53
61
  end
54
62
  end
data/pntfr.gemspec CHANGED
@@ -9,8 +9,9 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ['oliver']
10
10
  spec.email = ['oliver.hv@coditramuntana.com']
11
11
  spec.summary = %q{Push notifier is a simple adapter for APNS and GCM gems, that way you can use same api to send push notifications to both devices.}
12
- # spec.description = %q{TODO: Write a longer description. Optional.}
13
- spec.homepage = "http://www.coditramuntana.com"
12
+ spec.description = %q{One single API to send push notifications to Android and iOS devices.}
13
+ # spec.homepage = "http://www.coditramuntana.com"
14
+ spec.homepage = 'https://github.com/tramuntanal/pntfr'
14
15
  spec.license = "MIT"
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0")
data/test/fxtr.rb ADDED
@@ -0,0 +1,27 @@
1
+ # Fixtures
2
+ #
3
+ #
4
+
5
+ module Fxtr
6
+ module Android
7
+ def self.simple_msg
8
+ {
9
+ :title => 'Some Title', :description => 'A description',
10
+ :sound => 'bell.caff'
11
+ }
12
+ end
13
+ end
14
+ module Common
15
+ # without description, only title
16
+ def self.simple_msg
17
+ {:title => 'Test Title'}
18
+ end
19
+ def self.custom_msg_content
20
+ {
21
+ :extra1 => 'extra one',
22
+ :extra_2 => 'extra 2',
23
+ :'last-extra' => {lastkey: 'last value'}
24
+ }
25
+ end
26
+ end
27
+ end
@@ -3,4 +3,4 @@
3
3
  # minimal expected session
4
4
  Pntfr::DeviceSession= Struct.new(:platform, :push_id)
5
5
  # session with num_notifs which will be autoincremented on each sent msg
6
- Pntfr::IosDeviceSession= Struct.new(:platform, :push_id, :num_notifs)
6
+ Pntfr::IosDeviceSession= Struct.new(:platform, :push_id, :num_notifs)
@@ -1,44 +1,61 @@
1
1
  require 'pntfr/device_session'
2
+ require 'fxtr'
3
+
2
4
  module Pntfr
3
5
  module VirtualSession
4
6
  class AndroidTest < Minitest::Test
5
7
 
8
+ def setup
9
+ @push_id= 'ANDROIDANDROIDANDROIDANDROIDANDROIDANDROIDANDROIDANDROIDANDROID'
10
+ end
6
11
  def test_received_content_shoud_be_sent_to_gcm
7
- push_id= 'ANDROIDANDROIDANDROIDANDROIDANDROIDANDROIDANDROIDANDROIDANDROID'
8
- session= DeviceSession.new(Pntfr::Platforms::ANDROID, push_id)
12
+ session= DeviceSession.new(Pntfr::Platforms::ANDROID, @push_id)
9
13
 
10
- vsession= Pntfr::Notifier.to(session).msg({
11
- :title => 'Some Title', :description => 'A description',
12
- :sound => 'bell.caff'
13
- })
14
+ vsession= Pntfr::Notifier.to(session).msg(Fxtr::Android.simple_msg)
14
15
  rs= vsession.notify
15
16
  assert rs.success? and rs.msg_sent?
16
17
 
17
- notifs= Pntfr.deliveries[push_id]
18
- refute_nil notifs, "A notification should have been delivered for #{push_id}"
18
+ notifs= Pntfr.deliveries[@push_id]
19
+ refute_nil notifs, "A notification should have been delivered for #{@push_id}"
19
20
  notif= notifs.last
20
21
  assert_equal 'Some Title', notif[:data][:title]
21
22
  assert_equal 'A description', notif[:data][:description]
22
23
  assert_equal 'bell', notif[:data][:sound]
23
24
  end
24
25
  def test_sound_attribute_shoud_be_sent_to_gcm
25
- push_id= 'ANDROIDANDROIDANDROIDANDROIDANDROIDANDROIDANDROIDANDROIDANDROID'
26
- session= DeviceSession.new(Pntfr::Platforms::ANDROID, push_id)
26
+ session= DeviceSession.new(Pntfr::Platforms::ANDROID, @push_id)
27
27
 
28
- vsession= Pntfr::Notifier.to(session).msg({
29
- :title => 'Some Title', :description => 'A description',
30
- :sound => 'bell.caff'
31
- })
28
+ vsession= Pntfr::Notifier.to(session).msg(Fxtr::Android.simple_msg)
32
29
  rs= vsession.notify
33
30
  assert rs.success? and rs.msg_sent?
34
31
 
35
- notifs= Pntfr.deliveries[push_id]
36
- refute_nil notifs, "A notification should have been delivered for #{push_id}"
32
+ notifs= Pntfr.deliveries[@push_id]
33
+ refute_nil notifs, "A notification should have been delivered for #{@push_id}"
37
34
  notif= notifs.last
38
35
  assert_equal 'Some Title', notif[:data][:title]
39
36
  assert_equal 'A description', notif[:data][:description]
40
37
  assert_equal 'bell', notif[:data][:sound]
41
38
  end
39
+
40
+ def test_sending_custom_content_for_android_should_be_added_as_more_keys
41
+ session= DeviceSession.new(Pntfr::Platforms::ANDROID, @push_id)
42
+
43
+ vsession= Pntfr::Notifier.to(session)
44
+ vsession.msg(Fxtr::Common.simple_msg, Fxtr::Common.custom_msg_content)
45
+ rs= vsession.notify
46
+ assert rs.success? and rs.msg_sent?
47
+
48
+ notifs= Pntfr.deliveries[@push_id]
49
+ refute_nil notifs, "A notification should have been delivered for #{@push_id}"
50
+ notif= notifs.last
51
+ data= notif[:data]
52
+ assert_equal 'Test Title', data[:title]
53
+ assert_equal 'extra one', data[:custom][:extra1]
54
+ assert_equal 'extra 2', data[:custom][:extra_2]
55
+ assert_equal({lastkey: 'last value'}, data[:custom][:'last-extra'])
56
+
57
+ end
58
+
42
59
  end
43
60
  end
44
61
  end
@@ -2,16 +2,18 @@ require 'pntfr/device_session'
2
2
  module Pntfr
3
3
  module VirtualSession
4
4
  class IosTest < Minitest::Test
5
+ def setup
6
+ @push_id= 'IOSiosIOSiosIOSiosIOSiosIOSiosIOSiosIOSiosIOSiosIOSiosIOSios'
7
+ end
5
8
 
6
9
  def test_received_content_shoud_be_ready_to_be_sent_to_apns
7
- push_id= 'IOSiosIOSiosIOSiosIOSiosIOSiosIOSiosIOSiosIOSiosIOSiosIOSios'
8
- session= DeviceSession.new(Pntfr::Platforms::IOS, push_id)
10
+ session= DeviceSession.new(Pntfr::Platforms::IOS, @push_id)
9
11
 
10
12
  rs= Pntfr::Notifier.to(session).msg({:title => 'thatitle', :description => 'thadescription', :sound => 'click.aiff', :badge => 33}).notify
11
13
  assert rs.success? and rs.msg_sent?
12
14
 
13
- ios_notifs= Pntfr.deliveries[push_id]
14
- refute_nil ios_notifs, "A notification should have been delivered for #{push_id}"
15
+ ios_notifs= Pntfr.deliveries[@push_id]
16
+ refute_nil ios_notifs, "A notification should have been delivered for #{@push_id}"
15
17
  ios_notif= ios_notifs.last
16
18
  assert_equal "thatitle\nthadescription", ios_notif[:alert]
17
19
  assert_equal 'click.aiff', ios_notif[:sound]
@@ -39,6 +41,23 @@ module Pntfr
39
41
  assert_equal 'default', notif[:sound]
40
42
  assert_equal 5, notif[:badge]
41
43
  end
44
+
45
+ def test_sending_custom_content_for_ios_should_be_added_as_acme_keys
46
+ session= DeviceSession.new(Pntfr::Platforms::IOS, @push_id)
47
+
48
+ vsession= Pntfr::Notifier.to(session)
49
+ vsession.msg(Fxtr::Common.simple_msg, Fxtr::Common.custom_msg_content)
50
+ rs= vsession.notify
51
+ assert rs.success? and rs.msg_sent?
52
+
53
+ ios_notifs= Pntfr.deliveries[@push_id]
54
+ refute_nil ios_notifs, "A notification should have been delivered for #{@push_id}"
55
+ ios_notif= ios_notifs.last
56
+ assert_equal 'Test Title', ios_notif[:alert]
57
+ assert_equal 'extra one', ios_notif[:'acme-extra1']
58
+ assert_equal 'extra 2', ios_notif[:'acme-extra_2']
59
+ assert_equal({lastkey: 'last value'}, ios_notif[:'acme-last-extra'])
60
+ end
42
61
  end
43
62
  end
44
63
  end
@@ -25,4 +25,4 @@ module Pntfr
25
25
  end
26
26
 
27
27
  end
28
- end
28
+ end
data/test/test_helper.rb CHANGED
@@ -7,7 +7,7 @@ require 'pntfr'
7
7
  # require all test files
8
8
  def add_to_path(d)
9
9
  Dir.entries(d).each do |f|
10
- next if f == '.' or f == '..'
10
+ next if f == '.' || f == '..'
11
11
  file= File.join(d, f)
12
12
  if File.directory?(file)
13
13
  add_to_path(file)
@@ -17,4 +17,3 @@ def add_to_path(d)
17
17
  end
18
18
  end
19
19
  add_to_path(File.dirname(__FILE__))
20
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pntfr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - oliver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-10 00:00:00.000000000 Z
11
+ date: 2014-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apns
@@ -98,7 +98,7 @@ dependencies:
98
98
  - - ">="
99
99
  - !ruby/object:Gem::Version
100
100
  version: '0'
101
- description:
101
+ description: One single API to send push notifications to Android and iOS devices.
102
102
  email:
103
103
  - oliver.hv@coditramuntana.com
104
104
  executables: []
@@ -123,6 +123,7 @@ files:
123
123
  - lib/pntfr/virtual_session/ios.rb
124
124
  - lib/pntfr/virtual_session/success_response.rb
125
125
  - pntfr.gemspec
126
+ - test/fxtr.rb
126
127
  - test/pntfr/device_session.rb
127
128
  - test/pntfr/platforms_test.rb
128
129
  - test/pntfr/push_notifier_test.rb
@@ -132,7 +133,7 @@ files:
132
133
  - test/pntfr/virtual_session/response_test.rb
133
134
  - test/pntfr_configuration_test.rb
134
135
  - test/test_helper.rb
135
- homepage: http://www.coditramuntana.com
136
+ homepage: https://github.com/tramuntanal/pntfr
136
137
  licenses:
137
138
  - MIT
138
139
  metadata: {}
@@ -158,6 +159,7 @@ specification_version: 4
158
159
  summary: Push notifier is a simple adapter for APNS and GCM gems, that way you can
159
160
  use same api to send push notifications to both devices.
160
161
  test_files:
162
+ - test/fxtr.rb
161
163
  - test/pntfr/device_session.rb
162
164
  - test/pntfr/platforms_test.rb
163
165
  - test/pntfr/push_notifier_test.rb