rpush 1.0.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.
Files changed (145) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +99 -0
  3. data/LICENSE +7 -0
  4. data/README.md +189 -0
  5. data/bin/rpush +36 -0
  6. data/config/database.yml +44 -0
  7. data/lib/generators/rpush_generator.rb +44 -0
  8. data/lib/generators/templates/add_adm.rb +23 -0
  9. data/lib/generators/templates/add_alert_is_json_to_rapns_notifications.rb +9 -0
  10. data/lib/generators/templates/add_app_to_rapns.rb +11 -0
  11. data/lib/generators/templates/add_fail_after_to_rpush_notifications.rb +9 -0
  12. data/lib/generators/templates/add_gcm.rb +102 -0
  13. data/lib/generators/templates/add_rpush.rb +349 -0
  14. data/lib/generators/templates/add_wpns.rb +16 -0
  15. data/lib/generators/templates/create_rapns_apps.rb +16 -0
  16. data/lib/generators/templates/create_rapns_feedback.rb +18 -0
  17. data/lib/generators/templates/create_rapns_notifications.rb +29 -0
  18. data/lib/generators/templates/rename_rapns_to_rpush.rb +63 -0
  19. data/lib/generators/templates/rpush.rb +104 -0
  20. data/lib/rpush.rb +62 -0
  21. data/lib/rpush/TODO +3 -0
  22. data/lib/rpush/adm/app.rb +15 -0
  23. data/lib/rpush/adm/data_validator.rb +11 -0
  24. data/lib/rpush/adm/notification.rb +29 -0
  25. data/lib/rpush/apns/app.rb +29 -0
  26. data/lib/rpush/apns/binary_notification_validator.rb +12 -0
  27. data/lib/rpush/apns/device_token_format_validator.rb +12 -0
  28. data/lib/rpush/apns/feedback.rb +16 -0
  29. data/lib/rpush/apns/notification.rb +84 -0
  30. data/lib/rpush/apns_feedback.rb +13 -0
  31. data/lib/rpush/app.rb +18 -0
  32. data/lib/rpush/configuration.rb +75 -0
  33. data/lib/rpush/daemon.rb +140 -0
  34. data/lib/rpush/daemon/adm.rb +9 -0
  35. data/lib/rpush/daemon/adm/delivery.rb +222 -0
  36. data/lib/rpush/daemon/apns.rb +16 -0
  37. data/lib/rpush/daemon/apns/certificate_expired_error.rb +20 -0
  38. data/lib/rpush/daemon/apns/delivery.rb +64 -0
  39. data/lib/rpush/daemon/apns/disconnection_error.rb +20 -0
  40. data/lib/rpush/daemon/apns/feedback_receiver.rb +79 -0
  41. data/lib/rpush/daemon/app_runner.rb +187 -0
  42. data/lib/rpush/daemon/batch.rb +115 -0
  43. data/lib/rpush/daemon/constants.rb +59 -0
  44. data/lib/rpush/daemon/delivery.rb +28 -0
  45. data/lib/rpush/daemon/delivery_error.rb +19 -0
  46. data/lib/rpush/daemon/dispatcher/http.rb +21 -0
  47. data/lib/rpush/daemon/dispatcher/tcp.rb +30 -0
  48. data/lib/rpush/daemon/dispatcher_loop.rb +54 -0
  49. data/lib/rpush/daemon/dispatcher_loop_collection.rb +33 -0
  50. data/lib/rpush/daemon/feeder.rb +68 -0
  51. data/lib/rpush/daemon/gcm.rb +9 -0
  52. data/lib/rpush/daemon/gcm/delivery.rb +222 -0
  53. data/lib/rpush/daemon/interruptible_sleep.rb +61 -0
  54. data/lib/rpush/daemon/loggable.rb +31 -0
  55. data/lib/rpush/daemon/reflectable.rb +13 -0
  56. data/lib/rpush/daemon/retry_header_parser.rb +23 -0
  57. data/lib/rpush/daemon/retryable_error.rb +20 -0
  58. data/lib/rpush/daemon/service_config_methods.rb +33 -0
  59. data/lib/rpush/daemon/store/active_record.rb +154 -0
  60. data/lib/rpush/daemon/store/active_record/reconnectable.rb +68 -0
  61. data/lib/rpush/daemon/tcp_connection.rb +143 -0
  62. data/lib/rpush/daemon/too_many_requests_error.rb +20 -0
  63. data/lib/rpush/daemon/wpns.rb +9 -0
  64. data/lib/rpush/daemon/wpns/delivery.rb +132 -0
  65. data/lib/rpush/deprecatable.rb +23 -0
  66. data/lib/rpush/deprecation.rb +23 -0
  67. data/lib/rpush/embed.rb +28 -0
  68. data/lib/rpush/gcm/app.rb +11 -0
  69. data/lib/rpush/gcm/expiry_collapse_key_mutual_inclusion_validator.rb +11 -0
  70. data/lib/rpush/gcm/notification.rb +30 -0
  71. data/lib/rpush/logger.rb +63 -0
  72. data/lib/rpush/multi_json_helper.rb +16 -0
  73. data/lib/rpush/notification.rb +69 -0
  74. data/lib/rpush/notifier.rb +52 -0
  75. data/lib/rpush/payload_data_size_validator.rb +10 -0
  76. data/lib/rpush/push.rb +16 -0
  77. data/lib/rpush/railtie.rb +11 -0
  78. data/lib/rpush/reflection.rb +58 -0
  79. data/lib/rpush/registration_ids_count_validator.rb +10 -0
  80. data/lib/rpush/version.rb +3 -0
  81. data/lib/rpush/wpns/app.rb +9 -0
  82. data/lib/rpush/wpns/notification.rb +26 -0
  83. data/lib/tasks/cane.rake +18 -0
  84. data/lib/tasks/rpush.rake +16 -0
  85. data/lib/tasks/test.rake +38 -0
  86. data/spec/functional/adm_spec.rb +43 -0
  87. data/spec/functional/apns_spec.rb +58 -0
  88. data/spec/functional/embed_spec.rb +49 -0
  89. data/spec/functional/gcm_spec.rb +42 -0
  90. data/spec/functional/wpns_spec.rb +41 -0
  91. data/spec/support/cert_with_password.pem +90 -0
  92. data/spec/support/cert_without_password.pem +59 -0
  93. data/spec/support/install.sh +32 -0
  94. data/spec/support/simplecov_helper.rb +20 -0
  95. data/spec/support/simplecov_quality_formatter.rb +8 -0
  96. data/spec/tmp/.gitkeep +0 -0
  97. data/spec/unit/adm/app_spec.rb +58 -0
  98. data/spec/unit/adm/notification_spec.rb +45 -0
  99. data/spec/unit/apns/app_spec.rb +29 -0
  100. data/spec/unit/apns/feedback_spec.rb +9 -0
  101. data/spec/unit/apns/notification_spec.rb +208 -0
  102. data/spec/unit/apns_feedback_spec.rb +21 -0
  103. data/spec/unit/app_spec.rb +30 -0
  104. data/spec/unit/configuration_spec.rb +45 -0
  105. data/spec/unit/daemon/adm/delivery_spec.rb +243 -0
  106. data/spec/unit/daemon/apns/certificate_expired_error_spec.rb +11 -0
  107. data/spec/unit/daemon/apns/delivery_spec.rb +101 -0
  108. data/spec/unit/daemon/apns/disconnection_error_spec.rb +18 -0
  109. data/spec/unit/daemon/apns/feedback_receiver_spec.rb +117 -0
  110. data/spec/unit/daemon/app_runner_spec.rb +292 -0
  111. data/spec/unit/daemon/batch_spec.rb +232 -0
  112. data/spec/unit/daemon/delivery_error_spec.rb +13 -0
  113. data/spec/unit/daemon/delivery_spec.rb +38 -0
  114. data/spec/unit/daemon/dispatcher/http_spec.rb +33 -0
  115. data/spec/unit/daemon/dispatcher/tcp_spec.rb +38 -0
  116. data/spec/unit/daemon/dispatcher_loop_collection_spec.rb +37 -0
  117. data/spec/unit/daemon/dispatcher_loop_spec.rb +71 -0
  118. data/spec/unit/daemon/feeder_spec.rb +98 -0
  119. data/spec/unit/daemon/gcm/delivery_spec.rb +310 -0
  120. data/spec/unit/daemon/interruptible_sleep_spec.rb +68 -0
  121. data/spec/unit/daemon/reflectable_spec.rb +27 -0
  122. data/spec/unit/daemon/retryable_error_spec.rb +14 -0
  123. data/spec/unit/daemon/service_config_methods_spec.rb +33 -0
  124. data/spec/unit/daemon/store/active_record/reconnectable_spec.rb +114 -0
  125. data/spec/unit/daemon/store/active_record_spec.rb +357 -0
  126. data/spec/unit/daemon/tcp_connection_spec.rb +287 -0
  127. data/spec/unit/daemon/too_many_requests_error_spec.rb +14 -0
  128. data/spec/unit/daemon/wpns/delivery_spec.rb +159 -0
  129. data/spec/unit/daemon_spec.rb +159 -0
  130. data/spec/unit/deprecatable_spec.rb +32 -0
  131. data/spec/unit/deprecation_spec.rb +15 -0
  132. data/spec/unit/embed_spec.rb +50 -0
  133. data/spec/unit/gcm/app_spec.rb +4 -0
  134. data/spec/unit/gcm/notification_spec.rb +36 -0
  135. data/spec/unit/logger_spec.rb +127 -0
  136. data/spec/unit/notification_shared.rb +105 -0
  137. data/spec/unit/notification_spec.rb +15 -0
  138. data/spec/unit/notifier_spec.rb +49 -0
  139. data/spec/unit/push_spec.rb +43 -0
  140. data/spec/unit/reflection_spec.rb +30 -0
  141. data/spec/unit/rpush_spec.rb +9 -0
  142. data/spec/unit/wpns/app_spec.rb +4 -0
  143. data/spec/unit/wpns/notification_spec.rb +30 -0
  144. data/spec/unit_spec_helper.rb +101 -0
  145. metadata +276 -0
