class PubSub::EventClassFactory
Constants
- EventClassDoesNotExist
Attributes
abstract_event_class[R]
domain_name[R]
event_name[R]
Public Class Methods
build(event_name, domain_name: nil, abstract_event_class: nil)
click to toggle source
# File lib/pub_sub/event_class_factory.rb, line 5 def self.build(event_name, domain_name: nil, abstract_event_class: nil) new( event_name, domain_name: domain_name, abstract_event_class: abstract_event_class ).build_event_class end
new(event_name, domain_name:, abstract_event_class:)
click to toggle source
# File lib/pub_sub/event_class_factory.rb, line 13 def initialize(event_name, domain_name:, abstract_event_class:) @event_name = event_name.to_s @abstract_event_class = abstract_event_class @domain_name = domain_name end
Public Instance Methods
build_event_class()
click to toggle source
# File lib/pub_sub/event_class_factory.rb, line 19 def build_event_class event_class = event_class_name.safe_constantize return event_class unless event_class.nil? if abstract_event_class.nil? raise(EventClassDoesNotExist, event_class_name) else register_new_event_class end end
Private Instance Methods
event_class_name()
click to toggle source
# File lib/pub_sub/event_class_factory.rb, line 55 def event_class_name @event_class_name ||= "#{event_name_with_domain}_event".classify end
event_class_namespace()
click to toggle source
# File lib/pub_sub/event_class_factory.rb, line 39 def event_class_namespace event_class_name.deconstantize.constantize end
event_name_includes_domain?()
click to toggle source
# File lib/pub_sub/event_class_factory.rb, line 43 def event_name_includes_domain? event_name.include?('__') end
event_name_with_domain()
click to toggle source
# File lib/pub_sub/event_class_factory.rb, line 47 def event_name_with_domain if event_name_includes_domain? event_name.to_s.sub('__', '/') else "#{domain_name}/#{event_name}" end end
register_new_event_class()
click to toggle source
# File lib/pub_sub/event_class_factory.rb, line 35 def register_new_event_class event_class_namespace.const_set(event_class_name.demodulize, Class.new(abstract_event_class)) end