class Synapses::Contract

@author Alexander Semyonov <al@semyonov.us>

Attributes

exchanges[R]

@return [Hash]

queues[R]

@return [Hash]

Public Class Methods

default_contract_path() click to toggle source

@return [String]

# File lib/synapses/contract.rb, line 15
def self.default_contract_path
  File.expand_path('../contract/synapses.yml', __FILE__)
end
load_defaults(root = './') click to toggle source

@param [String] root root directory

# File lib/synapses/contract.rb, line 27
def self.load_defaults(root = './')
  contract = new(YAML.load_file(default_contract_path), root: root)

  ([File.join(root, 'config/synapses.yml')] +
    Dir[File.join(root, 'config/synapses/*.yml')]).each do |file_name|

    if File.exists?(file_name)
      hash = YAML.load_file(file_name)
      contract.add_contract(hash)
    end
  end
  contract
end
load_file(file_name) click to toggle source

@param [String] file_name @return [Synapse::Contract]

# File lib/synapses/contract.rb, line 21
def self.load_file(file_name)
  hash = YAML.load_file(file_name)
  new(hash)
end
new(hash, options = {}) click to toggle source

@param [Hash] hash

# File lib/synapses/contract.rb, line 42
def initialize(hash, options = {})
  @exchanges = Hash.new do |hash, name|
    raise "Unknown Exchange #{name.inspect}. Known are: #{hash.keys.inspect}"
  end
  @queues = Hash.new do |hash, name|
    raise "Unknown Queue #{name.inspect}. Known are: #{hash.keys.inspect}"
  end
  @options = options
  add_contract(hash)
end

Public Instance Methods

add_contract(contract_hash) click to toggle source

@param [Hash] contract_hash

# File lib/synapses/contract.rb, line 54
def add_contract(contract_hash)
  contract_hash.each do |ns, hash|
    ns = hash['ns'] if hash.key?('ns')

    name = hash.delete('name')
    prefix = [ns, name].compact.join('.')

    if hash['exchanges']
      hash.delete('exchanges').each do |name, attributes|
        name = [prefix, name].join('.').to_s
        exchanges[name] = Exchange.new(name, attributes || {})
      end
    end

    if hash['queues']
      hash.delete('queues').each do |name, attributes|
        name = [prefix, name].join('.').to_s
        queues[name.to_s] = Queue.new(name, attributes || {})
      end
    end
  end
end
exchange(name, channel=Synapses.default_channel) click to toggle source

@param [String] name @return [AMQP::Exchange]

# File lib/synapses/contract.rb, line 95
def exchange(name, channel=Synapses.default_channel)
  exchange_definition(name).exchange(channel)
end
exchange_definition(name) click to toggle source

@param [Synapses::Contract::Exchange] name

# File lib/synapses/contract.rb, line 84
def exchange_definition(name)
  exchanges[name.to_s]
end
queue(name, channel=Synapses.default_channel) click to toggle source

@param [String] name @param [AMQP::Channel] channel @return [AMQP::Queue]

# File lib/synapses/contract.rb, line 102
def queue(name, channel=Synapses.default_channel)
  queue_definition(name).queue(channel)
end
queue_definition(name) click to toggle source

@param [Synapses::Contract::Queue] name

# File lib/synapses/contract.rb, line 89
def queue_definition(name)
  queues[name.to_s]
end
setup!(channel = Synapses.default_channel) click to toggle source

@param [AMQP::Channel] channel

# File lib/synapses/contract.rb, line 78
def setup!(channel = Synapses.default_channel)
  exchanges.values.each { |exchange| exchange.exchange(channel) }
  queues.values.each { |queue| queue.queue(channel) }
end