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 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