eventually 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.yardopts +2 -0
- data/eventually.gemspec +5 -3
- data/examples/sentence_parser.rb +47 -0
- data/lib/eventually.rb +8 -2
- data/lib/eventually/version.rb +1 -1
- data/spec/lib/eventually_spec.rb +44 -0
- metadata +33 -9
data/.yardopts
ADDED
data/eventually.gemspec
CHANGED
@@ -19,7 +19,9 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
# specify any dependencies here; for example:
|
22
|
-
s.add_development_dependency
|
23
|
-
s.add_development_dependency
|
24
|
-
s.add_development_dependency
|
22
|
+
s.add_development_dependency 'rspec', '>= 2.8'
|
23
|
+
s.add_development_dependency 'yard'
|
24
|
+
s.add_development_dependency 'redcarpet'
|
25
|
+
s.add_development_dependency 'github-markup'
|
26
|
+
s.add_development_dependency 'simplecov'
|
25
27
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
$LOAD_PATH << File.expand_path('../lib', File.dirname(__FILE__))
|
2
|
+
require 'eventually'
|
3
|
+
|
4
|
+
class SentenceParser
|
5
|
+
include Eventually
|
6
|
+
|
7
|
+
def initialize(document)
|
8
|
+
@document = document
|
9
|
+
end
|
10
|
+
|
11
|
+
def parse!
|
12
|
+
lines = @document.split(/\r?\n/)
|
13
|
+
lines.each do |line|
|
14
|
+
emit(:line, line)
|
15
|
+
words = line.split(/\s+/)
|
16
|
+
words.each do |word|
|
17
|
+
emit(:word, word)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
self
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
document = %Q{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus elit et ligula vestibulum porttitor. Vestibulum tristique suscipit sem eu cursus. Aenean sit amet ligula elit. Morbi venenatis scelerisque viverra. Cras at nisl quis libero rutrum accumsan.
|
25
|
+
|
26
|
+
Aenean et nisl felis, nec convallis erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus nec purus nunc, sit amet ornare purus. Vestibulum laoreet mattis sem non malesuada. Nunc vitae lectus neque. Duis sit amet velit non nulla facilisis sodales.
|
27
|
+
|
28
|
+
Aenean ultrices sapien ac enim lacinia euismod eleifend pulvinar urna. Nulla leo metus, viverra non lacinia at, posuere at leo. Nullam dictum venenatis tristique. Fusce pellentesque felis vitae libero gravida at interdum est lacinia. Nam rhoncus, diam at gravida dictum, odio velit rutrum erat, vitae laoreet nisl tortor at magna.}
|
29
|
+
|
30
|
+
parser = SentenceParser.new(document)
|
31
|
+
parser.on(:line) do |line|
|
32
|
+
puts 'Found line with %d characters' % line.length
|
33
|
+
puts 'Line = %s' % line
|
34
|
+
end
|
35
|
+
parser.on(:word) do |word|
|
36
|
+
puts 'Found word = %s' % word
|
37
|
+
end
|
38
|
+
parser.parse!
|
39
|
+
|
40
|
+
# output
|
41
|
+
#
|
42
|
+
# Found line with 264 characters
|
43
|
+
# Line = Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus elit et ligula vestibulum porttitor. Vestibulum tristique suscipit sem eu cursus. Aenean sit amet ligula elit. Morbi venenatis scelerisque viverra. Cras at nisl quis libero rutrum accumsan.
|
44
|
+
# Found word = Lorem
|
45
|
+
# Found word = ipsum
|
46
|
+
# Found word = dolor
|
47
|
+
# ...
|
data/lib/eventually.rb
CHANGED
@@ -49,9 +49,9 @@ module Eventually
|
|
49
49
|
end
|
50
50
|
|
51
51
|
# Check if instances of this class have pre-defined
|
52
|
-
# the given event as
|
52
|
+
# the given event as emittable
|
53
53
|
def emits?(evt)
|
54
|
-
emittable.key?(evt.to_sym)
|
54
|
+
emittable.key?(evt.to_sym) rescue false
|
55
55
|
end
|
56
56
|
|
57
57
|
# Return the maximum number of listeners before
|
@@ -118,6 +118,12 @@ module Eventually
|
|
118
118
|
end
|
119
119
|
end # ClassMethods
|
120
120
|
|
121
|
+
# Check if this instance has pre-defined the given event as emittable.
|
122
|
+
# Simply calls the class method of the same name.
|
123
|
+
def emits?(evt)
|
124
|
+
self.class.emits?(evt)
|
125
|
+
end
|
126
|
+
|
121
127
|
# Event registration method. Takes an event to register against and either
|
122
128
|
# a callable object (e.g. proc/lambda/detached method) or a block
|
123
129
|
#
|
data/lib/eventually/version.rb
CHANGED
data/spec/lib/eventually_spec.rb
CHANGED
@@ -38,6 +38,31 @@ describe Eventually do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
describe '.emits?' do
|
42
|
+
context 'when event in question is registered' do
|
43
|
+
it 'returns true' do
|
44
|
+
Emitter.emits(:jigger)
|
45
|
+
Emitter.emits?(:jigger).should be_true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when event in question is not registered' do
|
50
|
+
it 'returns false' do
|
51
|
+
Emitter.emits(:jigger)
|
52
|
+
Emitter.emits?(:jogger).should be_false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'when given event is not symbolizable' do
|
57
|
+
it 'returns false' do
|
58
|
+
invalid_events = [nil, 1, 1.0, false]
|
59
|
+
invalid_events.each do |e|
|
60
|
+
Emitter.emits?(e).should be_false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
41
66
|
describe '.emits' do
|
42
67
|
it 'allows event definition at class level' do
|
43
68
|
Emitter.emits(:jigger)
|
@@ -205,6 +230,16 @@ describe Eventually do
|
|
205
230
|
end
|
206
231
|
end
|
207
232
|
|
233
|
+
describe '#emits?' do
|
234
|
+
it 'mirrors the class method' do
|
235
|
+
emitter = Emitter.new
|
236
|
+
Emitter.should_receive(:emits?).with(:jeff).and_return(false)
|
237
|
+
Emitter.should_receive(:emits?).with(:jorge).and_return(true)
|
238
|
+
emitter.emits?(:jeff).should be_false
|
239
|
+
emitter.emits?(:jorge).should be_true
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
208
243
|
describe '#emit' do
|
209
244
|
let(:emitter) { Emitter.new }
|
210
245
|
let(:watcher) { Watcher.new }
|
@@ -314,6 +349,15 @@ describe Eventually do
|
|
314
349
|
end
|
315
350
|
end
|
316
351
|
end
|
352
|
+
|
353
|
+
context 'when event callback raises an error' do
|
354
|
+
it 'bubbles the callback error back to the emitter' do
|
355
|
+
emitter.on(:dangerous) do
|
356
|
+
raise 'Error in callback'
|
357
|
+
end
|
358
|
+
expect { emitter.__send__(:emit, :dangerous) }.to raise_error('Error in callback')
|
359
|
+
end
|
360
|
+
end
|
317
361
|
end
|
318
362
|
|
319
363
|
describe '#once' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventually
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,44 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-02-17 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152257320 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
21
|
+
version: '2.8'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152257320
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: yard
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152250960 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2152250960
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: redcarpet
|
38
|
+
requirement: &2152249200 !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: *2152249200
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: github-markup
|
49
|
+
requirement: &2152246560 !ruby/object:Gem::Requirement
|
28
50
|
none: false
|
29
51
|
requirements:
|
30
52
|
- - ! '>='
|
@@ -32,10 +54,10 @@ dependencies:
|
|
32
54
|
version: '0'
|
33
55
|
type: :development
|
34
56
|
prerelease: false
|
35
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152246560
|
36
58
|
- !ruby/object:Gem::Dependency
|
37
59
|
name: simplecov
|
38
|
-
requirement: &
|
60
|
+
requirement: &2152245120 !ruby/object:Gem::Requirement
|
39
61
|
none: false
|
40
62
|
requirements:
|
41
63
|
- - ! '>='
|
@@ -43,7 +65,7 @@ dependencies:
|
|
43
65
|
version: '0'
|
44
66
|
type: :development
|
45
67
|
prerelease: false
|
46
|
-
version_requirements: *
|
68
|
+
version_requirements: *2152245120
|
47
69
|
description: Eventually is an event library built to loosely mirror the NodeJS EventEmitter
|
48
70
|
API.
|
49
71
|
email:
|
@@ -54,12 +76,14 @@ extra_rdoc_files: []
|
|
54
76
|
files:
|
55
77
|
- .gitignore
|
56
78
|
- .rvmrc
|
79
|
+
- .yardopts
|
57
80
|
- Gemfile
|
58
81
|
- README.md
|
59
82
|
- Rakefile
|
60
83
|
- eventually.gemspec
|
61
84
|
- examples/arity.rb
|
62
85
|
- examples/basic.rb
|
86
|
+
- examples/sentence_parser.rb
|
63
87
|
- examples/strict.rb
|
64
88
|
- lib/eventually.rb
|
65
89
|
- lib/eventually/callable.rb
|