class WoolenCommon::VerCtrlMiddleWare
根据某个目录下的源程序,生成中间件调用队列
Attributes
ver_match_hash[RW]
Public Class Methods
new(class_file_dir,&ver_ctrl_block)
click to toggle source
# File lib/woolen_common/ver_ctrl_middle_ware.rb, line 9 def initialize(class_file_dir,&ver_ctrl_block) debug "init the AbstractMiddleWare with class dir ::#{class_file_dir}" @ver_match_hash = {} if File.directory? class_file_dir @class_dir = Dir.new(class_file_dir) else fatal "目录:#{class_file_dir}不存在,无法从中加载相关中间件代码" end @class_dir.each do |one_file| file_str = File.join(File.realdirpath(@class_dir),one_file) if File.directory? file_str trace "file_str :#{file_str} 是个目录" next end # 只加载ruby源程序 if File.extname(file_str) == '.rb' || File.extname(file_str) == '.ruby' base_file_name = File.basename(file_str,(File.extname(file_str))) class_name = base_file_name.split('_').map!{|k| k.capitalize}.join '' trace "加载文件:#{file_str},获得的类名是:#{class_name}" File.open(file_str,'r') do |file| self.instance_eval file.read,file_str end #self.instance_eval "load '#{file_str}',true;" k_class = self.instance_eval class_name if block_given? int_ver = ver_ctrl_block.call k_class::VERSION else int_ver = k_class::VERSION.to_i end trace "file:#{file_str},version:#{k_class::VERSION},int_version:#{int_ver}" if @ver_match_hash[int_ver] warn "int_version :#{int_ver} 已经有类了:#{@ver_match_hash[int_ver]},略过当前类的加入:#{k_class}" next else @ver_match_hash[int_ver] = k_class end else warn "目录:#{@class_dir.to_s}下的文件:#{file_str}不是ruby代码" end end trace "获取到的hash sort后是:#{@ver_match_hash.sort}" end
Public Instance Methods
add_ver_class(int_ver,k_class,force=false)
click to toggle source
# File lib/woolen_common/ver_ctrl_middle_ware.rb, line 52 def add_ver_class(int_ver,k_class,force=false) if int_ver.is_a? Integer if @ver_match_hash[int_ver] warn "尝试添加一个ver:#{int_ver}已经存在的k_clas:#{@ver_match_hash[int_ver]},尝试添加的class:#{k_class}" if force info "需要强制添加类:#{k_class}" @ver_match_hash[int_ver] = k_class end else @ver_match_hash[int_ver] = k_class end else warn "ver 不是integen:#{int_ver},要添加的class:#{k_class}" end end
call(*args,&block)
click to toggle source
# File lib/woolen_common/ver_ctrl_middle_ware.rb, line 81 def call(*args,&block) middle_ware_stack = Middleware::Builder.new sort_middle_ware_array = @ver_match_hash.sort sort_middle_ware_array.reverse.each do |int_ver,k_class| trace "添加ver:#{int_ver} 的class:#{k_class}" middle_ware_stack.use k_class,*args,&block end middle_ware_stack.call binding end
del_ver_class_by_ver(int_ver)
click to toggle source
# File lib/woolen_common/ver_ctrl_middle_ware.rb, line 68 def del_ver_class_by_ver(int_ver) if int_ver.is_a? Integer if @ver_match_hash[int_ver] debug "删除一个ver:#{int_ver}" @ver_match_hash.delete int_ver else debug "ver :#{int_ver} 不存在" end else warn "ver不是integen:#{int_ver}" end end