seh 0.1.0 → 0.3.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/.gitignore +0 -1
- data/Gemfile +2 -2
- data/Gemfile.lock +25 -0
- data/README.md +82 -8
- data/Rakefile +31 -0
- data/examples/epic_battle.rb +240 -0
- data/examples/event.rb +1 -0
- data/examples/event/damage.rb +31 -0
- data/examples/event/hostile.rb +11 -0
- data/examples/event/melee_attack.rb +32 -0
- data/examples/event_color.rb +57 -0
- data/examples/mob.rb +10 -0
- data/lib/seh.rb +4 -7
- data/lib/seh/event.rb +126 -143
- data/lib/seh/event_bind.rb +15 -0
- data/lib/seh/event_bind_disconnector.rb +17 -0
- data/lib/seh/event_target.rb +30 -22
- data/lib/seh/event_type.rb +11 -21
- data/lib/seh/version.rb +1 -1
- data/seh.gemspec +2 -2
- data/spec/seh/event_bind_disconnector_spec.rb +23 -0
- data/spec/seh/event_bind_spec.rb +22 -0
- data/spec/seh/event_spec.rb +209 -0
- data/spec/seh/event_target_spec.rb +87 -0
- data/spec/seh/event_type_spec.rb +134 -0
- data/spec/seh_spec.rb +25 -0
- metadata +23 -18
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'seh/event_type'
|
3
|
+
|
4
|
+
module Seh
|
5
|
+
describe EventType do
|
6
|
+
before :each do
|
7
|
+
@type = :some_type
|
8
|
+
@type1 = :type1
|
9
|
+
@type2 = :type2
|
10
|
+
@type3 = :type3
|
11
|
+
@type4 = :type4
|
12
|
+
end
|
13
|
+
|
14
|
+
context "with a single basic type" do
|
15
|
+
subject { EventType.new :some_type }
|
16
|
+
|
17
|
+
it { subject.match([@type]).should be_true }
|
18
|
+
it { subject.match([@type, :another, :bar]).should be_true }
|
19
|
+
it { subject.match([:foo, :bar, @type]).should be_true }
|
20
|
+
|
21
|
+
it { subject.match([nil]).should be_false }
|
22
|
+
it { subject.match([:wrong_type]).should be_false }
|
23
|
+
it { subject.match([:wrong_type, :bar, :bazz]).should be_false }
|
24
|
+
it { subject.match([]).should be_false }
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with nil type which should match everything" do
|
28
|
+
subject { EventType.new nil }
|
29
|
+
it { subject.match([nil]).should be_true }
|
30
|
+
it { subject.match([]).should be_true }
|
31
|
+
it { subject.match([@type]).should be_true }
|
32
|
+
it { subject.match([@type, :another, :bar]).should be_true }
|
33
|
+
it { subject.match([:foo, :bar, @type]).should be_true }
|
34
|
+
it { subject.match([:wrong_type, :bar, :bazz]).should be_true }
|
35
|
+
end
|
36
|
+
|
37
|
+
context "And with only basic types nested" do
|
38
|
+
subject { EventType::And.new @type1, @type2, @type3 }
|
39
|
+
|
40
|
+
it { subject.match([@type1,@type3,@type2]).should be_true }
|
41
|
+
it { subject.match([@type1,@type3,@type2,:another_type]).should be_true }
|
42
|
+
|
43
|
+
it { subject.match([@type1]).should be_false }
|
44
|
+
it { subject.match([@type2]).should be_false }
|
45
|
+
it { subject.match([@type3]).should be_false }
|
46
|
+
it { subject.match([@type1,@type2]).should be_false }
|
47
|
+
it { subject.match([@type3,@type2]).should be_false }
|
48
|
+
|
49
|
+
it { subject.match([nil]).should be_false }
|
50
|
+
it { subject.match([]).should be_false }
|
51
|
+
end
|
52
|
+
|
53
|
+
context "Or with only basic types nested" do
|
54
|
+
subject { EventType::Or.new @type1, @type2, @type3 }
|
55
|
+
|
56
|
+
it { subject.match([@type1]).should be_true }
|
57
|
+
it { subject.match([@type2]).should be_true }
|
58
|
+
it { subject.match([@type3]).should be_true }
|
59
|
+
it { subject.match([@type1,@type2,@type3]).should be_true }
|
60
|
+
it { subject.match([@type1,:another_type]).should be_true }
|
61
|
+
|
62
|
+
it { subject.match([:another_type, :another_again_type]).should be_false }
|
63
|
+
it { subject.match([nil]).should be_false }
|
64
|
+
it { subject.match([]).should be_false }
|
65
|
+
end
|
66
|
+
|
67
|
+
context "Not with only a basic type nested" do
|
68
|
+
subject { EventType::Not.new @type1 }
|
69
|
+
|
70
|
+
it { subject.match([nil]).should be_true }
|
71
|
+
it { subject.match([]).should be_true }
|
72
|
+
it { subject.match([@type2,@type3]).should be_true }
|
73
|
+
|
74
|
+
it { subject.match([@type1]).should be_false }
|
75
|
+
it { subject.match([@type1,:another_type]).should be_false }
|
76
|
+
end
|
77
|
+
|
78
|
+
context "And with two nested Nots" do
|
79
|
+
subject { EventType::And.new @type2, EventType::Not.new(@type1), EventType::Not.new(@type3) }
|
80
|
+
|
81
|
+
it { subject.match([@type2]).should be_true }
|
82
|
+
it { subject.match([@type2,:bar]).should be_true }
|
83
|
+
|
84
|
+
it { subject.match([@type1,@type2]).should be_false }
|
85
|
+
it { subject.match([@type3,@type2]).should be_false }
|
86
|
+
it { subject.match([@type3,@type1]).should be_false }
|
87
|
+
it { subject.match([@type1]).should be_false }
|
88
|
+
it { subject.match([:another_type]).should be_false }
|
89
|
+
it { subject.match([nil]).should be_false }
|
90
|
+
it { subject.match([]).should be_false }
|
91
|
+
end
|
92
|
+
|
93
|
+
context "Or with a nested And" do
|
94
|
+
subject { EventType::Or.new @type2, EventType::And.new(@type1,@type3) }
|
95
|
+
it { subject.match([@type2]).should be_true }
|
96
|
+
it { subject.match([@type1,@type3]).should be_true }
|
97
|
+
it { subject.match([@type1,@type3,@type2]).should be_true }
|
98
|
+
|
99
|
+
it { subject.match([@type1]).should be_false }
|
100
|
+
it { subject.match([@type3]).should be_false }
|
101
|
+
it { subject.match([:another_type]).should be_false }
|
102
|
+
it { subject.match([nil]).should be_false }
|
103
|
+
it { subject.match([]).should be_false }
|
104
|
+
end
|
105
|
+
|
106
|
+
context "A more complicated nested example" do
|
107
|
+
subject do
|
108
|
+
EventType::Or.new(
|
109
|
+
@type,
|
110
|
+
EventType::And.new(@type1,@type2),
|
111
|
+
EventType::And.new(@type2,@type3),
|
112
|
+
EventType::And.new(@type4,EventType::Not.new(@type3)),
|
113
|
+
EventType::Or.new(:success)
|
114
|
+
)
|
115
|
+
end
|
116
|
+
|
117
|
+
it { subject.match([:success]).should be_true }
|
118
|
+
it { subject.match([:success,@type3]).should be_true }
|
119
|
+
it { subject.match([@type]).should be_true }
|
120
|
+
it { subject.match([@type1,@type2]).should be_true }
|
121
|
+
it { subject.match([@type2,@type3]).should be_true }
|
122
|
+
it { subject.match([@type4]).should be_true }
|
123
|
+
|
124
|
+
it { subject.match([@type1,@type3]).should be_false }
|
125
|
+
it { subject.match([@type4,@type3]).should be_false }
|
126
|
+
it { subject.match([@type1]).should be_false }
|
127
|
+
it { subject.match([@type2]).should be_false }
|
128
|
+
it { subject.match([@type3]).should be_false }
|
129
|
+
it { subject.match([:another_type]).should be_false }
|
130
|
+
it { subject.match([nil]).should be_false }
|
131
|
+
it { subject.match([]).should be_false }
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
data/spec/seh_spec.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'seh'
|
3
|
+
|
4
|
+
describe Seh do
|
5
|
+
context "with data to test EventType aliases" do
|
6
|
+
before :each do
|
7
|
+
@x = :one
|
8
|
+
@y = :two
|
9
|
+
@z = :three
|
10
|
+
@result = double Seh::EventType
|
11
|
+
end
|
12
|
+
it "delegates Seh::and to EventType" do
|
13
|
+
Seh::EventType::And.should_receive(:new).with(@x,@y,@z).once.and_return @result
|
14
|
+
Seh::and(@x,@y,@z).should eq(@result)
|
15
|
+
end
|
16
|
+
it "delegates Seh::or to EventType" do
|
17
|
+
Seh::EventType::Or.should_receive(:new).with(@x,@y,@z).once.and_return @result
|
18
|
+
Seh::or(@x,@y,@z).should eq(@result)
|
19
|
+
end
|
20
|
+
it "delegates Seh::not to EventType" do
|
21
|
+
Seh::EventType::Not.should_receive(:new).with(@x).once.and_return @result
|
22
|
+
Seh::not(@x).should eq(@result)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,21 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-07 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
|
-
description:
|
15
|
-
|
16
|
-
|
17
|
-
order. Events ''bubble'', and event targets can have multiple parents and common
|
18
|
-
ancestors. Staged event callbacks: event.before { ''the united states of'' }; event.after
|
19
|
-
{ ''america'' }. Staged callbacks allow an ancestor to influence affect of event
|
20
|
-
on a descendant: ancestor.before { |event| event.damage *= 2 }; descendant.after
|
21
|
-
{ |event| player.health -= event.damage }. Events use ''tag-style'' types: event.type
|
22
|
-
:hostile ; event.type :spell. Handle only events which pass a filter: player.bind(
|
23
|
-
Seh::and :hostile, Seh::not( :spell ) ) { |event| ''Hostile non-spell!!'' }. Optional
|
24
|
-
event failure: event.fail; event.success { ''yay!'' }; event.failure { ''oops!''
|
25
|
-
}. Event inherits from OpenStruct for dynamic properties: event.omgs = ''omgs a
|
26
|
-
dynamic attribute'''
|
14
|
+
description: Structured event handler. Pure ruby event handling similar to w3c dom
|
15
|
+
events. Synchronous, local event handling for complex emergent behaviors as required
|
16
|
+
by something like a game engine. v0.3.0 improves a lot on v0.1.0.
|
27
17
|
email:
|
28
18
|
- ryan.berckmans@gmail.com
|
29
19
|
executables: []
|
@@ -34,14 +24,30 @@ files:
|
|
34
24
|
- .rvmrc
|
35
25
|
- .yardopts
|
36
26
|
- Gemfile
|
27
|
+
- Gemfile.lock
|
37
28
|
- README.md
|
38
29
|
- Rakefile
|
30
|
+
- examples/epic_battle.rb
|
31
|
+
- examples/event.rb
|
32
|
+
- examples/event/damage.rb
|
33
|
+
- examples/event/hostile.rb
|
34
|
+
- examples/event/melee_attack.rb
|
35
|
+
- examples/event_color.rb
|
36
|
+
- examples/mob.rb
|
39
37
|
- lib/seh.rb
|
40
38
|
- lib/seh/event.rb
|
39
|
+
- lib/seh/event_bind.rb
|
40
|
+
- lib/seh/event_bind_disconnector.rb
|
41
41
|
- lib/seh/event_target.rb
|
42
42
|
- lib/seh/event_type.rb
|
43
43
|
- lib/seh/version.rb
|
44
44
|
- seh.gemspec
|
45
|
+
- spec/seh/event_bind_disconnector_spec.rb
|
46
|
+
- spec/seh/event_bind_spec.rb
|
47
|
+
- spec/seh/event_spec.rb
|
48
|
+
- spec/seh/event_target_spec.rb
|
49
|
+
- spec/seh/event_type_spec.rb
|
50
|
+
- spec/seh_spec.rb
|
45
51
|
- spec/spec_helper.rb
|
46
52
|
homepage: https://github.com/ryanberckmans/seh
|
47
53
|
licenses: []
|
@@ -63,9 +69,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
69
|
version: '0'
|
64
70
|
requirements: []
|
65
71
|
rubyforge_project: seh
|
66
|
-
rubygems_version: 1.8.
|
72
|
+
rubygems_version: 1.8.24
|
67
73
|
signing_key:
|
68
74
|
specification_version: 3
|
69
|
-
summary: Structured event handler. Pure ruby event handling similar to w3c dom events
|
70
|
-
alpha wip.
|
75
|
+
summary: Structured event handler. Pure ruby event handling similar to w3c dom events.
|
71
76
|
test_files: []
|