Sha256: 6efccee55942fa938e9746f4f2ba6fcc3266779e041bc09ac6cad8b3cf883cde

Contents?: true

Size: 1.35 KB

Versions: 18

Compression:

Stored size: 1.35 KB

Contents

require 'singleton'

module Frodo
  # Provides a registry for keeping track of multiple Frodo::Service instances
  class ServiceRegistry
    include Singleton

    # Add a service to the Registry
    #
    # @param service [Frodo::Service] service to add to the registry
    def add(service)
      initialize_instance_variables
      @services << service if service.is_a?(Frodo::Service) && !@services.include?(service)
      @services_by_name[service.name] = @services.find_index(service)
      @services_by_url[service.service_url] = @services.find_index(service)
    end

    # Lookup a service by URL or name
    #
    # @param lookup_key [String] the URL or name to lookup
    # @return [Frodo::Service, nil] the Frodo::Service or nil
    def [](lookup_key)
      initialize_instance_variables
      index = @services_by_name[lookup_key] || @services_by_url[lookup_key]
      index.nil? ? nil : @services[index]
    end

    # (see #add)
    def self.add(service)
      Frodo::ServiceRegistry.instance.add(service)
    end

    # (see #[])
    def self.[](lookup_key)
      Frodo::ServiceRegistry.instance[lookup_key]
    end

    private

    def initialize_instance_variables
      @services ||= []
      @services_by_name ||= {}
      @services_by_url ||= {}
    end

    def flush
      @services = []
      @services_by_name = {}
      @services_by_url = {}
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
frodo-0.12.8 lib/frodo/service_registry.rb
frodo-0.12.7 lib/frodo/service_registry.rb
frodo-0.12.6 lib/frodo/service_registry.rb
frodo-0.12.5 lib/frodo/service_registry.rb
frodo-0.12.4 lib/frodo/service_registry.rb
frodo-0.12.2 lib/frodo/service_registry.rb
frodo-0.12.1 lib/frodo/service_registry.rb
frodo-0.12.0 lib/frodo/service_registry.rb
frodo-0.11.0 lib/frodo/service_registry.rb
frodo-0.10.8 lib/frodo/service_registry.rb
frodo-0.10.7 lib/frodo/service_registry.rb
frodo-0.10.6 lib/frodo/service_registry.rb
frodo-0.10.5 lib/frodo/service_registry.rb
frodo-0.10.4 lib/frodo/service_registry.rb
frodo-0.10.3 lib/frodo/service_registry.rb
frodo-0.10.2 lib/frodo/service_registry.rb
frodo-0.10.1 lib/frodo/service_registry.rb
frodo-0.10.0 lib/frodo/service_registry.rb