em-scenario 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 +3 -0
- data/README.md +25 -0
- data/lib/scenario.rb +103 -0
- metadata +81 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
Scenario
|
2
|
+
========
|
3
|
+
|
4
|
+
Scenario provides tools for handling stories with *event machine* whithout spaghettis.
|
5
|
+
|
6
|
+
Names use kitchen's latin, because it's more leet then japanese words.
|
7
|
+
|
8
|
+
Ruby 1.9.2 is used, it may work with ruby 1.8.x
|
9
|
+
|
10
|
+
Tools
|
11
|
+
-----
|
12
|
+
|
13
|
+
The specs provide nice example of usage.
|
14
|
+
|
15
|
+
### Quorum
|
16
|
+
|
17
|
+
Do something when n actions are done.
|
18
|
+
|
19
|
+
### AbInitio
|
20
|
+
|
21
|
+
Act sequentialy, from the start.
|
22
|
+
|
23
|
+
### AdLib
|
24
|
+
|
25
|
+
Repeat an action, seqentillay.
|
data/lib/scenario.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
require "eventmachine"
|
2
|
+
|
3
|
+
module EventMachine
|
4
|
+
# @see http://en.wikipedia.org/wiki/List_of_Latin_phrases
|
5
|
+
module Scenario
|
6
|
+
|
7
|
+
# from the start
|
8
|
+
class AbInitio
|
9
|
+
include EM::Deferrable
|
10
|
+
|
11
|
+
def initialize &block
|
12
|
+
@actions = []
|
13
|
+
self.callback &block
|
14
|
+
end
|
15
|
+
|
16
|
+
def then &block
|
17
|
+
d = EM::DefaultDeferrable.new
|
18
|
+
d.callback(&block)
|
19
|
+
@actions << d
|
20
|
+
end
|
21
|
+
|
22
|
+
def nextStep
|
23
|
+
if @actions.length > 0
|
24
|
+
@actions.pop.succeed(Proc.new { nextStep })
|
25
|
+
else
|
26
|
+
self.succeed
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def invoke
|
31
|
+
@actions.reverse!
|
32
|
+
self.nextStep
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
#Trigger when a quota of actions is done
|
37
|
+
class Quorum
|
38
|
+
include EM::Deferrable
|
39
|
+
def initialize
|
40
|
+
@times = 0
|
41
|
+
@when = false
|
42
|
+
end
|
43
|
+
|
44
|
+
def add
|
45
|
+
@times += 1;
|
46
|
+
yield Proc.new { finished }
|
47
|
+
end
|
48
|
+
|
49
|
+
def when(&block)
|
50
|
+
@when = true
|
51
|
+
self.callback(&block)
|
52
|
+
finished
|
53
|
+
end
|
54
|
+
|
55
|
+
protected
|
56
|
+
def finished
|
57
|
+
@times -= 1
|
58
|
+
self.succeed if @times == 0 && @when
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Repeat sequentially an action
|
63
|
+
class AdLib
|
64
|
+
include EM::Deferrable
|
65
|
+
def initialize &block
|
66
|
+
@cpt = 0
|
67
|
+
self.callback(&block)
|
68
|
+
end
|
69
|
+
|
70
|
+
def repeat times, &block
|
71
|
+
@times = times
|
72
|
+
@loop = block
|
73
|
+
self._oneStep
|
74
|
+
end
|
75
|
+
|
76
|
+
def _oneStep
|
77
|
+
@loop.call @cpt
|
78
|
+
@cpt += 1
|
79
|
+
end
|
80
|
+
|
81
|
+
def next *arg
|
82
|
+
if @cpt == @times
|
83
|
+
self.succeed *arg
|
84
|
+
else
|
85
|
+
self._oneStep
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def quorum
|
94
|
+
EventMachine::Scenario::Quorum.new
|
95
|
+
end
|
96
|
+
|
97
|
+
def adlib(&block)
|
98
|
+
EventMachine::Scenario::AdLib.new &block
|
99
|
+
end
|
100
|
+
|
101
|
+
def abinitio(&block)
|
102
|
+
EventMachine::Scenario::AbInitio.new &block
|
103
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: em-scenario
|
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: 2011-09-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: eventmachine
|
16
|
+
requirement: &2152115400 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - =
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.0.beta3
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2152115400
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: minitest
|
27
|
+
requirement: &2152113020 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2.0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2152113020
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
38
|
+
requirement: &2152108000 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2152108000
|
47
|
+
description: Handling simpler story with event machine's callback
|
48
|
+
email: mathieu@garambrogne.net
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files:
|
52
|
+
- README.md
|
53
|
+
files:
|
54
|
+
- README.md
|
55
|
+
- Gemfile
|
56
|
+
- lib/scenario.rb
|
57
|
+
homepage: http://github.com/athoune/em-scenario
|
58
|
+
licenses: []
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
requirements: []
|
76
|
+
rubyforge_project:
|
77
|
+
rubygems_version: 1.8.10
|
78
|
+
signing_key:
|
79
|
+
specification_version: 3
|
80
|
+
summary: Handling simpler story with event machine's callback
|
81
|
+
test_files: []
|