class HrrRbNetconf::Server::Capability
Attributes
dependencies[RW]
if_features[RW]
queries[RW]
Public Class Methods
[](key)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 19 def [] key __subclass_list__(__method__).find{ |klass| klass::ID == key } end
inherited(klass)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 15 def inherited klass @subclass_list.push klass if @subclass_list end
list()
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 23 def list __subclass_list__(__method__).map{ |klass| klass::ID } end
new(id=nil, logger: nil)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 37 def initialize id=nil, logger: nil self.logger = logger @id = id || self.class::ID @queries = (self.class::QUERIES rescue {}) @if_features = (self.class::IF_FEATURES rescue []) @dependencies = (self.class::DEPENDENCIES rescue []) @uri_proc = Proc.new { |id| id.split('?').first } @keyword_proc = Proc.new { |id| id.split('?').first.match(/^((?:.+(?:\/|:))+.+)(?:\/|:)(.+)$/)[1] } @version_proc = Proc.new { |id| id.split('?').first.match(/^((?:.+(?:\/|:))+.+)(?:\/|:)(.+)$/)[2] } @decode_queries_proc = Proc.new { |qs_s| URI.decode_www_form(qs_s).inject({}){|a,(k,v)| a.merge({k=>(v.split(','))})} } @encode_queries_proc = Proc.new { |qs_h| URI.encode_www_form(qs_h.map{|k,v| [k, v.join(',')]}) } define_capability end
Private Class Methods
__subclass_list__(method_name)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 27 def __subclass_list__ method_name send(:method_missing, method_name) unless @subclass_list @subclass_list end
Public Instance Methods
<=>(other)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 171 def <=> other unless keyword == other.keyword nil else version <=> other.version end end
decode_queries_proc(&blk)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 120 def decode_queries_proc &blk if blk @decode_queries_proc = blk else raise ArgumentError, "block not given" end end
define_capability()
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 51 def define_capability # to be overridden end
encode_queries_proc(&blk)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 128 def encode_queries_proc &blk if blk @encode_queries_proc = blk else raise ArgumentError, "block not given" end end
id()
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 76 def id if @queries.empty? @id else [@id, @encode_queries_proc.call(@queries)].join('?') end end
keyword()
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 88 def keyword @keyword_proc.call id end
keyword_proc(&blk)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 104 def keyword_proc &blk if blk @keyword_proc = blk else raise ArgumentError, "block not given" end end
models()
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 67 def models @models || [] end
negotiate(other_id)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 136 def negotiate other_id other_keyword = @keyword_proc.call(other_id) unless keyword == other_keyword nil else other_version = @version_proc.call(other_id) case version <=> other_version when 0 c = self.dup c.queries = negotiate_queries(other_id) c else nil end end end
negotiate_queries(other_id)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 153 def negotiate_queries other_id other_queries = @decode_queries_proc.call((other_id.split('?') + [''])[1]) queries.inject({}){ |a, (k, v)| if other_queries.has_key?(k) values = v & other_queries[k] if values.empty? a else a.merge({k => values}) end else a end } end
oper_procs()
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 55 def oper_procs @oper_procs || {} end
uri()
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 84 def uri @uri_proc.call id end
uri_proc(&blk)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 96 def uri_proc &blk if blk @uri_proc = blk else raise ArgumentError, "block not given" end end
version()
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 92 def version @version_proc.call id end
version_proc(&blk)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 112 def version_proc &blk if blk @version_proc = blk else raise ArgumentError, "block not given" end end
Private Instance Methods
model(oper_name, path, stmt=nil, attrs={})
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 71 def model oper_name, path, stmt=nil, attrs={} @models ||= Array.new @models.push [oper_name, path, stmt, attrs] end
oper_proc(oper_name, &blk)
click to toggle source
# File lib/hrr_rb_netconf/server/capability.rb, line 59 def oper_proc oper_name, &blk @oper_procs ||= Hash.new if blk @oper_procs[oper_name] = blk end @oper_procs[oper_name] end