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