noam_lemma 0.2.1.1 → 0.2.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a7eb397588c86f4970ea279d375d8ad27c0a957e
4
- data.tar.gz: a713c269ab80e02c0568ac72f4b73e3c53ed2eb4
3
+ metadata.gz: 3bbf10fe6a3bf7744dc6a6f82fc654591f905c79
4
+ data.tar.gz: ac505598a7cb384d97e0baa10b8fb99a24cf14aa
5
5
  SHA512:
6
- metadata.gz: 79f3177eee34fa4c385c4cc4f4007b79122a53eb7e98d6cfefed4cf12e19e44bec21515f49e9377c4be79fef148416ddddb9f080757dead0aacca886a8d1c079
7
- data.tar.gz: 3aafc64b965e14ba84c4015da43664d0e0d9d95abb5e7ed608bf3f0a017580183deda117f03d6af2426d9f428635071ebd3240d4365173b53e658825f8a4ab8b
6
+ metadata.gz: 6f364b904d08a0d7cf26ea98aa90f2c56ca409d14a3dda1d9a995722f43ff23b11b3b756dea0842ad6825bc6c0b8f3324f18301aab642a6fb6bd4f0528f80954
7
+ data.tar.gz: 6ba94ba53aacc4194915bc7d113060e3ba1e8c532eeb02ab007244eb67ff2ede969eefab39cd42c287cc41ae4e749f82e8d59f009852aa069bcd2e4ffc8484c2
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.1.0
data/Rakefile CHANGED
@@ -9,3 +9,5 @@ desc "perform verification tests"
9
9
  task :verify do
10
10
  Noam::LemmaVerification.run
11
11
  end
12
+
13
+ task :default => :spec
@@ -2,42 +2,89 @@ require "noam_lemma"
2
2
 
3
3
  class Noam::LemmaVerification
4
4
  def self.run
5
- echo
6
- plus_one
7
- sum
8
- name
5
+ VerifyUsingReturns.new.run
6
+ VerifyUsingBlocks.new.run
9
7
  end
10
8
 
11
- def self.echo
12
- lemma = Noam::Lemma.new("verification", ["Echo"], ["EchoVerify"])
13
- lemma.advertise("lemma_verification")
14
- event = lemma.listen
15
- lemma.speak("EchoVerify", event.value)
16
- lemma.stop
17
- end
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
- def self.plus_one
20
- lemma = Noam::Lemma.new("verification", ["PlusOne"], ["PlusOneVerify"])
21
- lemma.advertise("lemma_verification")
22
- event = lemma.listen
23
- lemma.speak("PlusOneVerify", event.value + 1)
24
- lemma.stop
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
- def self.sum
28
- lemma = Noam::Lemma.new("verification", ["Sum"], ["SumVerify"])
29
- lemma.advertise("lemma_verification")
30
- event = lemma.listen
31
- lemma.speak("SumVerify", event.value.inject {|sum, v| sum + v})
32
- lemma.stop
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
- def self.name
36
- lemma = Noam::Lemma.new("verification", ["Name"], ["NameVerify"])
37
- lemma.advertise("lemma_verification")
38
- event = lemma.listen
39
- fullname = "#{event.value["firstName"]} #{event.value["lastName"]}"
40
- lemma.speak("NameVerify", {fullName: fullname})
41
- lemma.stop
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
@@ -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)
@@ -1,3 +1,3 @@
1
1
  module NoamLemma
2
- VERSION = "0.2.1.1"
2
+ VERSION = "0.2.1.2"
3
3
  end
@@ -1,33 +1,20 @@
1
1
  describe Noam::Lemma do
2
- SERVER_DELAY = 0.05
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", ["event1"], ["event1"]) }
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 == ["event1"]
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 == ["event1"]
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", ["example_event"]) }
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 "delegates to the MessageFilter when set" do
51
- message_filter = Noam::MessageFilter.new
52
- message_filter.hear("sample_event") {}
53
- lemma.set_message_filter(message_filter)
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
- describe "#discover" do
59
- it "sends a registration message" do
60
- @server.clients.length.should == 1
61
- @server.clients.first.port.should be_an(Integer)
62
- @server.clients.first.port.should_not == 0
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
- it "initializes listener and player" do
66
- @lemma.listener.should_not be_nil
67
- @lemma.player.should_not be_nil
59
+ after(:each) do
60
+ lemma.stop
61
+ FakeManager.stop
68
62
  end
69
- end
70
63
 
71
- describe "#speak" do
72
- it "sends an event to the server" do
73
- @lemma.speak("an event", "some value")
74
- sleep(SERVER_DELAY)
75
- @server.messages.map{|m| m[2]}.include?("an event").should be_true
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
- describe "#listen" do
80
- it "returns a message from the server" do
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.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-03 00:00:00.000000000 Z
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