Module: PluginModule
- Included in:
- Cell, Celltype, CompositeCelltype, DomainType, Generate, Join, Signature
- Defined in:
- lib/tecsgen/core/pluginModule.rb
Overview
プラグインをロードする側のモジュール
- @@loaded_plugin_list
-
Symbol=>Integer
Constant Summary collapse
- @@loaded_plugin_list =
{}
Class Method Summary collapse
-
.gen_plugin_post_code(file) ⇒ Object
プラグインが CDL の POST コードを生成 tmp_plugin_post_code.cdl への出力.
Instance Method Summary collapse
-
#generate_and_parse(plugin_object) ⇒ Object
プラグインの gen_cdl_file を呼びして cdl ファイルを生成させ、解釈を行う.
-
#load_plugin(plugin_name, superClass) ⇒ Object
プラグインをロードする return:: PluginClass V1.4.1 まで return:: true : 成功、 false : 失敗.
Class Method Details
.gen_plugin_post_code(file) ⇒ Object
プラグインが CDL の POST コードを生成
tmp_plugin_post_code.cdl への出力
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/tecsgen/core/pluginModule.rb', line 144 def self.gen_plugin_post_code(file) dbgPrint "PluginModule #{@@loaded_plugin_list}\n" @@loaded_plugin_list.each{|plugin_name, count| if count == :MultiPlugin next end dbgPrint "PluginModule: #{plugin_name}\n" eval_str = "#{plugin_name}.gen_post_code( file )" if $verbose print "gen_plugin_post_code: #{eval_str}\n" end begin eval(eval_str) rescue Exception => evar Generator.error("P2007 $1: fail to generate post code", plugin_name) print_exception(evar) end } end |
Instance Method Details
#generate_and_parse(plugin_object) ⇒ Object
プラグインの gen_cdl_file を呼びして cdl ファイルを生成させ、解釈を行う
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/tecsgen/core/pluginModule.rb', line 98 def generate_and_parse(plugin_object) if plugin_object.nil? # プラグインのロードに失敗している(既にエラー) return end plugin_name = plugin_object.class.name.to_sym if @@loaded_plugin_list[plugin_name] == :MultiPlugin p "#{plugin_name}: MultiPlugin" return elsif @@loaded_plugin_list[plugin_name].nil? # raise "#{plugin_name} might have different name " ## プラグインのファイル名と、プラグインのクラス名が相違する場合 # MultiPlugin の get_plugin で返されたケースでは nil になっている @@loaded_plugin_list[plugin_name] = 0 end count = @@loaded_plugin_list[plugin_name] @@loaded_plugin_list[plugin_name] += 1 tmp_file_name = "#{$gen}/tmp_#{plugin_name}_#{count}.cdl" begin tmp_file = CFile.open(tmp_file_name, "w") rescue Exception => evar cdl_error("P2004 $1: open error \'$2\'", plugin_name, tmp_file_name) print_exception(evar) end dbgPrint "generate_and_parse: #{plugin_object.class}: gen_cdl_file\n" begin plugin_object.gen_cdl_file(tmp_file) rescue Exception => evar cdl_error("P2005 $1: plugin error in gen_through_cell_code ", plugin_name) print_exception(evar) end begin tmp_file.close rescue Exception => evar cdl_error("P2006 $1: close error \'$2\'", plugin_name, tmp_file_name) print_exception(evar) end generator = Generator.new generator.set_plugin(plugin_object) generator.parse([tmp_file_name]) generator.finalize end |
#load_plugin(plugin_name, superClass) ⇒ Object
プラグインをロードする
- return
-
PluginClass
- V1.4.1 まで return
-
true : 成功、 false : 失敗
#plugin_name.rb をロードし、plugin_name クラスのオブジェクトを生成する. plugin_name が MultiPlugin の場合、get_plugin により、superClass のプラグインオブジェクトをロードする.
すでにロードされているものは、重複してロードしない load 時の例外はこのメソッドの中でキャッチされて false が返される
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/tecsgen/core/pluginModule.rb', line 54 def load_plugin(plugin_name, superClass) dbgPrint "PluginModule: load_plugin: #{plugin_name}\n" begin unless @@loaded_plugin_list[plugin_name.to_sym] @@loaded_plugin_list[plugin_name.to_sym] = 0 if $verbose print("load '#{plugin_name}.rb'\n") end # "#{plugin_name}.rb" をロード(システム用ではないので、fatal エラーにしない) if require_tecsgen_lib("#{plugin_name}.rb", false) == false cdl_error("P2001 $1.rb : fail to load plugin", plugin_name) return nil end end plClass = Object.const_get plugin_name if plClass <= superClass # plClass inherits superClass return plClass elsif plClass <= MultiPlugin # plClass inherits MultiPlugin dbgPrint "pluginClass=#{plClass}\n" plugin_object = plClass.get_plugin superClass dbgPrint "pluginClass=#{plugin_object}\n" if plugin_object.nil? cdl_error("P9999 '$1': MultiPlugin not support '$2'", plugin_name, superClass.name) end @@loaded_plugin_list[plugin_name.to_sym] = :MultiPlugin return plugin_object else cdl_error("P2002 $1: not kind of $2", plugin_name, superClass.name) return nil end rescue Exception => evar if $debug p evar.class pp evar.backtrace end cdl_error("P2003 $1: load failed", plugin_name) return nil end # ここへは来ない return nil end |