Sha256: 2d99adf076dcb470c4fda886d159f535d0f5f6b295b0a32792aba183873ce332
Contents?: true
Size: 1.02 KB
Versions: 2
Compression:
Stored size: 1.02 KB
Contents
module Prpr module Handler class Base class Entry < Struct.new(:klass, :event, :queries, :handler) end AnyEvent = Object class << self def handle(event, queries = {}, &handler) entries << Entry.new(self, event, queries, handler) end def entries @@entries ||= [] end def on_event(event) entries .select { |entry| match?(entry, event) } .each { |entry| invoke(entry, event) } end private def match?(entry, event) entry.event === event && entry.queries.all? { |query| query_match?(query, event) } end def query_match?(query, event) key, value = *query value === event.send(key) end def invoke(entry, event) obj = entry.klass.new(event) obj.instance_eval(&entry.handler) end end attr_reader :event def initialize(event) @event = event end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
prpr-0.2.0 | lib/prpr/handler/base.rb |
prpr-0.1.0 | lib/prpr/handler/base.rb |