noam_lemma 0.2.1.1 → 0.2.1.2
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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -0
- data/Rakefile +2 -0
- data/examples/lemma_verification.rb +77 -30
- data/lib/noam_lemma/lemma.rb +5 -5
- data/lib/noam_lemma/version.rb +1 -1
- data/spec/noam_lemma/lemma_spec.rb +74 -45
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bbf10fe6a3bf7744dc6a6f82fc654591f905c79
|
4
|
+
data.tar.gz: ac505598a7cb384d97e0baa10b8fb99a24cf14aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f364b904d08a0d7cf26ea98aa90f2c56ca409d14a3dda1d9a995722f43ff23b11b3b756dea0842ad6825bc6c0b8f3324f18301aab642a6fb6bd4f0528f80954
|
7
|
+
data.tar.gz: 6ba94ba53aacc4194915bc7d113060e3ba1e8c532eeb02ab007244eb67ff2ede969eefab39cd42c287cc41ae4e749f82e8d59f009852aa069bcd2e4ffc8484c2
|
data/.travis.yml
ADDED
data/Rakefile
CHANGED
@@ -2,42 +2,89 @@ require "noam_lemma"
|
|
2
2
|
|
3
3
|
class Noam::LemmaVerification
|
4
4
|
def self.run
|
5
|
-
|
6
|
-
|
7
|
-
sum
|
8
|
-
name
|
5
|
+
VerifyUsingReturns.new.run
|
6
|
+
VerifyUsingBlocks.new.run
|
9
7
|
end
|
10
8
|
|
11
|
-
|
12
|
-
lemma
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
9
|
+
class VerifyTemplate
|
10
|
+
attr_reader :lemma
|
11
|
+
|
12
|
+
def run
|
13
|
+
lemma.advertise("lemma_verification")
|
14
|
+
verify
|
15
|
+
lemma.stop
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def echo(event)
|
21
|
+
lemma.speak("EchoVerify", event.value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def plus_one(event)
|
25
|
+
lemma.speak("PlusOneVerify", event.value + 1)
|
26
|
+
end
|
27
|
+
|
28
|
+
def sum(event)
|
29
|
+
lemma.speak("SumVerify", event.value.inject {|sum, v| sum + v})
|
30
|
+
end
|
31
|
+
|
32
|
+
def name(event)
|
33
|
+
fullname = "#{event.value["firstName"]} #{event.value["lastName"]}"
|
34
|
+
lemma.speak("NameVerify", {fullName: fullname})
|
35
|
+
end
|
18
36
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
37
|
+
def events
|
38
|
+
["Echo", "PlusOne", "Sum", "Name"]
|
39
|
+
end
|
40
|
+
|
41
|
+
def speaks
|
42
|
+
["EchoVerify", "PlusOneVerify", "SumVerify", "NameVerify"]
|
43
|
+
end
|
25
44
|
end
|
26
45
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
46
|
+
class VerifyUsingReturns < VerifyTemplate
|
47
|
+
def initialize
|
48
|
+
@lemma ||= Noam::Lemma.new("verification", events, speaks)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def verify
|
54
|
+
events.length.times { handle_event(lemma.listen) }
|
55
|
+
end
|
56
|
+
|
57
|
+
def handle_event(event)
|
58
|
+
case event.event
|
59
|
+
when "Echo"
|
60
|
+
echo(event)
|
61
|
+
when "PlusOne"
|
62
|
+
plus_one(event)
|
63
|
+
when "Sum"
|
64
|
+
sum(event)
|
65
|
+
when "Name"
|
66
|
+
name(event)
|
67
|
+
end
|
68
|
+
end
|
33
69
|
end
|
34
70
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
71
|
+
class VerifyUsingBlocks < VerifyTemplate
|
72
|
+
def initialize
|
73
|
+
@lemma = Noam::Lemma.new("verification")
|
74
|
+
prepare_lemma
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def prepare_lemma
|
80
|
+
lemma.hear("Echo") {|event| echo(event)}
|
81
|
+
lemma.hear("PlusOne") {|event| plus_one(event)}
|
82
|
+
lemma.hear("Sum") {|event| sum(event)}
|
83
|
+
lemma.hear("Name") {|event| name(event)}
|
84
|
+
end
|
85
|
+
|
86
|
+
def verify
|
87
|
+
events.length.times { lemma.listen }
|
88
|
+
end
|
42
89
|
end
|
43
90
|
end
|
data/lib/noam_lemma/lemma.rb
CHANGED
@@ -24,6 +24,10 @@ module Noam
|
|
24
24
|
start(polo.host, polo.port)
|
25
25
|
end
|
26
26
|
|
27
|
+
def hear(event_name, &block)
|
28
|
+
@message_filter.hear(event_name, &block)
|
29
|
+
end
|
30
|
+
|
27
31
|
def speak(event, value)
|
28
32
|
if @player
|
29
33
|
@player.put(Noam::Message::Playable.new(@name, event, value))
|
@@ -34,7 +38,7 @@ module Noam
|
|
34
38
|
end
|
35
39
|
|
36
40
|
def listen
|
37
|
-
@listener.take
|
41
|
+
@message_filter.receive(@listener.take)
|
38
42
|
end
|
39
43
|
|
40
44
|
def stop
|
@@ -48,10 +52,6 @@ module Noam
|
|
48
52
|
@message_filter.hears
|
49
53
|
end
|
50
54
|
|
51
|
-
def set_message_filter(message_filter)
|
52
|
-
@message_filter = message_filter
|
53
|
-
end
|
54
|
-
|
55
55
|
private
|
56
56
|
|
57
57
|
def start(host, port)
|
data/lib/noam_lemma/version.rb
CHANGED
@@ -1,33 +1,20 @@
|
|
1
1
|
describe Noam::Lemma do
|
2
|
-
SERVER_DELAY = 0.
|
3
|
-
|
4
|
-
before(:each) do
|
5
|
-
FakeManager.start
|
6
|
-
@server = FakeManager.server
|
7
|
-
@lemma = Noam::Lemma.new("Example Lemma", ["event1"], ["event1"])
|
8
|
-
@lemma.discover
|
9
|
-
sleep(SERVER_DELAY)
|
10
|
-
end
|
11
|
-
|
12
|
-
after do
|
13
|
-
@lemma.stop
|
14
|
-
FakeManager.stop
|
15
|
-
end
|
2
|
+
SERVER_DELAY = 0.075
|
16
3
|
|
17
4
|
describe "#new" do
|
18
5
|
context "with provided arguments" do
|
19
|
-
let(:lemma) { Noam::Lemma.new("Example Lemma", ["
|
6
|
+
let(:lemma) { Noam::Lemma.new("Example Lemma", ["example_event"], ["sample_event"]) }
|
20
7
|
|
21
8
|
it "sets #name to the given name" do
|
22
9
|
lemma.name.should == "Example Lemma"
|
23
10
|
end
|
24
11
|
|
25
12
|
it "sets #hears to the given hears" do
|
26
|
-
lemma.hears.should == ["
|
13
|
+
lemma.hears.should == ["example_event"]
|
27
14
|
end
|
28
15
|
|
29
16
|
it "sets #speaks to the given speaks" do
|
30
|
-
lemma.speaks.should == ["
|
17
|
+
lemma.speaks.should == ["sample_event"]
|
31
18
|
end
|
32
19
|
end
|
33
20
|
|
@@ -45,44 +32,86 @@ describe Noam::Lemma do
|
|
45
32
|
end
|
46
33
|
|
47
34
|
describe "#hears" do
|
48
|
-
let(:lemma) { Noam::Lemma.new("Example Lemma"
|
35
|
+
let(:lemma) { Noam::Lemma.new("Example Lemma") }
|
36
|
+
|
37
|
+
it "is all messages hearable to the Lemma" do
|
38
|
+
lemma.hear("example_event") {}
|
39
|
+
lemma.hear("sample_event") {}
|
40
|
+
lemma.hears.should == ["example_event", "sample_event"]
|
41
|
+
end
|
49
42
|
|
50
|
-
it "
|
51
|
-
|
52
|
-
|
53
|
-
lemma.
|
54
|
-
lemma.hears.should == message_filter.hears
|
43
|
+
it "does not contain duplicate messages" do
|
44
|
+
lemma.hear("example_event") {}
|
45
|
+
lemma.hear("example_event") {}
|
46
|
+
lemma.hears.should == ["example_event"]
|
55
47
|
end
|
56
48
|
end
|
57
49
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
50
|
+
context "with server communication" do
|
51
|
+
let(:server) { FakeManager.server }
|
52
|
+
|
53
|
+
before(:each) do
|
54
|
+
FakeManager.start
|
55
|
+
lemma.discover
|
56
|
+
sleep(SERVER_DELAY)
|
63
57
|
end
|
64
58
|
|
65
|
-
|
66
|
-
|
67
|
-
|
59
|
+
after(:each) do
|
60
|
+
lemma.stop
|
61
|
+
FakeManager.stop
|
68
62
|
end
|
69
|
-
end
|
70
63
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
64
|
+
describe "#discover" do
|
65
|
+
let(:lemma) { Noam::Lemma.new("Example Lemma") }
|
66
|
+
|
67
|
+
it "sends a registration message" do
|
68
|
+
server.clients.length.should == 1
|
69
|
+
server.clients.first.port.should be_an(Integer)
|
70
|
+
server.clients.first.port.should_not == 0
|
71
|
+
end
|
72
|
+
|
73
|
+
it "initializes listener and player" do
|
74
|
+
lemma.listener.should_not be_nil
|
75
|
+
lemma.player.should_not be_nil
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#hear" do
|
80
|
+
let(:lemma) { Noam::Lemma.new("Example Lemma") }
|
81
|
+
|
82
|
+
it "registers messages with blocks" do
|
83
|
+
message = nil
|
84
|
+
lemma.hear("example_event") {|event| message = event}
|
85
|
+
send_message_from_server("example_event")
|
86
|
+
lemma.listen
|
87
|
+
message.event.should == "example_event"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "#speak" do
|
92
|
+
let(:lemma) { Noam::Lemma.new("Example Lemma") }
|
93
|
+
|
94
|
+
it "sends a message to the server" do
|
95
|
+
lemma.speak("an event", "some value")
|
96
|
+
sleep(SERVER_DELAY)
|
97
|
+
server.messages.map {|m| m[2]}.include?("an event").should be_true
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "#listen" do
|
102
|
+
let(:lemma) { Noam::Lemma.new("Example Lemma", ["example_event"]) }
|
103
|
+
|
104
|
+
it "returns a message from the server" do
|
105
|
+
send_message_from_server("example_event")
|
106
|
+
message = lemma.listen
|
107
|
+
message.source.should == "test-server"
|
108
|
+
message.event.should == "example_event"
|
109
|
+
message.value.should == "noam event"
|
110
|
+
end
|
76
111
|
end
|
77
|
-
end
|
78
112
|
|
79
|
-
|
80
|
-
|
81
|
-
@server.send_message(["event", "test-server", "event1", "noam event"])
|
82
|
-
message = @lemma.listen
|
83
|
-
message.source.should == "test-server"
|
84
|
-
message.event.should == "event1"
|
85
|
-
message.value.should == "noam event"
|
113
|
+
def send_message_from_server(source = "test-server", value = "noam event", message)
|
114
|
+
server.send_message(["event", source, message, value])
|
86
115
|
end
|
87
116
|
end
|
88
117
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: noam_lemma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.1.
|
4
|
+
version: 0.2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Van Enk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: require_all
|
@@ -89,6 +89,7 @@ extra_rdoc_files: []
|
|
89
89
|
files:
|
90
90
|
- .gitignore
|
91
91
|
- .rspec
|
92
|
+
- .travis.yml
|
92
93
|
- Gemfile
|
93
94
|
- LICENSE.txt
|
94
95
|
- README.md
|