spns 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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