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 CHANGED
@@ -3,3 +3,5 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  coverage
6
+ .yardoc
7
+ doc
@@ -0,0 +1,2 @@
1
+ --markup-provider=redcarpet
2
+ --markup=markdown
@@ -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 "rspec"
23
- s.add_development_dependency "yard"
24
- s.add_development_dependency "simplecov"
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
+ # ...
@@ -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 potentially emittable
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
  #
@@ -1,3 +1,3 @@
1
1
  module Eventually
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -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.0
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: 2011-12-21 00:00:00.000000000Z
12
+ date: 2012-02-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &2161573120 !ruby/object:Gem::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: '0'
21
+ version: '2.8'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2161573120
24
+ version_requirements: *2152257320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: yard
27
- requirement: &2161572700 !ruby/object:Gem::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: *2161572700
57
+ version_requirements: *2152246560
36
58
  - !ruby/object:Gem::Dependency
37
59
  name: simplecov
38
- requirement: &2152246440 !ruby/object:Gem::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: *2152246440
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