class MiniDisc::Discover

Public Class Methods

services(service_type, options = {}, &block) click to toggle source
# File lib/minidisc/discover.rb, line 9
def services(service_type, options = {}, &block)
  ensure_initialized(options)
  service_type = ServiceType.sym_to_dnnsd_string(service_type, options)
  discover(service_type, options, &block)
  @destinations
end

Private Class Methods

discover(service_type, options = {}, &block) click to toggle source
# File lib/minidisc/discover.rb, line 23
def discover(service_type, options = {}, &block)
  @destinations = if options[:override].nil?
    from_discovery(service_type, id: options[:id], timeout: options[:timeout], &block)
  else
    from_override(options[:override], &block)
  end
end
ensure_initialized(options) click to toggle source
# File lib/minidisc/discover.rb, line 18
def ensure_initialized(options)
  @logger ||= options[:logger] || Logger.new(STDOUT)
  @destinations ||= []
end
from_discovery(service_type, options = {}) { |service_objects| ... } click to toggle source
# File lib/minidisc/discover.rb, line 46
def from_discovery(service_type, options = {}, &block)
  services = Network.services_with_timeout(service_type, timeout: options[:timeout])
  unless options[:id].nil?
    services.select! do |service|
      match?(options[:id], service[:name])
    end
  end
  service_objects = service_hashes_to_service_objects(services)
  @logger.info("Destinations: Discovered #{services.count} services")
  yield(service_objects) if block_given?
  service_objects
end
from_override(services) { |service_objects| ... } click to toggle source
# File lib/minidisc/discover.rb, line 31
def from_override(services, &block)
  i = 0;
  service_objects = services.map do |service|
    Service.new("override_#{i += 1}", service[:host], port: service[:port])
  end
  @logger.info("Destinations: Overriding discovery with #{services.count} services")
  yield(service_objects) if block_given?
  service_objects
end
match?(match_on, service_name) click to toggle source
# File lib/minidisc/discover.rb, line 41
def match?(match_on, service_name)
  match_on.kind_of?(Regexp) && service_name.match(match_on) ||
    match_on == service_name
end
service_hashes_to_service_objects(services) click to toggle source
# File lib/minidisc/discover.rb, line 59
def service_hashes_to_service_objects(services)
  services.map do |service|
    Service.new(service[:name], service[:target], port: service[:port])
  end
end