diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-04-05 06:25:43 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-04-05 06:25:43 +0000 |
commit | befa6dade6158a86be88c7580a6259059e20fb25 (patch) | |
tree | da8b451d72196c63a0409dcbab4fe4f6db2dbcbd /mahoro.c | |
parent | f5774348b6fe5bb7e86717629fdb8c4d8c30731f (diff) | |
download | mahoro-befa6dade6158a86be88c7580a6259059e20fb25.tar.gz |
Mahoro#file supports objects with #to_path support
Pathname (and some other classes) are implemented this way and Ruby 1.9+ respects #to_path on all File.open calls.
Diffstat (limited to 'mahoro.c')
-rw-r--r-- | mahoro.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -18,6 +18,7 @@ static VALUE cMahoro; static VALUE eMahoroError; +static ID id_to_path; struct nogvl_args { magic_t cookie; @@ -178,6 +179,11 @@ mahoro_file(self, path) struct nogvl_args args; args.cookie = (magic_t)DATA_PTR(self); + + /* Pathname objects may be transformed via #to_path */ + if (rb_respond_to(path, id_to_path)) + path = rb_funcall(path, id_to_path, 0); + args.as.path = StringValueCStr(path); if(!(msg = NOGVL(nogvl_file, &args, RUBY_UBF_IO, NULL))) { @@ -598,6 +604,7 @@ void Init_mahoro(void) rb_define_singleton_method(cMahoro, "compile", mahoro_s_compile, 1); rb_define_method(cMahoro, "compile", mahoro_compile, 1); rb_define_method(cMahoro, "load", mahoro_load, 1); + id_to_path = rb_intern("to_path"); } /* arch-tag: mahoro */ |