YAMLに~/とか~USER/とか書けるようにするパッチ

YAMLのassets_pathとかplugin_pathとかincludeにはパスを書くわけなんですが、~とか~USERの展開をしてくれないみたい。

展開してくれないと何が不便か?

ひとつの環境で使ってるぶんにはいいんだけど、こんなとき

  • 環境間でユーザ名が違う(自宅のマシンと会社のマシンとか)
  • 環境間でホームディレクトリのパスが違う(LinuxとMac OS Xとか)

に、YAMLを使い回すのがめんどい。パスを書き換えないといけないので。

あと、

  • 例示用のYAMLに自分のホームディレクトリのパスを書くのはなんとなく気持ちが悪い

というのもあるかも。

というわけで、「~/etc」や「~hirose31/etc」を「/home/hirose31/etc」に展開してくれる(かなり強引な)パッチをこさえてみた。

--- Plagger/ConfigLoader.pm.orig        2006-08-22 12:55:49.000000000 +0900
+++ Plagger/ConfigLoader.pm     2006-08-31 01:30:42.000000000 +0900
@@ -2,6 +2,8 @@
 use strict;
 use Carp;
 use Plagger::Walker;
+use File::HomeDir;
+use Data::Dumper;

 sub new {
     my $class = shift;
@@ -27,6 +29,10 @@
         Plagger::Walker->decode_utf8($config);
     }

+    my $config_dumped = Data::Dumper->new([$config],[qw(config)])->Indent(0)->Quotekeys(1)->Dump;
+    $config_dumped =~ s{'~([^/]+)?}{"'".File::HomeDir->home($1||())}ge;
+    eval $config_dumped;
+
     return $config;
 }