@@ -0,0 +1,15 @@
1
+ require "unit_spec_helper"
2
+
3
+ describe Rpush::Notification do
4
+ let(:notification) { Rpush::Notification.new }
5
+
6
+ it 'allows assignment of many registration IDs' do
7
+ notification.registration_ids = ['a', 'b']
8
+ notification.registration_ids.should eq ['a', 'b']
9
+ end
10
+
11
+ it 'allows assignment of a single registration ID' do
12
+ notification.registration_ids = 'a'
13
+ notification.registration_ids.should eq ['a']
14
+ end
15
+ end
@@ -0,0 +1,49 @@
1
+ require 'unit_spec_helper'
2
+ require 'rpush/notifier'
3
+
4
+ describe Rpush::Notifier do
5
+
6
+ before(:each) { @port = 5000 }
7
+ subject { Rpush::Notifier.new('127.0.0.1', @port) }
8
+ its(:socket) { should_not be_nil }
9
+
10
+ context "when connected" do
11
+ before :each do
12
+ @reader = UDPSocket.new
13
+ @reader.bind('127.0.0.1', 0)
14
+ @port = @reader.addr[1]
15
+ end
16
+
17
+ describe "notify" do
18
+ it "calls write on the socket" do
19
+ UDPSocket.any_instance.should_receive(:write)
20
+ subject.notify
21
+ end
22
+
23
+ it "writes data that can be read from socket" do
24
+ subject.notify
25
+ expect(@reader.recv(1)).to eq 'x'
26
+ end
27
+ end
28
+ end
29
+
30
+ describe "default notifier" do
31
+ it "creates using :connect first" do
32
+ Rpush.config.stub :wakeup => { :connect => '127.0.0.1', :port => 1234 }
33
+ Rpush::Notifier.should_receive(:new).with('127.0.0.1', 1234)
34
+ Rpush.notifier
35
+ end
36
+
37
+ it "creates using :host next" do
38
+ Rpush.config.stub :wakeup => { :host => '127.0.0.1', :port => 1234 }
39
+ Rpush::Notifier.should_receive(:new).with('127.0.0.1', 1234)
40
+ Rpush.notifier
41
+ end
42
+
43
+ it "returns nil when wakeup is not specified" do
44
+ Rpush.config.stub :wakeup => nil
45
+ Rpush::Notifier.should_not_receive(:new)
46
+ expect(Rpush.notifier).to be_nil
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,43 @@
1
+ require 'unit_spec_helper'
2
+
3
+ describe Rpush, 'push' do
4
+ before do
5
+ Rpush::Daemon::AppRunner.stub(:sync => nil, :wait => nil)
6
+ Rpush::Daemon::Feeder.stub(:start => nil)
7
+ end
8
+
9
+ it 'sets the push config option to true' do
10
+ Rpush.push
11
+ Rpush.config.push.should be_true
12
+ end
13
+
14
+ it 'initializes the store' do
15
+ Rpush::Daemon.should_receive(:initialize_store)
16
+ Rpush.push
17
+ end
18
+
19
+ it 'syncs the app runner' do
20
+ Rpush::Daemon::AppRunner.should_receive(:sync)
21
+ Rpush.push
22
+ end
23
+
24
+ it 'starts the feeder' do
25
+ Rpush::Daemon::Feeder.should_receive(:start)
26
+ Rpush.push
27
+ end
28
+
29
+ it 'waits on the app runner' do
30
+ Rpush::Daemon::AppRunner.should_receive(:wait)
31
+ Rpush.push
32
+ end
33
+
34
+ it 'stops on the app runner' do
35
+ Rpush::Daemon::AppRunner.should_receive(:stop)
36
+ Rpush.push
37
+ end
38
+
39
+ it 'overrides the default config options with those given as a hash' do
40
+ Rpush.config.batch_size = 20
41
+ expect { Rpush.push(:batch_size => 10) }.to change(Rpush.config, :batch_size).to(10)
42
+ end
43
+ end
@@ -0,0 +1,30 @@
1
+ require 'unit_spec_helper'
2
+
3
+ describe Rpush do
4
+ it 'yields reflections for configuration' do
5
+ did_yield = false
6
+ Rpush.reflect { |on| did_yield = true }
7
+ did_yield.should be_true
8
+ end
9
+
10
+ it 'returns all reflections' do
11
+ Rpush.reflections.should be_kind_of(Rpush::Reflections)
12
+ end
13
+ end
14
+
15
+ describe Rpush::Reflections do
16
+ it 'dispatches the given reflection' do
17
+ did_yield = false
18
+ Rpush.reflect do |on|
19
+ on.error { did_yield = true }
20
+ end
21
+ Rpush.reflections.__dispatch(:error)
22
+ did_yield.should be_true
23
+ end
24
+
25
+ it 'raises an error when trying to dispatch and unknown reflection' do
26
+ expect do
27
+ Rpush.reflections.__dispatch(:unknown)
28
+ end.to raise_error(Rpush::Reflections::NoSuchReflectionError)
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ require 'unit_spec_helper'
2
+
3
+ describe Rpush do
4
+ it "lazy initializes the logger" do
5
+ Rpush.config.stub(:foreground => true)
6
+ Rpush::Logger.should_receive(:new).with(:foreground => true)
7
+ Rpush.logger
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ require 'unit_spec_helper'
2
+
3
+ describe Rpush::Wpns::App do
4
+ end
@@ -0,0 +1,30 @@
1
+ require 'unit_spec_helper'
2
+ require 'unit/notification_shared.rb'
3
+
4
+ describe Rpush::Wpns::Notification do
5
+ it_should_behave_like 'an Notification subclass'
6
+ let(:app) { Rpush::Wpns::App.create!(:name => 'test', :auth_key => 'abc') }
7
+ let(:notification_class) { Rpush::Wpns::Notification }
8
+ let(:notification) { notification_class.new }
9
+ let(:data_setter) { 'data=' }
10
+ let(:data_getter) { 'data' }
11
+
12
+ it "should have an url in the uri parameter" do
13
+ notification = Rpush::Wpns::Notification.new(:uri => "somthing")
14
+ notification.valid?
15
+ notification.errors[:uri].include?("is invalid").should be_true
16
+ end
17
+
18
+ it "should be invalid if there's no message" do
19
+ notification = Rpush::Wpns::Notification.new(:alert => "")
20
+ notification.valid?
21
+ notification.errors[:alert].include?("can't be blank").should be_true
22
+ end
23
+ end
24
+
25
+ describe Rpush::Wpns::Notification, "when assigning the url" do
26
+ it "should be a valid url" do
27
+ notification = Rpush::Wpns::Notification.new(:alert => "abc", :uri => "some")
28
+ notification.uri_is_valid?.should be_false
29
+ end
30
+ end
@@ -0,0 +1,101 @@
1
+ ENV['RAILS_ENV'] = 'test'
2
+
3
+ require 'bundler'
4
+ Bundler.require(:default)
5
+
6
+ require 'active_record'
7
+
8
+ unless ENV['TRAVIS'] && ENV['QUALITY'] == 'false'
9
+ begin
10
+ require './spec/support/simplecov_helper'
11
+ include SimpleCovHelper
12
+ start_simple_cov("unit-#{RUBY_VERSION}")
13
+ rescue LoadError
14
+ puts "Coverage disabled."
15
+ end
16
+ end
17
+
18
+ jruby = defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
19
+
20
+ $adapter = ENV['ADAPTER'] || 'postgresql'
21
+ $adapter = 'jdbc' + $adapter if jruby
22
+
23
+ DATABASE_CONFIG = YAML.load_file(File.expand_path("../config/database.yml", File.dirname(__FILE__)))
24
+
25
+ if DATABASE_CONFIG[$adapter].nil?
26
+ puts "No such adapter '#{$adapter}'. Valid adapters are #{DATABASE_CONFIG.keys.join(', ')}."
27
+ exit 1
28
+ end
29
+
30
+ if ENV['TRAVIS']
31
+ DATABASE_CONFIG[$adapter]['username'] = 'postgres'
32
+ else
33
+ require 'etc'
34
+ username = $adapter =~ /mysql/ ? 'root' : Etc.getlogin
35
+ DATABASE_CONFIG[$adapter]['username'] = username
36
+ end
37
+
38
+ puts "Using #{$adapter} adapter."
39
+
40
+ ActiveRecord::Base.configurations = {"test" => DATABASE_CONFIG[$adapter]}
41
+ ActiveRecord::Base.establish_connection(DATABASE_CONFIG[$adapter])
42
+
43
+ require 'generators/templates/add_rpush'
44
+
45
+ migrations = [AddRpush]
46
+
47
+ migrations.reverse.each do |m|
48
+ begin
49
+ m.down
50
+ rescue ActiveRecord::StatementInvalid => e
51
+ p e
52
+ end
53
+ end
54
+
55
+ migrations.each(&:up)
56
+
57
+ require 'database_cleaner'
58
+ DatabaseCleaner.strategy = :truncation
59
+
60
+ require 'rpush'
61
+ require 'rpush/daemon'
62
+
63
+ Rpush::Daemon.initialize_store
64
+ Rpush::Notification.reset_column_information
65
+ Rpush::App.reset_column_information
66
+ Rpush::Apns::Feedback.reset_column_information
67
+
68
+ RSpec.configure do |config|
69
+ # config.before :suite do
70
+ # PerfTools::CpuProfiler.start('/tmp/rpush_profile')
71
+ # end
72
+ # config.after :suite do
73
+ # PerfTools::CpuProfiler.stop
74
+ # end
75
+
76
+ config.before(:each) do
77
+ DatabaseCleaner.clean
78
+ end
79
+
80
+ config.after(:each) do
81
+ Rpush.logger = nil
82
+ Rpush::Daemon.store = nil
83
+ Rpush::Deprecation.muted do
84
+ Rpush.config.set_defaults if Rpush.config.kind_of?(Rpush::Configuration)
85
+ end
86
+ end
87
+ end
88
+
89
+ # a test certificate that contains both an X509 certificate and
90
+ # a private key, similar to those used for connecting to Apple
91
+ # push notification servers.
92
+ #
93
+ # Note that we cannot validate the certificate and private key
94
+ # because we are missing the certificate chain used to validate
95
+ # the certificate, and this is private to Apple. So if the app
96
+ # has a certificate and a private key in it, the only way to find
97
+ # out if it really is valid is to connect to Apple's servers.
98
+
99
+ path = File.join(File.dirname(__FILE__), 'support')
100
+ TEST_CERT = File.read(File.join(path, 'cert_without_password.pem'))
101
+ TEST_CERT_WITH_PASSWORD = File.read(File.join(path, 'cert_with_password.pem'))
metadata ADDED
@@ -0,0 +1,276 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rpush
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ian Leitch
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: multi_json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: net-http-persistent
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Professional grade APNs and GCM for Ruby
42
+ email:
43
+ - port001@gmail.com
44
+ executables:
45
+ - rpush
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - CHANGELOG.md
50
+ - LICENSE
51
+ - README.md
52
+ - lib/generators/rpush_generator.rb
53
+ - lib/generators/templates/add_adm.rb
54
+ - lib/generators/templates/add_alert_is_json_to_rapns_notifications.rb
55
+ - lib/generators/templates/add_app_to_rapns.rb
56
+ - lib/generators/templates/add_fail_after_to_rpush_notifications.rb
57
+ - lib/generators/templates/add_gcm.rb
58
+ - lib/generators/templates/add_rpush.rb
59
+ - lib/generators/templates/add_wpns.rb
60
+ - lib/generators/templates/create_rapns_apps.rb
61
+ - lib/generators/templates/create_rapns_feedback.rb
62
+ - lib/generators/templates/create_rapns_notifications.rb
63
+ - lib/generators/templates/rename_rapns_to_rpush.rb
64
+ - lib/generators/templates/rpush.rb
65
+ - lib/rpush.rb
66
+ - lib/rpush/TODO
67
+ - lib/rpush/adm/app.rb
68
+ - lib/rpush/adm/data_validator.rb
69
+ - lib/rpush/adm/notification.rb
70
+ - lib/rpush/apns/app.rb
71
+ - lib/rpush/apns/binary_notification_validator.rb
72
+ - lib/rpush/apns/device_token_format_validator.rb
73
+ - lib/rpush/apns/feedback.rb
74
+ - lib/rpush/apns/notification.rb
75
+ - lib/rpush/apns_feedback.rb
76
+ - lib/rpush/app.rb
77
+ - lib/rpush/configuration.rb
78
+ - lib/rpush/daemon.rb
79
+ - lib/rpush/daemon/adm.rb
80
+ - lib/rpush/daemon/adm/delivery.rb
81
+ - lib/rpush/daemon/apns.rb
82
+ - lib/rpush/daemon/apns/certificate_expired_error.rb
83
+ - lib/rpush/daemon/apns/delivery.rb
84
+ - lib/rpush/daemon/apns/disconnection_error.rb
85
+ - lib/rpush/daemon/apns/feedback_receiver.rb
86
+ - lib/rpush/daemon/app_runner.rb
87
+ - lib/rpush/daemon/batch.rb
88
+ - lib/rpush/daemon/constants.rb
89
+ - lib/rpush/daemon/delivery.rb
90
+ - lib/rpush/daemon/delivery_error.rb
91
+ - lib/rpush/daemon/dispatcher/http.rb
92
+ - lib/rpush/daemon/dispatcher/tcp.rb
93
+ - lib/rpush/daemon/dispatcher_loop.rb
94
+ - lib/rpush/daemon/dispatcher_loop_collection.rb
95
+ - lib/rpush/daemon/feeder.rb
96
+ - lib/rpush/daemon/gcm.rb
97
+ - lib/rpush/daemon/gcm/delivery.rb
98
+ - lib/rpush/daemon/interruptible_sleep.rb
99
+ - lib/rpush/daemon/loggable.rb
100
+ - lib/rpush/daemon/reflectable.rb
101
+ - lib/rpush/daemon/retry_header_parser.rb
102
+ - lib/rpush/daemon/retryable_error.rb
103
+ - lib/rpush/daemon/service_config_methods.rb
104
+ - lib/rpush/daemon/store/active_record.rb
105
+ - lib/rpush/daemon/store/active_record/reconnectable.rb
106
+ - lib/rpush/daemon/tcp_connection.rb
107
+ - lib/rpush/daemon/too_many_requests_error.rb
108
+ - lib/rpush/daemon/wpns.rb
109
+ - lib/rpush/daemon/wpns/delivery.rb
110
+ - lib/rpush/deprecatable.rb
111
+ - lib/rpush/deprecation.rb
112
+ - lib/rpush/embed.rb
113
+ - lib/rpush/gcm/app.rb
114
+ - lib/rpush/gcm/expiry_collapse_key_mutual_inclusion_validator.rb
115
+ - lib/rpush/gcm/notification.rb
116
+ - lib/rpush/logger.rb
117
+ - lib/rpush/multi_json_helper.rb
118
+ - lib/rpush/notification.rb
119
+ - lib/rpush/notifier.rb
120
+ - lib/rpush/payload_data_size_validator.rb
121
+ - lib/rpush/push.rb
122
+ - lib/rpush/railtie.rb
123
+ - lib/rpush/reflection.rb
124
+ - lib/rpush/registration_ids_count_validator.rb
125
+ - lib/rpush/version.rb
126
+ - lib/rpush/wpns/app.rb
127
+ - lib/rpush/wpns/notification.rb
128
+ - lib/tasks/cane.rake
129
+ - lib/tasks/rpush.rake
130
+ - lib/tasks/test.rake
131
+ - config/database.yml
132
+ - spec/functional/adm_spec.rb
133
+ - spec/functional/apns_spec.rb
134
+ - spec/functional/embed_spec.rb
135
+ - spec/functional/gcm_spec.rb
136
+ - spec/functional/wpns_spec.rb
137
+ - spec/support/cert_with_password.pem
138
+ - spec/support/cert_without_password.pem
139
+ - spec/support/install.sh
140
+ - spec/support/simplecov_helper.rb
141
+ - spec/support/simplecov_quality_formatter.rb
142
+ - spec/tmp/.gitkeep
143
+ - spec/unit/adm/app_spec.rb
144
+ - spec/unit/adm/notification_spec.rb
145
+ - spec/unit/apns/app_spec.rb
146
+ - spec/unit/apns/feedback_spec.rb
147
+ - spec/unit/apns/notification_spec.rb
148
+ - spec/unit/apns_feedback_spec.rb
149
+ - spec/unit/app_spec.rb
150
+ - spec/unit/configuration_spec.rb
151
+ - spec/unit/daemon/adm/delivery_spec.rb
152
+ - spec/unit/daemon/apns/certificate_expired_error_spec.rb
153
+ - spec/unit/daemon/apns/delivery_spec.rb
154
+ - spec/unit/daemon/apns/disconnection_error_spec.rb
155
+ - spec/unit/daemon/apns/feedback_receiver_spec.rb
156
+ - spec/unit/daemon/app_runner_spec.rb
157
+ - spec/unit/daemon/batch_spec.rb
158
+ - spec/unit/daemon/delivery_error_spec.rb
159
+ - spec/unit/daemon/delivery_spec.rb
160
+ - spec/unit/daemon/dispatcher/http_spec.rb
161
+ - spec/unit/daemon/dispatcher/tcp_spec.rb
162
+ - spec/unit/daemon/dispatcher_loop_collection_spec.rb
163
+ - spec/unit/daemon/dispatcher_loop_spec.rb
164
+ - spec/unit/daemon/feeder_spec.rb
165
+ - spec/unit/daemon/gcm/delivery_spec.rb
166
+ - spec/unit/daemon/interruptible_sleep_spec.rb
167
+ - spec/unit/daemon/reflectable_spec.rb
168
+ - spec/unit/daemon/retryable_error_spec.rb
169
+ - spec/unit/daemon/service_config_methods_spec.rb
170
+ - spec/unit/daemon/store/active_record/reconnectable_spec.rb
171
+ - spec/unit/daemon/store/active_record_spec.rb
172
+ - spec/unit/daemon/tcp_connection_spec.rb
173
+ - spec/unit/daemon/too_many_requests_error_spec.rb
174
+ - spec/unit/daemon/wpns/delivery_spec.rb
175
+ - spec/unit/daemon_spec.rb
176
+ - spec/unit/deprecatable_spec.rb
177
+ - spec/unit/deprecation_spec.rb
178
+ - spec/unit/embed_spec.rb
179
+ - spec/unit/gcm/app_spec.rb
180
+ - spec/unit/gcm/notification_spec.rb
181
+ - spec/unit/logger_spec.rb
182
+ - spec/unit/notification_shared.rb
183
+ - spec/unit/notification_spec.rb
184
+ - spec/unit/notifier_spec.rb
185
+ - spec/unit/push_spec.rb
186
+ - spec/unit/reflection_spec.rb
187
+ - spec/unit/rpush_spec.rb
188
+ - spec/unit/wpns/app_spec.rb
189
+ - spec/unit/wpns/notification_spec.rb
190
+ - spec/unit_spec_helper.rb
191
+ - bin/rpush
192
+ homepage: https://github.com/rpush/rpush
193
+ licenses:
194
+ - MIT
195
+ metadata: {}
196
+ post_install_message:
197
+ rdoc_options: []
198
+ require_paths:
199
+ - lib
200
+ required_ruby_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - '>='
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ required_rubygems_version: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - '>='
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ requirements: []
211
+ rubyforge_project:
212
+ rubygems_version: 2.1.11
213
+ signing_key:
214
+ specification_version: 4
215
+ summary: Professional grade APNs and GCM for Ruby
216
+ test_files:
217
+ - config/database.yml
218
+ - spec/functional/adm_spec.rb
219
+ - spec/functional/apns_spec.rb
220
+ - spec/functional/embed_spec.rb
221
+ - spec/functional/gcm_spec.rb
222
+ - spec/functional/wpns_spec.rb
223
+ - spec/support/cert_with_password.pem
224
+ - spec/support/cert_without_password.pem
225
+ - spec/support/install.sh
226
+ - spec/support/simplecov_helper.rb
227
+ - spec/support/simplecov_quality_formatter.rb
228
+ - spec/tmp/.gitkeep
229
+ - spec/unit/adm/app_spec.rb
230
+ - spec/unit/adm/notification_spec.rb
231
+ - spec/unit/apns/app_spec.rb
232
+ - spec/unit/apns/feedback_spec.rb
233
+ - spec/unit/apns/notification_spec.rb
234
+ - spec/unit/apns_feedback_spec.rb
235
+ - spec/unit/app_spec.rb
236
+ - spec/unit/configuration_spec.rb
237
+ - spec/unit/daemon/adm/delivery_spec.rb
238
+ - spec/unit/daemon/apns/certificate_expired_error_spec.rb
239
+ - spec/unit/daemon/apns/delivery_spec.rb
240
+ - spec/unit/daemon/apns/disconnection_error_spec.rb
241
+ - spec/unit/daemon/apns/feedback_receiver_spec.rb
242
+ - spec/unit/daemon/app_runner_spec.rb
243
+ - spec/unit/daemon/batch_spec.rb
244
+ - spec/unit/daemon/delivery_error_spec.rb
245
+ - spec/unit/daemon/delivery_spec.rb
246
+ - spec/unit/daemon/dispatcher/http_spec.rb
247
+ - spec/unit/daemon/dispatcher/tcp_spec.rb
248
+ - spec/unit/daemon/dispatcher_loop_collection_spec.rb
249
+ - spec/unit/daemon/dispatcher_loop_spec.rb
250
+ - spec/unit/daemon/feeder_spec.rb
251
+ - spec/unit/daemon/gcm/delivery_spec.rb
252
+ - spec/unit/daemon/interruptible_sleep_spec.rb
253
+ - spec/unit/daemon/reflectable_spec.rb
254
+ - spec/unit/daemon/retryable_error_spec.rb
255
+ - spec/unit/daemon/service_config_methods_spec.rb
256
+ - spec/unit/daemon/store/active_record/reconnectable_spec.rb
257
+ - spec/unit/daemon/store/active_record_spec.rb
258
+ - spec/unit/daemon/tcp_connection_spec.rb
259
+ - spec/unit/daemon/too_many_requests_error_spec.rb
260
+ - spec/unit/daemon/wpns/delivery_spec.rb
261
+ - spec/unit/daemon_spec.rb
262
+ - spec/unit/deprecatable_spec.rb
263
+ - spec/unit/deprecation_spec.rb
264
+ - spec/unit/embed_spec.rb
265
+ - spec/unit/gcm/app_spec.rb
266
+ - spec/unit/gcm/notification_spec.rb
267
+ - spec/unit/logger_spec.rb
268
+ - spec/unit/notification_shared.rb
269
+ - spec/unit/notification_spec.rb
270
+ - spec/unit/notifier_spec.rb
271
+ - spec/unit/push_spec.rb
272
+ - spec/unit/reflection_spec.rb
273
+ - spec/unit/rpush_spec.rb
274
+ - spec/unit/wpns/app_spec.rb
275
+ - spec/unit/wpns/notification_spec.rb
276
+ - spec/unit_spec_helper.rb