pushr-core 1.0.0.pre.1

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 (37) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +156 -0
  4. data/bin/pushr +43 -0
  5. data/lib/generators/templates/feedback_processor.rb +33 -0
  6. data/lib/pushr/configuration.rb +49 -0
  7. data/lib/pushr/core.rb +54 -0
  8. data/lib/pushr/daemon.rb +116 -0
  9. data/lib/pushr/daemon/app.rb +71 -0
  10. data/lib/pushr/daemon/delivery_error.rb +19 -0
  11. data/lib/pushr/daemon/delivery_handler.rb +41 -0
  12. data/lib/pushr/daemon/feedback_handler.rb +38 -0
  13. data/lib/pushr/daemon/logger.rb +57 -0
  14. data/lib/pushr/feedback.rb +37 -0
  15. data/lib/pushr/message.rb +36 -0
  16. data/lib/pushr/redis_connection.rb +38 -0
  17. data/lib/pushr/version.rb +3 -0
  18. data/spec/lib/pushr/configuration_spec.rb +58 -0
  19. data/spec/lib/pushr/daemon/app_spec.rb +55 -0
  20. data/spec/lib/pushr/daemon/delivery_error_spec.rb +15 -0
  21. data/spec/lib/pushr/daemon/delivery_handler_spec.rb +48 -0
  22. data/spec/lib/pushr/daemon/feedback_handler_spec.rb +42 -0
  23. data/spec/lib/pushr/daemon/logger_spec.rb +25 -0
  24. data/spec/lib/pushr/daemon_spec.rb +15 -0
  25. data/spec/lib/pushr/feedback_spec.rb +27 -0
  26. data/spec/lib/pushr/message_spec.rb +33 -0
  27. data/spec/lib/pushr/redis_connection_spec.rb +14 -0
  28. data/spec/spec_helper.rb +30 -0
  29. data/spec/support/logger.rb +11 -0
  30. data/spec/support/pushr_configuration_dummy.rb +22 -0
  31. data/spec/support/pushr_connection_dummy.rb +22 -0
  32. data/spec/support/pushr_dummy.rb +16 -0
  33. data/spec/support/pushr_feedback_dummy.rb +11 -0
  34. data/spec/support/pushr_feedback_processor_dummy.rb +9 -0
  35. data/spec/support/pushr_invalid_configuration_dummy.rb +8 -0
  36. data/spec/support/pushr_message_dummy.rb +13 -0
  37. metadata +281 -0
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ require 'pushr/daemon'
3
+
4
+ describe Pushr::Daemon::DeliveryError do
5
+
6
+ # before(:each) do
7
+ # Pushr.configure do |config|
8
+ # config.redis = ConnectionPool.new(size: 1, timeout: 1) { MockRedis.new }
9
+ # end
10
+ # end
11
+
12
+ describe 'exception' do
13
+ it 'should have fields'
14
+ end
15
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ require 'pushr/daemon'
3
+
4
+ describe Pushr::Daemon::DeliveryHandler do
5
+
6
+ before(:each) do
7
+ Pushr::Core.configure do |config|
8
+ config.redis = ConnectionPool.new(size: 1, timeout: 1) { MockRedis.new }
9
+ end
10
+
11
+ logger = double('logger')
12
+ allow(logger).to receive(:info)
13
+ allow(logger).to receive(:error)
14
+ allow(logger).to receive(:warn)
15
+ Pushr::Daemon.logger = logger
16
+ end
17
+
18
+ describe 'delivers message' do
19
+ let(:message) { Pushr::MessageDummy.new(app: 'app_name', device: 'test') }
20
+ let(:config) { Pushr::ConfigurationDummy.new(app: 'app_name', connections: 2, enabled: true) }
21
+ let(:connection) { Pushr::Daemon::DummySupport::ConnectionDummy.new(config, 1) }
22
+ it 'should start' do
23
+ message.save
24
+ connection.connect
25
+ handler = Pushr::Daemon::DeliveryHandler.new('pushr:app_name:dummy', connection, 'app', 1)
26
+ handler.stop
27
+ thread = handler.start
28
+ thread.join
29
+ expect(connection.data.to_json).to eql(message.to_json)
30
+ end
31
+ end
32
+
33
+ describe 'fails' do
34
+ let(:message) { Pushr::MessageDummy.new(app: 'app_name', device: 'test') }
35
+ let(:config) { Pushr::ConfigurationDummy.new(app: 'app_name', connections: 2, enabled: true) }
36
+ let(:connection) { Pushr::Daemon::DummySupport::ConnectionDummy.new(config, 1) }
37
+ let(:error) { Pushr::Daemon::DeliveryError.new('100', message, 'desc', 'source', false) }
38
+ it 'should start' do
39
+ expect_any_instance_of(Pushr::Daemon::DummySupport::ConnectionDummy).to receive(:write).and_raise(error)
40
+ message.save
41
+ connection.connect
42
+ handler = Pushr::Daemon::DeliveryHandler.new('pushr:app_name:dummy', connection, 'app', 1)
43
+ handler.stop
44
+ thread = handler.start
45
+ thread.join
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+ require 'pushr/daemon'
3
+
4
+ describe Pushr::Daemon::FeedbackHandler do
5
+
6
+ before(:each) do
7
+ Pushr::Core.configure do |config|
8
+ config.redis = ConnectionPool.new(size: 1, timeout: 1) { MockRedis.new }
9
+ end
10
+
11
+ logger = double('logger')
12
+ allow(logger).to receive(:info)
13
+ allow(logger).to receive(:error)
14
+ allow(logger).to receive(:warn)
15
+ Pushr::Daemon.logger = logger
16
+ end
17
+
18
+ describe 'start' do
19
+ let(:feedback) { Pushr::FeedbackDummy.new(app: 'app_name', device: 'a' * 64, failed_at: Time.now, follow_up: 'delete') }
20
+ it 'should start' do
21
+ expect_any_instance_of(Pushr::FeedbackProcessor).to receive(:process)
22
+ feedback.save
23
+ handler = Pushr::Daemon::FeedbackHandler.new('spec/support/pushr_feedback_processor_dummy')
24
+ handler.stop
25
+ thread = handler.start
26
+ thread.join
27
+ end
28
+ end
29
+
30
+ describe 'fails' do
31
+ let(:feedback) { Pushr::FeedbackDummy.new(app: 'app_name', device: 'a' * 64, failed_at: Time.now, follow_up: 'delete') }
32
+ let(:error) { StandardError.new('test') }
33
+ it 'should start' do
34
+ expect_any_instance_of(Pushr::FeedbackProcessor).to receive(:process).and_raise(error)
35
+ feedback.save
36
+ handler = Pushr::Daemon::FeedbackHandler.new('spec/support/pushr_feedback_processor_dummy')
37
+ handler.stop
38
+ thread = handler.start
39
+ thread.join
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+ require 'pushr/daemon'
3
+
4
+ describe Pushr::Daemon::Logger do
5
+ describe 'log level' do
6
+ let(:logger) { Pushr::Daemon::Logger.new(foreground: false, error_notification: false) }
7
+ it 'info' do
8
+ expect_any_instance_of(Logger).to receive(:add)
9
+ allow(Logger).to receive(:add)
10
+ logger.info('info')
11
+ end
12
+
13
+ it 'error' do
14
+ expect_any_instance_of(Logger).to receive(:add)
15
+ allow(Logger).to receive(:add)
16
+ logger.error('error')
17
+ end
18
+
19
+ it 'warn' do
20
+ expect_any_instance_of(Logger).to receive(:add)
21
+ allow(Logger).to receive(:add)
22
+ logger.warn('warn')
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ require 'pushr/daemon'
3
+
4
+ describe Pushr::Daemon do
5
+
6
+ # before(:each) do
7
+ # Pushr.configure do |config|
8
+ # config.redis = ConnectionPool.new(size: 1, timeout: 1) { MockRedis.new }
9
+ # end
10
+ # end
11
+
12
+ describe 'save' do
13
+ it 'should save message'
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Pushr::Feedback do
4
+
5
+ before(:each) do
6
+ Pushr::Core.configure do |config|
7
+ config.redis = ConnectionPool.new(size: 1, timeout: 1) { MockRedis.new }
8
+ end
9
+ end
10
+
11
+ describe 'save' do
12
+ let(:feedback) { Pushr::FeedbackDummy.new(app: 'app_name', device: 'a' * 64, follow_up: 'delete', failed_at: Time.now) }
13
+ let(:feedback_invalid) { Pushr::FeedbackDummy.new }
14
+ it 'should return true' do
15
+ expect(feedback.save).to eql true
16
+ end
17
+
18
+ it 'should return false' do
19
+ expect(feedback_invalid.save).to eql false
20
+ end
21
+
22
+ it 'should save a feedback' do
23
+ feedback.save
24
+ expect(Pushr::Feedback.next).to be_kind_of(Pushr::FeedbackDummy)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Pushr::Message do
4
+
5
+ before(:each) do
6
+ Pushr::Core.configure do |config|
7
+ config.redis = ConnectionPool.new(size: 1, timeout: 1) { MockRedis.new }
8
+ end
9
+ end
10
+
11
+ describe 'next' do
12
+ it 'returns next message' do
13
+ expect(Pushr::Message.next('pushr:app_name:dummy')).to eql(nil)
14
+ end
15
+ end
16
+
17
+ describe 'next' do
18
+ let(:message) { Pushr::MessageDummy.new(app: 'app_name', device: 'test') }
19
+ let(:message_invalid) { Pushr::MessageDummy.new }
20
+ it 'should return true' do
21
+ expect(message.save).to eql true
22
+ end
23
+
24
+ it 'should return false' do
25
+ expect(message_invalid.save).to eql false
26
+ end
27
+
28
+ it 'should save a message' do
29
+ message.save
30
+ expect(Pushr::Message.next('pushr:app_name:dummy')).to be_kind_of(Pushr::MessageDummy)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Pushr::RedisConnection do
4
+
5
+ # before(:each) do
6
+ # Pushr.configure do |config|
7
+ # config.redis = ConnectionPool.new(size: 1, timeout: 1) { MockRedis.new }
8
+ # end
9
+ # end
10
+
11
+ describe 'create' do
12
+ it 'should create connection'
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+
6
+ require 'simplecov'
7
+ require 'coveralls'
8
+
9
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
10
+ SimpleCov::Formatter::HTMLFormatter,
11
+ Coveralls::SimpleCov::Formatter
12
+ ]
13
+ SimpleCov.start
14
+
15
+ require 'pushr/core'
16
+ require 'mock_redis'
17
+
18
+ Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
19
+
20
+ RSpec.configure do |config|
21
+ config.raise_errors_for_deprecations!
22
+ config.run_all_when_everything_filtered = true
23
+ # config.filter_run :focus
24
+
25
+ # Run specs in random order to surface order dependencies. If you find an
26
+ # order dependency and want to debug it, you can fix the order by providing
27
+ # the seed, which is printed after each run.
28
+ # --seed 1234
29
+ config.order = 'random'
30
+ end
@@ -0,0 +1,11 @@
1
+ class Logger
2
+ attr_reader :log
3
+ attr_accessor :level, :formatter
4
+ def initialize(file)
5
+ @log = []
6
+ end
7
+
8
+ def add(level, msg)
9
+ puts formatter.call(level, Time.now, 'Pushr', msg)
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ module Pushr
2
+ class ConfigurationDummy < Pushr::Configuration
3
+ attr_accessor :id, :type, :app, :enabled, :connections, :test_attr
4
+
5
+ def name
6
+ :dummy
7
+ end
8
+
9
+ def to_json(args = nil)
10
+ hsh = {
11
+ id: [@app, name].join(':'),
12
+ type: self.class.to_s,
13
+ app: app,
14
+ enabled: enabled,
15
+ connections: connections,
16
+ test_attr: test_attr
17
+ }
18
+
19
+ ::MultiJson.dump(hsh)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module Pushr
2
+ module Daemon
3
+ module DummySupport
4
+ class ConnectionDummy
5
+ attr_reader :name, :configuration
6
+ attr_accessor :data
7
+
8
+ def initialize(configuration, i)
9
+ @configuration = configuration
10
+ @name = "#{@configuration.app}: ConnectionGcm #{i}"
11
+ end
12
+
13
+ def connect
14
+ end
15
+
16
+ def write(data)
17
+ self.data = data
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ module Pushr
2
+ module Daemon
3
+ class Dummy
4
+ attr_accessor :configuration
5
+ def initialize(options)
6
+ self.configuration = options
7
+ end
8
+
9
+ def connectiontype
10
+ DummySupport::ConnectionDummy
11
+ end
12
+
13
+ def stop; end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ module Pushr
2
+ class FeedbackDummy < Pushr::Feedback
3
+ attr_accessor :type, :app, :device, :follow_up, :failed_at
4
+ validates :device, format: { with: /\A[a-z0-9]{64}\z/ }
5
+ validates :follow_up, inclusion: { in: %w(delete), message: '%{value} is not a valid follow-up' }
6
+
7
+ def to_json(args = nil)
8
+ MultiJson.dump(type: 'Pushr::FeedbackDummy', app: app, device: device, follow_up: follow_up, failed_at: failed_at)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ module Pushr
2
+ class FeedbackProcessor
3
+ def initialize
4
+ end
5
+
6
+ def process(feedback)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ module Pushr
2
+ class InvalidConfigurationDummy < Pushr::Configuration
3
+ attr_accessor :id, :type, :app, :enabled, :connections, :test_attr
4
+ def name
5
+ :invalid_dummy
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ module Pushr
2
+ class MessageDummy < Pushr::Message
3
+ POSTFIX = 'dummy'
4
+ attr_accessor :postfix, :type, :app, :device
5
+
6
+ def to_message
7
+ end
8
+
9
+ def to_json(args = nil)
10
+ MultiJson.dump(type: self.class.to_s, app: app, device: device)
11
+ end
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,281 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pushr-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.pre.1
5
+ platform: ruby
6
+ authors:
7
+ - Tom Pesman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: redis
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: redis-namespace
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
+ - !ruby/object:Gem::Dependency
42
+ name: multi_json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: connection_pool
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activemodel
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 3.0.0.beta2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 3.0.0.beta2
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: mock_redis
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rake
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: coveralls
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ description: Pushr daemon for push notification services like APNS (iOS/Apple) and
196
+ GCM/C2DM (Android).
197
+ email:
198
+ - tom@tnux.net
199
+ executables:
200
+ - pushr
201
+ extensions: []
202
+ extra_rdoc_files: []
203
+ files:
204
+ - lib/generators/templates/feedback_processor.rb
205
+ - lib/pushr/configuration.rb
206
+ - lib/pushr/core.rb
207
+ - lib/pushr/daemon.rb
208
+ - lib/pushr/daemon/app.rb
209
+ - lib/pushr/daemon/delivery_error.rb
210
+ - lib/pushr/daemon/delivery_handler.rb
211
+ - lib/pushr/daemon/feedback_handler.rb
212
+ - lib/pushr/daemon/logger.rb
213
+ - lib/pushr/feedback.rb
214
+ - lib/pushr/message.rb
215
+ - lib/pushr/redis_connection.rb
216
+ - lib/pushr/version.rb
217
+ - README.md
218
+ - MIT-LICENSE
219
+ - spec/lib/pushr/configuration_spec.rb
220
+ - spec/lib/pushr/daemon/app_spec.rb
221
+ - spec/lib/pushr/daemon/delivery_error_spec.rb
222
+ - spec/lib/pushr/daemon/delivery_handler_spec.rb
223
+ - spec/lib/pushr/daemon/feedback_handler_spec.rb
224
+ - spec/lib/pushr/daemon/logger_spec.rb
225
+ - spec/lib/pushr/daemon_spec.rb
226
+ - spec/lib/pushr/feedback_spec.rb
227
+ - spec/lib/pushr/message_spec.rb
228
+ - spec/lib/pushr/redis_connection_spec.rb
229
+ - spec/spec_helper.rb
230
+ - spec/support/logger.rb
231
+ - spec/support/pushr_configuration_dummy.rb
232
+ - spec/support/pushr_connection_dummy.rb
233
+ - spec/support/pushr_dummy.rb
234
+ - spec/support/pushr_feedback_dummy.rb
235
+ - spec/support/pushr_feedback_processor_dummy.rb
236
+ - spec/support/pushr_invalid_configuration_dummy.rb
237
+ - spec/support/pushr_message_dummy.rb
238
+ - bin/pushr
239
+ homepage: https://github.com/9to5/pushr-core
240
+ licenses: []
241
+ metadata: {}
242
+ post_install_message:
243
+ rdoc_options: []
244
+ require_paths:
245
+ - lib
246
+ required_ruby_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ required_rubygems_version: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - ">"
254
+ - !ruby/object:Gem::Version
255
+ version: 1.3.1
256
+ requirements: []
257
+ rubyforge_project:
258
+ rubygems_version: 2.1.11
259
+ signing_key:
260
+ specification_version: 4
261
+ summary: Core of the pushr daemon.
262
+ test_files:
263
+ - spec/lib/pushr/configuration_spec.rb
264
+ - spec/lib/pushr/daemon/app_spec.rb
265
+ - spec/lib/pushr/daemon/delivery_error_spec.rb
266
+ - spec/lib/pushr/daemon/delivery_handler_spec.rb
267
+ - spec/lib/pushr/daemon/feedback_handler_spec.rb
268
+ - spec/lib/pushr/daemon/logger_spec.rb
269
+ - spec/lib/pushr/daemon_spec.rb
270
+ - spec/lib/pushr/feedback_spec.rb
271
+ - spec/lib/pushr/message_spec.rb
272
+ - spec/lib/pushr/redis_connection_spec.rb
273
+ - spec/spec_helper.rb
274
+ - spec/support/logger.rb
275
+ - spec/support/pushr_configuration_dummy.rb
276
+ - spec/support/pushr_connection_dummy.rb
277
+ - spec/support/pushr_dummy.rb
278
+ - spec/support/pushr_feedback_dummy.rb
279
+ - spec/support/pushr_feedback_processor_dummy.rb
280
+ - spec/support/pushr_invalid_configuration_dummy.rb
281
+ - spec/support/pushr_message_dummy.rb