everyx 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.
- data/History.txt +5 -0
- data/Manifest.txt +8 -0
- data/README.txt +39 -0
- data/Rakefile +24 -0
- data/bin/everyx +0 -0
- data/lib/everyx.rb +66 -0
- data/test/test_everyx.rb +0 -0
- metadata +70 -0
data/History.txt
ADDED
data/Manifest.txt
ADDED
data/README.txt
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
everyx
|
2
|
+
by Jon Moses
|
3
|
+
http://burningbush.rubyforge.org/everyx/
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
Everyx is a simple class for managing and runner periodic tasks. It comes with some simple, common tasks. At least, it will. Right now it just has a RSS checker.
|
8
|
+
|
9
|
+
== features/PROBLEMS:
|
10
|
+
|
11
|
+
* Schedule tasks to run every X seconds
|
12
|
+
* Multiple schedules
|
13
|
+
|
14
|
+
== SYNOPSIS:
|
15
|
+
|
16
|
+
ex = Everyx::Everyx.new ## Create new runner
|
17
|
+
|
18
|
+
pt = Everyx::PeriodicTasks::RSSNotifier.new ## Create notifier
|
19
|
+
pt.uri = "http://path.to/rss-feed" ## Set it to uri
|
20
|
+
|
21
|
+
ex.add( pt, (60*15) ) ## Add to runner to run every 15 minutes
|
22
|
+
es.join ## Join, so the process doesn't exit. Calls Thread.join on all
|
23
|
+
## task threads.
|
24
|
+
|
25
|
+
The requirements listed below are not for Everyx, but for the periodic tasks. Everyx (just the runner) has no dependencies.
|
26
|
+
|
27
|
+
== REQUIREMENTS:
|
28
|
+
|
29
|
+
* rss
|
30
|
+
* open-uri
|
31
|
+
* nserver
|
32
|
+
|
33
|
+
== INSTALL:
|
34
|
+
|
35
|
+
% gem install everyx
|
36
|
+
|
37
|
+
== LICENSE:
|
38
|
+
|
39
|
+
Everyx is released under the GPL. Text is available at http://www.gnu.org/copyleft/gpl.html
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
require './lib/everyx.rb'
|
6
|
+
|
7
|
+
Hoe.new('everyx', Everyx::VERSION) do |p|
|
8
|
+
p.rubyforge_name = 'burningbush'
|
9
|
+
p.author = 'Jon Moses'
|
10
|
+
p.email = 'jon@burningbush.us'
|
11
|
+
p.summary = 'Code to run some classes every x seconds'
|
12
|
+
p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
|
13
|
+
p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
|
14
|
+
p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
|
15
|
+
p.rubyforge_name = 'burningbush'
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Release and publish documentation"
|
19
|
+
task :repubdoc => [:release, :publish_docs]
|
20
|
+
|
21
|
+
desc "Publish actions"
|
22
|
+
task :release_all => [:release, :publish_docs, :post_news]
|
23
|
+
|
24
|
+
# vim: syntax=Ruby
|
data/bin/everyx
ADDED
File without changes
|
data/lib/everyx.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
module Everyx
|
2
|
+
VERSION = '1.0.0'
|
3
|
+
class Everyx
|
4
|
+
def initialize
|
5
|
+
@threads = []
|
6
|
+
end
|
7
|
+
|
8
|
+
def add( runner, delay = 60 )
|
9
|
+
@threads << Thread.new(runner, delay) do |r,delay|
|
10
|
+
loop do
|
11
|
+
r.run
|
12
|
+
sleep delay
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def join
|
18
|
+
@threads.each {|t| t.join }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
module PeriodicTasks
|
24
|
+
class RSSNotifier
|
25
|
+
require 'rss/1.0'
|
26
|
+
require 'rss/2.0'
|
27
|
+
require 'open-uri'
|
28
|
+
require 'rubygems'
|
29
|
+
require 'nserver'
|
30
|
+
|
31
|
+
attr :uri, :writable => true
|
32
|
+
attr :delay, :writable => true
|
33
|
+
|
34
|
+
def initialize
|
35
|
+
@uri, @delay = nil, ( 60 * 15 )
|
36
|
+
@last = nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def run
|
40
|
+
rss = RSS::Parser.parse( open(@uri) {|s| s.read }, false )
|
41
|
+
new = []
|
42
|
+
first_new = nil
|
43
|
+
rss.items.each do |item|
|
44
|
+
if item.link != @last
|
45
|
+
first_new = item.link unless first_new
|
46
|
+
new << item.title
|
47
|
+
else
|
48
|
+
break
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
@last = first_new if first_new
|
53
|
+
|
54
|
+
if new.size > 0
|
55
|
+
puts "#{new.size} items"
|
56
|
+
NServer::Client.try_notify( new.join("\n") )
|
57
|
+
else
|
58
|
+
puts "No new items."
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
data/test/test_everyx.rb
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.4.5
|
3
|
+
specification_version: 2
|
4
|
+
name: everyx
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 1.0.0
|
7
|
+
date: 2007-11-09 00:00:00 -05:00
|
8
|
+
summary: Code to run some classes every x seconds
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: jon@burningbush.us
|
12
|
+
homepage: " by Jon Moses"
|
13
|
+
rubyforge_project: burningbush
|
14
|
+
description: "== features/PROBLEMS: * Schedule tasks to run every X seconds * Multiple schedules == SYNOPSIS: ex = Everyx::Everyx.new ## Create new runner pt = Everyx::PeriodicTasks::RSSNotifier.new ## Create notifier pt.uri = \"http://path.to/rss-feed\" ## Set it to uri"
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: "0"
|
30
|
+
version:
|
31
|
+
platform: ruby
|
32
|
+
signing_key:
|
33
|
+
cert_chain: []
|
34
|
+
|
35
|
+
post_install_message:
|
36
|
+
authors:
|
37
|
+
- Jon Moses
|
38
|
+
files:
|
39
|
+
- History.txt
|
40
|
+
- Manifest.txt
|
41
|
+
- README.txt
|
42
|
+
- Rakefile
|
43
|
+
- bin/everyx
|
44
|
+
- lib/everyx.rb
|
45
|
+
- test/test_everyx.rb
|
46
|
+
test_files:
|
47
|
+
- test/test_everyx.rb
|
48
|
+
rdoc_options:
|
49
|
+
- --main
|
50
|
+
- README.txt
|
51
|
+
extra_rdoc_files:
|
52
|
+
- History.txt
|
53
|
+
- Manifest.txt
|
54
|
+
- README.txt
|
55
|
+
executables:
|
56
|
+
- everyx
|
57
|
+
extensions: []
|
58
|
+
|
59
|
+
requirements: []
|
60
|
+
|
61
|
+
dependencies:
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: hoe
|
64
|
+
version_requirement:
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.3.0
|
70
|
+
version:
|