13. もっとも重要な部分
class CascadingProperties::Node < CascadingProperties::BlankSlate
def method_missing(name, *args, &block)
name = name.to_s
case args.length
when 0 then
@_hash[name] ||= CascadingProperties::Node.new(&block)
when 1 then
@_hash[name] = args.first
else
@_hash[name] = args
end
end
end
引数の数やブロックの有無で振る舞いが異なる
12年4月5日木曜日
14. java.util.Propetiesへの出力
class CascadingProperties::Node < CascadingProperties::BlankSlate
def to_properties(dest = nil, parent = nil)
dest ||= java.util.Properties.new
@_hash.each do |k, v|
key = parent ? "#{parent}.#{k}" : k
if v.respond_to?(:to_properties)
v.to_properties(dest, key)
else
dest.setProperty(key, v.to_s)
end
end
dest
end
end
12年4月5日木曜日
15. java.util.Propetiesへの出力
def to_properties(dest = nil, parent = nil)
dest ||= java.util.Properties.new
@_hash.each do |k, v|
引数destはデフォル
key = parent ? "#{parent}.#{k}" : k
if v.respond_to?(:to_properties) トではnil。jruby上で
v.to_properties(dest, key)
else 動く場合ならdestは
dest.setProperty(key, v.to_s)
end java.util.Propertiesを
end 生成する
dest
end
12年4月5日木曜日
16. java.util.Propetiesへの出力
def to_properties(dest = nil, parent = nil)
dest ||= java.util.Properties.new
@_hash.each do |k, v|
key = parent ? "#{parent}.#{k}" : k 値がto_properties可能
if v.respond_to?(:to_properties)
v.to_properties(dest, key) ならそれを呼び出した
else
dest.setProperty(key, v.to_s) 結果を、そうでないの
end
end
なら値を文字列とし
dest て 、destに
end
setPropertyする
12年4月5日木曜日
17. java.util.Propetiesも拡張できる
require 'java'
require 'cascading_properties'
java.util.Properties.instance_eval do
def load_dsl(dsl_text)
node =
CascadingProperties.load(dsl_text)
node.to_properties
end
end
12年4月5日木曜日