class Pakyow::Data::Lookup

Attributes

containers[R]

@api private

sources[R]

@api private

subscribers[R]

@api private

Public Class Methods

new(containers:, subscribers:, app:) click to toggle source
# File lib/pakyow/data/lookup.rb, line 13
def initialize(containers:, subscribers:, app:)
  @subscribers = subscribers
  @subscribers.lookup = self
  @app = app

  @sources = {}
  @containers = containers
  @containers.each do |container|
    container.sources.each do |source|
      @sources[source.__object_name.name] = source
      define_singleton_method source.__object_name.name do
        Proxy.new(
          container.source(
            source.__object_name.name
          ),

          @subscribers, @app
        )
      end
    end
  end

  validate!
end

Public Instance Methods

ephemeral(type, **qualifications) click to toggle source
# File lib/pakyow/data/lookup.rb, line 38
def ephemeral(type, **qualifications)
  Proxy.new(
    Sources::Ephemeral.new(type, **qualifications),
    @subscribers, @app
  )
end
expire(subscriber, seconds) click to toggle source
# File lib/pakyow/data/lookup.rb, line 49
def expire(subscriber, seconds)
  @subscribers.expire(subscriber, seconds)
end
persist(subscriber) click to toggle source
# File lib/pakyow/data/lookup.rb, line 53
def persist(subscriber)
  @subscribers.persist(subscriber)
end
unsubscribe(subscriber) click to toggle source
# File lib/pakyow/data/lookup.rb, line 45
def unsubscribe(subscriber)
  @subscribers.unsubscribe(subscriber)
end

Private Instance Methods

validate!() click to toggle source
# File lib/pakyow/data/lookup.rb, line 59
def validate!
  validate_associated_sources!
end
validate_associated_sources!() click to toggle source
# File lib/pakyow/data/lookup.rb, line 63
def validate_associated_sources!
  @sources.values.each do |source|
    source.associations.values.flatten.each do |association|
      association.dependent_source_names.compact.each do |source_name|
        unless @sources.key?(source_name)
          raise(
            UnknownSource.new_with_message(
              source: source.__object_name.name,
              association_source: source_name,
              association_type: association.specific_type,
              association_name: association.name
            ).tap do |error|
              error.context = self
            end
          )
        end
      end
    end
  end
end