class SdlImplModule
Attributes
class_name[R]
info[R]
key_name[R]
nickname[R]
path[R]
pins_map[R]
real_require[R]
Public Class Methods
implement(modules,tbs)
click to toggle source
——— implement top ——————
# File lib/tdl/sdlimplement/sdl_impl_module.rb, line 171 def self.implement(modules,tbs) ma = [] modules.each do |m| ma << self.modules_hash(m) ma << m.dependent.flatten end ma = ma.uniq end
inspect_dependent(level_len,dep_array)
click to toggle source
# File lib/tdl/sdlimplement/sdl_impl_module.rb, line 153 def self.inspect_dependent(level_len,dep_array) str = "" dep_array.each do |e_array| str += " "*level_len + (e_array[0].key_name).to_s + ":\n" str += " "*level_len + (e_array[0].key_name).to_s + ":\n" if e_array[1].any? str += self.inspect_dependent(level_len+4,e_array[1]) else str.chop! str += " ~\n" end end str end
inspect_dependent_verb(level_len,dep_array)
click to toggle source
# File lib/tdl/sdlimplement/sdl_impl_module.rb, line 139 def self.inspect_dependent_verb(level_len,dep_array) str = "" dep_array.each do |e_array| str += " "*level_len + (e_array[0].key_name).to_s + " -> \n" if e_array[1].any? str += self.inspect_dependent_verb(level_len+((e_array[0].key_name).to_s.length)+4,e_array[1]) else str.chop! str += "[]\n" end end str end
modules_hash(module_origin_str)
click to toggle source
# File lib/tdl/sdlimplement/sdl_impl_module.rb, line 128 def self.modules_hash(module_origin_str) if @@_impl_ms_.keys.include? module_origin_str @@_impl_ms_[module_origin_str] elsif @@_impl_ms_.keys.map { |e| e.sub(/\(\w*\)/,"" ) }.include?(module_origin_str) || @@_impl_ms_.keys.map { |e| e.sub(/\(\w*\)/,"" ) }.include?(module_origin_str.sub(/\(\s*\)/,"")) @@_impl_ms_[ @@_impl_ms_.keys.select { |e| e.include? module_origin_str }[0] ] else # puts module_origin_str return nil end end
new(key_name,hash)
click to toggle source
# File lib/tdl/sdlimplement/sdl_impl_module.rb, line 5 def initialize(key_name,hash) # @class_name = class_name @key_name = key_name parse_name(key_name) @info = hash['info'] @path = hash['path'] @pins_map = hash['pins_map'].to_sym if hash['pins_map'] @req_modules = hash['require'] || {} @mutual_moduls = hash['matual'] || {} %w{ info path pins_map require matual}.each {|e| hash.delete(e) } gen_other_attr(hash) @@_impl_ms_[key_name] = self @real_require = {} end
Public Instance Methods
common_argvs()
click to toggle source
# File lib/tdl/sdlimplement/sdl_impl_module.rb, line 22 def common_argvs [:nickname,:pins_map] end
dependent(sure:false,pool:[])
click to toggle source
def self.impl_ms_keys_cont(key)
if @@_impl_ms_.keys.include? key return key elsif @@_impl_ms_.keys.map { |e| e.sub(/\(\w*\)/,"" ) }.include? key return @@_impl_ms_.keys.select { |e| e.include? key }[0] else return false end
end
# File lib/tdl/sdlimplement/sdl_impl_module.rb, line 78 def dependent(sure:false,pool:[]) dep_array = [] @req_modules.each do |k,v| unless v.is_a? Array ov = SdlImplModule.modules_hash(v) if ov # dep_array << ov dep_array << [ov,ov.dependent(sure:sure,pool:pool)] else raise TdlError.new("Module[#{@class_name}] depend on [#{v}] but [#{v}] dont exist !!!!") end @real_require[k] = ov unless @real_require.include? ov else # dep_array << v next if sure if pool.empty? mutual_hash = {} v.each_index do |index| mutual_hash["k##{index}"] = v[index] end ov = SdlImplModule.new("#mutual#",{'require' => mutual_hash }) dep_array << [ov,ov.dependent(sure:sure,pool:pool)] else in_pool = false v.each do |vv| ov = SdlImplModule.modules_hash(vv) if pool.include? ov dep_array << [ov,ov.dependent(sure:sure,pool:pool)] in_pool = true break end end unless in_pool ov = SdlImplModule.modules_hash(v[0]) dep_array << [ov,ov.dependent(sure:sure,pool:pool)] end @real_require[k] = ov unless @real_require.include? ov end end end # raise TdlError.new("SdlImplModule[#{key_name}] cant dependent itself !!!") if dep_array.flatten.include? self return dep_array end
gen_other_attr(hash)
click to toggle source
# File lib/tdl/sdlimplement/sdl_impl_module.rb, line 26 def gen_other_attr(hash) obj = Object.new define_singleton_method("other") do obj end keys = hash.keys obj.define_singleton_method("keys") do keys end hash.each do |k,v| obj.define_singleton_method(k) do v end end end
parse_name(key_name)
click to toggle source
# File lib/tdl/sdlimplement/sdl_impl_module.rb, line 45 def parse_name(key_name) rep0 = /(?<class>\w+)/ rep1 = /(?<class>\w+)\(\s*\)/ rep2 = /(?<class>\w+)\((?<nickname>\w+)\)/ if rep2.match key_name @class_name = $~[:class] @nickname = $~[:nickname] elsif rep1.match key_name @class_name = $~[:class] @nickname = nil elsif rep0.match key_name @class_name = $~[:class] @nickname = nil else raise TdlError.new("SdlImplModule KEY_NAME PARSE ERROR [#{key_name.to_s}]") end end