examples/lemma_verification.rb in noam_lemma-0.2.1.1 vs examples/lemma_verification.rb in noam_lemma-0.2.1.2

- old
+ new

@@ -1,43 +1,90 @@ require "noam_lemma" class Noam::LemmaVerification def self.run - echo - plus_one - sum - name + VerifyUsingReturns.new.run + VerifyUsingBlocks.new.run end - def self.echo - lemma = Noam::Lemma.new("verification", ["Echo"], ["EchoVerify"]) - lemma.advertise("lemma_verification") - event = lemma.listen - lemma.speak("EchoVerify", event.value) - lemma.stop - end + class VerifyTemplate + attr_reader :lemma - def self.plus_one - lemma = Noam::Lemma.new("verification", ["PlusOne"], ["PlusOneVerify"]) - lemma.advertise("lemma_verification") - event = lemma.listen - lemma.speak("PlusOneVerify", event.value + 1) - lemma.stop + def run + lemma.advertise("lemma_verification") + verify + lemma.stop + end + + private + + def echo(event) + lemma.speak("EchoVerify", event.value) + end + + def plus_one(event) + lemma.speak("PlusOneVerify", event.value + 1) + end + + def sum(event) + lemma.speak("SumVerify", event.value.inject {|sum, v| sum + v}) + end + + def name(event) + fullname = "#{event.value["firstName"]} #{event.value["lastName"]}" + lemma.speak("NameVerify", {fullName: fullname}) + end + + def events + ["Echo", "PlusOne", "Sum", "Name"] + end + + def speaks + ["EchoVerify", "PlusOneVerify", "SumVerify", "NameVerify"] + end end - def self.sum - lemma = Noam::Lemma.new("verification", ["Sum"], ["SumVerify"]) - lemma.advertise("lemma_verification") - event = lemma.listen - lemma.speak("SumVerify", event.value.inject {|sum, v| sum + v}) - lemma.stop + class VerifyUsingReturns < VerifyTemplate + def initialize + @lemma ||= Noam::Lemma.new("verification", events, speaks) + end + + private + + def verify + events.length.times { handle_event(lemma.listen) } + end + + def handle_event(event) + case event.event + when "Echo" + echo(event) + when "PlusOne" + plus_one(event) + when "Sum" + sum(event) + when "Name" + name(event) + end + end end - def self.name - lemma = Noam::Lemma.new("verification", ["Name"], ["NameVerify"]) - lemma.advertise("lemma_verification") - event = lemma.listen - fullname = "#{event.value["firstName"]} #{event.value["lastName"]}" - lemma.speak("NameVerify", {fullName: fullname}) - lemma.stop + class VerifyUsingBlocks < VerifyTemplate + def initialize + @lemma = Noam::Lemma.new("verification") + prepare_lemma + end + + private + + def prepare_lemma + lemma.hear("Echo") {|event| echo(event)} + lemma.hear("PlusOne") {|event| plus_one(event)} + lemma.hear("Sum") {|event| sum(event)} + lemma.hear("Name") {|event| name(event)} + end + + def verify + events.length.times { lemma.listen } + end end end