S2Ruby(仮)
なんとなく、動き出した。
たとえば、
class Hoge attr_accessor :msg, :num, :num2 def initialize(str="init", num=100, num2=200) @msg = str @num = num @num2 = num2 end def setParams(str="setParams", num=100, num2=200) @msg = str @num = num @num2 = num2 end def do puts "I am Hoge!!" p @msg p @num p @num2 end end
という、コンポーネントがあったとして、
以下のようなdiconファイルを書くと
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" "http://www.seasar.org/dtd/components.dtd"> <components> <include path="src/services/sample.dicon"/> </components>
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" "http://www.seasar.org/dtd/components.dtd"> <components> <component name="hoge" class="Hoge"> <arg>"Hello World!"</arg> <arg>99</arg> <arg>0.99</arg> </component> <component name="hoge2" class="Hoge"> <property name="msg">"Hello World!(hoge2)"</property> <property name="num">999</property> <property name="num2">0.999</property> </component> <component name="hoge3" class="Hoge"> <initMethod name="setParams"> <arg>"Hello World!(hoge3)"</arg> <arg>9999</arg> <arg>0.9999</arg> </initMethod> </component> </components>
以下のようなクライエントが動く。
$KCODE = "SJIS" #-------------------------------------------------------- require 'log4r' require 'log4r/configurator' include Log4r Configurator.load_xml_file('log4r.xml') $logger = Logger["test"] #-------------------------------------------------------- require 's2ruby' include S2Ruby $LOAD_PATH.push("./src/services") #-------------------------------------------------------- container = S2ContainerFactory::create("app.dicon"); service = container["hoge"] service.do service = container["hoge2"] service.do service = container["hoge3"] service.do
実行結果は以下
INFO test: include タグを見つけました。 INFO test: component タグを見つけました。 INFO test: コンポーネント参照名 = "hoge" INFO test: クラス名 ="Hoge" INFO test: コンストラクタで初期化します。 WARN test: クラス「Hoge」が見つかりません、同名ライブラリファイルのロードを試みます。 INFO test: component タグを見つけました。 INFO test: コンポーネント参照名 = "hoge2" INFO test: クラス名 ="Hoge" INFO test: セッターで初期化します。 INFO test: component タグを見つけました。 INFO test: コンポーネント参照名 = "hoge3" INFO test: クラス名 ="Hoge" INFO test: メソッドで初期化します。 I am Hoge!! "Hello World!" 99 0.99 I am Hoge!! "Hello World!(hoge2)" 999 0.999 I am Hoge!! "Hello World!(hoge3)" 9999 0.9999
今後はこんな予定。
- $LOAD_PATH の自動設定
- テストケース作成(^^;)
- クラス構成を考える
- SAX2パーサ化
- 名前を決める(募集中!)