メタプログラミングruby( http://amzn.asia/d/72OuM6q )の古本が安かったので買ってみたらむっちゃおもしろかたのでとりあえず初歩の初歩をやってみた。
- 文字列自身が変化する
- そのための定義はjsonから読み込んでいつでも入れ替えられる
みたいなことを想定しています。
class String
def up_or_low(type)
case type
when 'upper'
upcase!
when 'lower'
downcase!
end
end
def substitution(params)
gsub! params['target'], params['replace']
end
def head_chars(length)
slice!(length, (self.length - length))
end
def if_then_else(params)
if self == params['case']
replace(params['then'])
else
replace(params['else'])
end
end
end
require 'json'
data = '{
"rules" :
[
{
"if_then_else":
{
"case" : "input",
"then" : "output",
"else" : "xxxxxx"
}
},
{
"up_or_low": "upper"
},
{
"substitution":
{
"target" : "T",
"replace" : "@"
}
},
{
"head_chars": 2
},
{
"up_or_low": "lower"
}
]
}'.to_json
transform = JSON.parse(JSON.load(data))
input_text = ['input', 'next']
input_text.each do |record|
transform['rules'].each do |rule|
# p rule
record.send(rule.keys[0], rule.values[0])
p ts
end
p '=============='
end
実行結果
"output"
"OUTPUT"
"OU@PU@"
"OU"
"ou"
"=============="
"xxxxxx"
"XXXXXX"
"XXXXXX"
"XX"
"xx"
"=============="