polyglotって?
なんとなく Rails3を勉強してみようかな、とインストール後、ふと目に入った polyglotが気になる*1。
英語の意味としては多国語(を解する人、で書かれた文)的な意味なんだけど、これなに?
customez require
と調べてみると、requireを拡張して、ファイルの拡張子に応じた動作をカスタマイズできるライブラリらしい。
ローダを作る
例えば .helloファイルをrequireするときは
helloloader.rb
require 'polyglot' class HelloLoader def self.load(filename, options = nil, &block) File.open(filename).readlines.to_a.each { |line| line.rstrip! puts "Hello to the #{line}!!" } end end Polyglot.register("hello", HelloLoader)
こんなのも作ってみる。
yamlloader.rb
require 'polyglot' require 'yaml' class YamlLoader def self.load(filename, options = nil, &block) $CONFIG = YAML.load(File.open(filename).read) end end Polyglot.register("yaml", YamlLoader)
作ったローダを使ってみる
で、
main.rb -
# load polygloter require 'helloloader' require 'yamlloader' # do it require 'greeting' require 'config' # display result of YAMLloader puts $CONFIG # finished! puts "finished!!"
あとは .helloファイルと yamlファイルを作って
greeting.hello
neighbors country world galaxy universe
config.yaml
person: - {name: "Smith", age: 24} - {name: "Kim", age: 21} - {name: "Mike", age: 12} - {name: "Horland", age: 11}
sawshark% ruby -I. main.rb Hello to the neighbors!! Hello to the country!! Hello to the world!! Hello to the galaxy!! Hello to the universe!! {"person"=>[{"name"=>"Smith", "age"=>24}, {"name"=>"Kim", "age"=>21}, {"name"=>"Mike", "age"=>12}, {"name"=>"Horland", "age"=>11}]} finished!!
ふむ。
どこで使ってんだろう
かと思って調べてみたら、actionmailer -> mail -> treetopだった。なるほど
結論
で、treetopって何(ループ)*2