spns 0.2.1 → 0.2.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.
Files changed (6) hide show
  1. data/README.md +1 -1
  2. data/VERSION +1 -1
  3. data/bin/spns +4 -6
  4. data/cron +26 -3
  5. data/lib/spns.rb +15 -2
  6. metadata +87 -7
data/README.md CHANGED
@@ -23,7 +23,7 @@ Usage
23
23
  =======
24
24
  1. under the current directory, provide single pem file combined with certificate and key, HOWTO ([Check this link](http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12))
25
25
 
26
- 2. edit spns.yml
26
+ 2. edit spns.yml. (when you run spns first time, it will generate this file) ([Check this link](https://raw.github.com/eiffelqiu/spns/master/spns.yml))
27
27
 
28
28
  3. provide a cron script under current directory, default named "cron" according to spns.yml
29
29
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
data/bin/spns CHANGED
@@ -1,4 +1,6 @@
1
+ # -*- coding: utf-8 -*-
1
2
  #!/usr/bin/env ruby
3
+
2
4
  require 'rubygems' unless defined?(Gem)
3
5
  require 'sinatra/base'
4
6
  require 'thread'
@@ -7,10 +9,6 @@ class Object
7
9
  alias sh system
8
10
  end
9
11
 
10
- unless RUBY_PLATFORM =~ /darwin/i
11
- $stderr.puts "what? you do not have a MAC, dude? Shame on you!!!"
12
- end
13
-
14
12
  lib_dir = File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
15
13
  root_dir = File.expand_path(File.join(File.dirname(__FILE__),'..'))
16
14
  unless $LOAD_PATH.include?(lib_dir)
@@ -20,12 +18,12 @@ end
20
18
  if File.exist?('push.db') then system "rm push.db" end
21
19
 
22
20
  unless File.exist?("#{Dir.pwd}/spns.yml") then
23
- puts 'create spns.yml'
21
+ puts 'create config file: spns.yml'
24
22
  system "cp #{root_dir}/spns.yml #{Dir.pwd}/spns.yml"
25
23
  end
26
24
 
27
25
  unless File.exist?("#{Dir.pwd}/cron") then
28
- puts 'create cron script'
26
+ puts "create a demo 'cron' script under current directory"
29
27
  system "cp #{root_dir}/cron #{Dir.pwd}/cron"
30
28
  end
31
29
 
data/cron CHANGED
@@ -1,3 +1,15 @@
1
+ # -*- coding: utf-8 -*-
2
+ #!/usr/bin/env ruby
3
+
4
+ ###########################################################################
5
+ #### This script is only for demo purpose, you can write this script
6
+ #### with any language you like(python, perl, shell etc)
7
+ ####
8
+ #### This script fetch earthquake info whose magnitude large than 4 degree
9
+ #### within an hour from usgs website and call spns service to send apple
10
+ #### push notification
11
+ ###########################################################################
12
+
1
13
  require 'rubygems'
2
14
  require 'sequel'
3
15
  require 'socket'
@@ -7,6 +19,17 @@ require 'rufus/scheduler'
7
19
  require 'feedzirra'
8
20
  require 'yaml'
9
21
 
22
+ ############################################################
23
+ ## Configuration Setup
24
+ ############################################################
25
+ env = ENV['SINATRA_ENV'] || "development"
26
+ config = YAML.load_file("#{Dir.pwd}/spns.yml")
27
+ $timer = config['timer'] || 1
28
+ $cron = config['cron'] || 'cron'
29
+ $port = config['port'] || 4567
30
+ $mode = config['mode'] || env
31
+ $certificate = config["#{env}"][0]['certificate'] || 'ck.pem'
32
+
10
33
  # fetching a single feed
11
34
  feed = Feedzirra::Feed.fetch_and_parse("http://earthquake.usgs.gov/earthquakes/feed/atom/1.0/hour")
12
35
 
@@ -18,13 +41,13 @@ feed.entries.each do |o|
18
41
  pids = o.id.split(':')
19
42
  pid = pids[3]
20
43
  m = t[0].split(' ')
21
- if m[1].to_i >= 1 then
44
+ if m[1].to_i >= 4 then
22
45
  big = m[1].to_i if big < m[1].to_i
23
46
  messages = CGI::escape("Earthquake:#{o.title}")
24
47
  puts "Earthquake:#{o.title}"
25
48
  end
26
49
  end
27
- puts "curl http://192.168.1.105:4567/v1/app/push/#{messages}/#{pid}"
50
+ puts "curl http://localhost:#{$port}/v1/app/push/#{messages}/#{pid}"
28
51
  if big >= 1 then
29
- system "curl http://192.168.1.105:4567/v1/app/push/#{messages}/#{pid}"
52
+ system "curl http://localhost:#{$port}/v1/app/push/#{messages}/#{pid}"
30
53
  end
data/lib/spns.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # -*- coding: utf-8 -*-
2
+ #!/usr/bin/env ruby
3
+
1
4
  require 'rubygems'
2
5
  require 'sinatra'
3
6
  require 'sequel'
@@ -28,8 +31,18 @@ unless File.exist?("#{Dir.pwd}/#{$certificate}") then
28
31
  puts "1: please provide certificate key pem file under current directory"
29
32
  puts "2: edit your spns.yml under current directory first"
30
33
  puts "3: run spns"
34
+ puts "4: Client: in AppDelegate file, didRegisterForRemoteNotificationsWithDeviceToken method should access this url: http://serverIP:#{$port}/v1/app/DeviceToken"
35
+ puts "5: Server: cron should access 'curl http://localhost:#{$port}/v1/app/push/#{messages}/#{pid}' to send push message"
31
36
  exit
32
- end
37
+ else
38
+ puts "*"*80
39
+ puts "Simple Push Notification Server is Running..."
40
+ puts "Mode: #{$mode}"
41
+ puts "Port: #{$port}"
42
+ puts "Certificate File: '#{Dir.pwd}/#{$certificate}'"
43
+ puts "Cron Job: '#{Dir.pwd}/#{$cron}' script is running every #{$timer} #{($timer == 1) ? 'minute' : 'minutes'} "
44
+ puts "*"*80
45
+ end
33
46
 
34
47
  $cert = File.read("#{Dir.pwd}/#{$certificate}")
35
48
  $openSSLContext = OpenSSL::SSL::SSLContext.new
@@ -64,7 +77,7 @@ Push = DB[:pushes]
64
77
  scheduler = Rufus::Scheduler.start_new
65
78
 
66
79
  scheduler.every "#{$timer}m" do
67
- puts "running job: '#{Dir.pwd}/#{$cron}' every #{$timer} minutes"
80
+ puts "running job: '#{Dir.pwd}/#{$cron}' every #{$timer} #{($timer == 1) ? 'minute' : 'minutes'}"
68
81
  system "#{Dir.pwd}/#{$cron}"
69
82
  end
70
83
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-10 00:00:00.000000000 Z
12
+ date: 2012-09-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
@@ -172,14 +172,46 @@ dependencies:
172
172
  - !ruby/object:Gem::Version
173
173
  version: 1.8.4
174
174
  - !ruby/object:Gem::Dependency
175
- name: simplecov
175
+ name: sinatra
176
176
  requirement: !ruby/object:Gem::Requirement
177
177
  none: false
178
178
  requirements:
179
179
  - - ! '>='
180
180
  - !ruby/object:Gem::Version
181
181
  version: '0'
182
- type: :development
182
+ type: :runtime
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ - !ruby/object:Gem::Dependency
191
+ name: sequel
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ type: :runtime
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: rufus-scheduler
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :runtime
183
215
  prerelease: false
184
216
  version_requirements: !ruby/object:Gem::Requirement
185
217
  none: false
@@ -187,7 +219,55 @@ dependencies:
187
219
  - - ! '>='
188
220
  - !ruby/object:Gem::Version
189
221
  version: '0'
190
- description: Simple Push Notification Server
222
+ - !ruby/object:Gem::Dependency
223
+ name: feedzirra
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ - !ruby/object:Gem::Dependency
239
+ name: eventmachine
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ! '>='
244
+ - !ruby/object:Gem::Version
245
+ version: '0'
246
+ type: :runtime
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ! '>='
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
254
+ - !ruby/object:Gem::Dependency
255
+ name: activesupport
256
+ requirement: !ruby/object:Gem::Requirement
257
+ none: false
258
+ requirements:
259
+ - - ! '>='
260
+ - !ruby/object:Gem::Version
261
+ version: 3.2.8
262
+ type: :runtime
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ none: false
266
+ requirements:
267
+ - - ! '>='
268
+ - !ruby/object:Gem::Version
269
+ version: 3.2.8
270
+ description: Simple Push Notification Server written with Sinatra and Sequel(Sqlite3)
191
271
  email: eiffelqiu@gmail.com
192
272
  executables:
193
273
  - spns
@@ -219,7 +299,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
219
299
  version: '0'
220
300
  segments:
221
301
  - 0
222
- hash: -3524247809256863557
302
+ hash: 888853487025371327
223
303
  required_rubygems_version: !ruby/object:Gem::Requirement
224
304
  none: false
225
305
  requirements:
@@ -227,7 +307,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
307
  - !ruby/object:Gem::Version
228
308
  version: '0'
229
309
  requirements: []
230
- rubyforge_project:
310
+ rubyforge_project: spns
231
311
  rubygems_version: 1.8.21
232
312
  signing_key:
233
313
  specification_version: 3