tempestas 0.0.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.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'redis', '~> 2.2.2'
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ Ruby tempest
2
+ ============
3
+
4
+ Ruby client for joining a [tempest cluster](https://github.com/athoune/node-tempest).
5
+
6
+ Test
7
+ ----
8
+
9
+ Launch a redis server:
10
+
11
+ redis-server
12
+
13
+ Lauch the tests:
14
+
15
+ rspec
16
+
17
+ Status
18
+ ------
19
+
20
+ Early alpha.
21
+
22
+ Licence
23
+ -------
24
+
25
+ MIT
@@ -0,0 +1,66 @@
1
+ require 'json'
2
+ require 'redis'
3
+
4
+ module Tempest
5
+
6
+ class Context
7
+ attr_reader :respond_to, :job_id
8
+ def initialize cluster, respond_to, job_id
9
+ @respond_to = respond_to
10
+ @job_id = job_id
11
+ @cluster = cluster
12
+ end
13
+
14
+ def stop
15
+ @cluster.loop = false
16
+ end
17
+ end
18
+
19
+ class Cluster
20
+
21
+ attr_accessor :loop
22
+ def initialize redis='localhost:6379'
23
+ @redis = redis
24
+ @_on = {}
25
+ @loop = true
26
+ @id = 0
27
+ end
28
+
29
+ def on action, &block
30
+ @_on[action] = block
31
+ end
32
+
33
+ def loop
34
+ @loop = true
35
+ while @loop
36
+ task = Tempest.client(@redis).blpop 'working', 0
37
+ if task
38
+ cmd, args, answer, job_id = JSON.parse(task[1])
39
+ @_on[cmd.to_sym].call Context.new(self, answer, job_id), *args
40
+ end
41
+ end
42
+ end
43
+
44
+ def answer who, action, job_id, args
45
+ Tempest.client(who).send action, job_id, args.to_json
46
+ end
47
+
48
+ def work queue, action, args, respond_to
49
+ #FIXME implement the real id tactic
50
+ @id += 1
51
+ Tempest.client(@redis).rpush queue, [action, args, respond_to, @id].to_json
52
+ @id
53
+ end
54
+
55
+ end
56
+
57
+ @clients = {}
58
+
59
+ def self.client server
60
+ unless @clients.key? server
61
+ hp = server.split(':')
62
+ @clients[server] = Redis.new host: hp[0], port: hp[1].to_i
63
+ end
64
+ @clients[server]
65
+ end
66
+ end
@@ -0,0 +1,15 @@
1
+ module Tempest
2
+
3
+ class Node
4
+
5
+ def initialize client
6
+ @client = client
7
+ end
8
+
9
+ def send message
10
+ @client.send
11
+ end
12
+
13
+ end
14
+
15
+ end
data/lib/tempest.rb ADDED
@@ -0,0 +1,45 @@
1
+ require "tempest/cluster"
2
+
3
+ class Tempest_bloc
4
+ attr_reader :cluster
5
+
6
+ def initialize redis, &block
7
+ @cluster = Tempest::Cluster.new redis
8
+ instance_eval &block
9
+ end
10
+
11
+ def worker queue, &block
12
+ Worker.new @cluster, queue, &block
13
+ end
14
+
15
+ end
16
+
17
+ def tempest redis='localhost:6379', &block
18
+ Tempest_bloc.new redis, &block
19
+ end
20
+
21
+ class Worker
22
+ attr_reader :queue, :cluster
23
+ def initialize cluster, queue, &block
24
+ @cluster = cluster
25
+ @queue = queue
26
+ instance_eval &block
27
+ end
28
+
29
+ def on action, &block
30
+ @cluster.on action, &block
31
+ end
32
+
33
+ def work action, respond_to, *args
34
+ @cluster.work @queue, action, *args, respond_to
35
+ end
36
+
37
+ def start_loop
38
+ @cluster.loop
39
+ end
40
+
41
+ def stop_loop
42
+ @cluster.loop = false
43
+ end
44
+ end
45
+
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tempestas
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mathieu Lecarme
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: redis
16
+ requirement: &2156604640 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - =
20
+ - !ruby/object:Gem::Version
21
+ version: 2.2.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2156604640
25
+ description: Client for the tempest cluster
26
+ email: mathieu@garambrogne.net
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files:
30
+ - README.md
31
+ files:
32
+ - README.md
33
+ - Gemfile
34
+ - lib/tempest/cluster.rb
35
+ - lib/tempest/node.rb
36
+ - lib/tempest.rb
37
+ homepage: http://github.com/athoune/ruby-tempest
38
+ licenses: []
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 1.8.10
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: Client for the tempest cluster
61
+ test_files: []
62
+ has_rdoc: