mirror of
https://github.com/jimeh/amqp-failover.git
synced 2026-02-19 10:56:44 +00:00
renamed Failover::Configs to
Failover::Configurations
This commit is contained in:
101
lib/amqp/failover/configurations.rb
Normal file
101
lib/amqp/failover/configurations.rb
Normal file
@@ -0,0 +1,101 @@
|
||||
# encoding: utf-8
|
||||
|
||||
module AMQP
|
||||
class Failover
|
||||
class Configurations < Array
|
||||
|
||||
def initialize(confs = nil)
|
||||
load(confs)
|
||||
end
|
||||
|
||||
def [](*args)
|
||||
if args[0].is_a?(Symbol)
|
||||
return primary if args[0] == :primary
|
||||
get(args[0])
|
||||
else
|
||||
super(*args)
|
||||
end
|
||||
end
|
||||
|
||||
def []=(*args)
|
||||
if args[0].is_a?(Symbol)
|
||||
return primary = args.last if args[0] == :primary
|
||||
set(args.last, args[0])
|
||||
end
|
||||
super(*args)
|
||||
end
|
||||
|
||||
def refs
|
||||
@refs ||= {}
|
||||
end
|
||||
|
||||
def primary_ref
|
||||
@primary_ref ||= 0
|
||||
end
|
||||
|
||||
def primary_ref=(ref)
|
||||
@primary_ref = ref
|
||||
end
|
||||
|
||||
def primary
|
||||
get(primary_ref) || AMQP.settings
|
||||
end
|
||||
|
||||
def primary=(conf = {})
|
||||
set(conf, primary_ref)
|
||||
end
|
||||
|
||||
def get(ref = nil)
|
||||
return self[ref] if ref.is_a?(Fixnum)
|
||||
self[refs[ref]] if refs[ref]
|
||||
end
|
||||
|
||||
def set(conf = {}, ref = nil)
|
||||
conf = Failover::Config.new(conf) if !conf.is_a?(Failover::Config)
|
||||
if (index = self.index(conf)).nil?
|
||||
self << conf
|
||||
else
|
||||
conf = self[index]
|
||||
end
|
||||
refs[ref] = (index || self.index(conf)) if ref
|
||||
conf
|
||||
end
|
||||
|
||||
def find_next(conf = {})
|
||||
current = self.index(conf)
|
||||
self[(current+1 == self.size) ? 0 : current+1] if current
|
||||
end
|
||||
|
||||
def load_file(file, env = nil)
|
||||
raise ArgumentError, "Can't find #{file}" unless File.exists?(file)
|
||||
load(YAML.load_file(file)[env || "development"])
|
||||
end
|
||||
|
||||
def load_yaml(data, env = nil)
|
||||
load(YAML.load(data)[env || "development"])
|
||||
end
|
||||
|
||||
def load(conf)
|
||||
if conf.is_a?(Array)
|
||||
load_array(conf)
|
||||
elsif conf.is_a?(Hash)
|
||||
load_hash(conf)
|
||||
end
|
||||
end
|
||||
|
||||
def load_array(confs = [])
|
||||
self.clear
|
||||
refs = {}
|
||||
confs.each do |conf|
|
||||
conf = AMQP::Client.parse_amqp_url(conf) if conf.is_a?(String)
|
||||
load_hash(conf)
|
||||
end
|
||||
end
|
||||
|
||||
def load_hash(conf = {})
|
||||
set(conf)
|
||||
end
|
||||
|
||||
end # Config
|
||||
end # Failover
|
||||
end # AMQP
|
||||
Reference in New Issue
Block a user