class Vines::Config::Host
Provides the DSL methods for the virtual host definitions in the conf/config.rb file. Host
instances can be accessed at runtime through the +Config#vhosts+ method.
Attributes
pubsubs[R]
Public Class Methods
new(config, name, &block)
click to toggle source
# File lib/vines/config/host.rb, line 12 def initialize(config, name, &block) @config, @name = config, name.downcase @storage, @ldap = nil, nil @cross_domain_messages = false @private_storage = false @components, @pubsubs = {}, {} validate_domain(@name) instance_eval(&block) raise "storage required for #{@name}" unless @storage end
Public Instance Methods
component?(domain)
click to toggle source
# File lib/vines/config/host.rb, line 63 def component?(domain) !!@components[domain.to_s] end
components(options=nil)
click to toggle source
# File lib/vines/config/host.rb, line 46 def components(options=nil) return @components unless options names = options.keys.map {|domain| "#{domain}.#{@name}".downcase } raise "duplicate component domains not allowed" if dupes?(names, @components.keys) raise "pubsub domains overlap component domains" if dupes?(names, @pubsubs.keys) options.each do |domain, password| raise 'component domain required' if (domain || '').to_s.strip.empty? raise 'component password required' if (password || '').strip.empty? name = "#{domain}.#{@name}".downcase raise "components must be one level below their host: #{name}" if domain.to_s.include?('.') validate_domain(name) @components[name] = password end end
cross_domain_messages(enabled)
click to toggle source
# File lib/vines/config/host.rb, line 38 def cross_domain_messages(enabled) @cross_domain_messages = !!enabled end
cross_domain_messages?()
click to toggle source
# File lib/vines/config/host.rb, line 42 def cross_domain_messages? @cross_domain_messages end
disco_items()
click to toggle source
# File lib/vines/config/host.rb, line 99 def disco_items [@components.keys, @pubsubs.keys].flatten.sort end
ldap(host='localhost', port=636, &block)
click to toggle source
# File lib/vines/config/host.rb, line 33 def ldap(host='localhost', port=636, &block) @ldap = Storage::Ldap.new(host, port, &block) @storage.ldap = @ldap if @storage end
password(domain)
click to toggle source
# File lib/vines/config/host.rb, line 67 def password(domain) @components[domain.to_s] end
private_storage(enabled)
click to toggle source
# File lib/vines/config/host.rb, line 103 def private_storage(enabled) @private_storage = !!enabled end
private_storage?()
click to toggle source
# File lib/vines/config/host.rb, line 107 def private_storage? @private_storage end
pubsub(*domains)
click to toggle source
# File lib/vines/config/host.rb, line 71 def pubsub(*domains) domains.flatten! raise 'define at least one pubsub domain' if domains.empty? names = domains.map {|domain| "#{domain}.#{@name}".downcase } raise "duplicate pubsub domains not allowed" if dupes?(names, @pubsubs.keys) raise "pubsub domains overlap component domains" if dupes?(names, @components.keys) domains.each do |domain| raise 'pubsub domain required' if (domain || '').to_s.strip.empty? name = "#{domain}.#{@name}".downcase raise "pubsub domains must be one level below their host: #{name}" if domain.to_s.include?('.') validate_domain(name) @pubsubs[name] = PubSub.new(@config, name) end end
pubsub?(domain)
click to toggle source
# File lib/vines/config/host.rb, line 86 def pubsub?(domain) @pubsubs.key?(domain.to_s) end
storage(name=nil, &block)
click to toggle source
# File lib/vines/config/host.rb, line 23 def storage(name=nil, &block) if name raise "one storage mechanism per host allowed" if @storage @storage = Storage.from_name(name, &block) @storage.ldap = @ldap else @storage end end
unsubscribe_pubsub(jid)
click to toggle source
Unsubscribe this JID
from all pubsub topics hosted at this virtual host. This should be called when the user's session ends via logout or disconnect.
# File lib/vines/config/host.rb, line 93 def unsubscribe_pubsub(jid) @pubsubs.values.each do |pubsub| pubsub.unsubscribe_all(jid) end end
Private Instance Methods
dupes?(a, b)
click to toggle source
Return true if the arrays contain any duplicate items.
# File lib/vines/config/host.rb, line 114 def dupes?(a, b) a.uniq.size != a.size || b.uniq.size != b.size || (a & b).any? end
validate_domain(name)
click to toggle source
Prevent domains in config files that won't form valid JIDs.
# File lib/vines/config/host.rb, line 119 def validate_domain(name) jid = JID.new(name) raise "incorrect domain: #{name}" if jid.node || jid.resource end