class HrrRbNetconf::Server::Capabilities
Public Class Methods
new(features=nil, capabilities_h=nil, logger: nil)
click to toggle source
# File lib/hrr_rb_netconf/server/capabilities.rb, line 13 def initialize features=nil, capabilities_h=nil, logger: nil self.logger = logger @features = features unless capabilities_h @caps = Capability.list.inject({}){ |a, b| a.merge({b => Capability[b].new(logger: logger)}) } else @caps = capabilities_h end end
Public Instance Methods
each_loadable() { |filtered_by_dependencies| ... }
click to toggle source
# File lib/hrr_rb_netconf/server/capabilities.rb, line 60 def each_loadable filtered_by_features = @caps.select{ |k, v| if @features.nil? then true else (v.if_features - @features).empty? end } @filtered_by_dependencies = filtered_by_features.select{ |k, v| v.dependencies.all?{ |d| filtered_by_features.has_key? d } } tsort.each do|k| yield @filtered_by_dependencies[k] end end
list_all()
click to toggle source
# File lib/hrr_rb_netconf/server/capabilities.rb, line 46 def list_all @caps.keys end
list_loadable()
click to toggle source
# File lib/hrr_rb_netconf/server/capabilities.rb, line 54 def list_loadable filtered_by_features = @caps.select{ |k, v| if @features.nil? then true else (v.if_features - @features).empty? end } @filtered_by_dependencies = filtered_by_features.select{ |k, v| v.dependencies.all?{ |d| filtered_by_features.has_key? d } } tsort.map{ |k| @filtered_by_dependencies[k].id } end
list_supported()
click to toggle source
# File lib/hrr_rb_netconf/server/capabilities.rb, line 50 def list_supported @caps.select{ |k, v| if @features.nil? then true else (v.if_features - @features).empty? end }.map{ |k, v| v.id } end
negotiate(remote_capabilities)
click to toggle source
# File lib/hrr_rb_netconf/server/capabilities.rb, line 23 def negotiate remote_capabilities filtered_by_features = @caps.select{ |k, v| if @features.nil? then true else (v.if_features - @features).empty? end } capabilities_h = filtered_by_features.values.group_by{ |c| c.keyword }.map{ |k, cs| cs.map{ |c| remote_capabilities.lazy.map{ |rc| c.negotiate rc }.select{ |nc| nc }.first }.compact.max }.compact.inject({}){ |a, c| a.merge({c.uri => c}) } features = if @features.nil? then nil else @features.dup end Capabilities.new features, capabilities_h, logger: logger end
register_capability(name, &blk)
click to toggle source
# File lib/hrr_rb_netconf/server/capabilities.rb, line 36 def register_capability name, &blk cap = Capability.new name, logger: logger blk.call cap @caps[name] = cap end
tsort_each_child(node, &blk)
click to toggle source
# File lib/hrr_rb_netconf/server/capabilities.rb, line 74 def tsort_each_child node, &blk @filtered_by_dependencies[node].dependencies.each(&blk) end
tsort_each_node(&blk)
click to toggle source
# File lib/hrr_rb_netconf/server/capabilities.rb, line 70 def tsort_each_node &blk @filtered_by_dependencies.each_key(&blk) end
unregister_capability(name)
click to toggle source
# File lib/hrr_rb_netconf/server/capabilities.rb, line 42 def unregister_capability name @caps.delete name end