------ art_45968_22548176.1220210787373 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello, here's my solution for this quiz. I have never put together a piece of metaprogramming that I would use with confidence until this quiz ;-) On 29/08/2008, Matthew Moss <matthew.moss / gmail.com> wrote: > What I would like is a script that works like `which` but for Ruby > modules. Examples: > > > ruby modwhich.rb "sys/uptime" > require 'sys/uptime' > /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin8.11.1/sys/uptime.bundle This should work although the solution is not tested on a Mac. > > > ruby modwhich.rb date > require 'date' /opt/local/lib/ruby/1.8/date.rb This works. > > For extra credit, preserve this behavior when modwhich.rb is the main > program, but slightly different behavior is modwhich.rb is required by > another script: > > > ruby -r modwhich upsince.rb > > require 'sys/uptime' > /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin8.11.1/sys/uptime.bundle > require 'date' /opt/local/lib/ruby/1.8/date.rb > Last reboot: 2008 Aug 22 at 18:49 This should also work within reason - modules loaded from files located in rubylibdir are not printed. Thanks Michal ------ art_45968_22548176.1220210787373 Content-Type: application/x-ruby; name=q175.rb Content-Transfer-Encoding: base64 X-Attachment-Id: f_fkk1wxtu Content-Disposition: attachment; filename=q175.rb dW5sZXNzIEtlcm5lbC5jb25zdGFudHMuaW5jbHVkZT8gIlExNzUiCgpyZXF1aXJlICdyYmNvbmZp ZycKCm1vZHVsZSBLZXJuZWwKCiAgbW9kdWxlIFExNzUKCiAgICBkZWYgc2VsZi5nZXRfZXh0cwog ICAgICBleHRzID0gWyJyYiIsIENvbmZpZzo6Q09ORklHWyJETEVYVCJdLCBDb25maWc6OkNPTkZJ R1siRExFWFQyIl1dCiAgICAgIGV4dHMucG9wIHVubGVzcyBleHRzWy0xXS5sZW5ndGggPiAwCiAg ICAgIGV4dHMKICAgIGVuZAoKICAgIGRlZiBzZWxmLmRpcl9zZXBhcmF0b3I/IG51bQogICAgICBu dW0gPT0gRmlsZTo6U0VQQVJBVE9SWzBdIHx8CiAgICAgICAgKCBGaWxlOjpBTFRfU0VQQVJBVE9S ICYmIG51bSA9PSBGaWxlOjpBTFRfU0VQQVJBVE9SWzBdKQogICAgZW5kCgogICAgZGVmIHNlbGYu ZG90PyBudW0KICAgICAgbnVtID09ICIuIlswXQogICAgZW5kCgogICAgZGVmIHNlbGYucGF0aF9h YnNvbHV0ZT8gcGF0aAogICAgICAoZGlyX3NlcGFyYXRvcj8gcGF0aFswXSkgfHwgCiAgICAgICAg KCAoZG90PyBwYXRoWzBdKSAmJiAoZGlyX3NlcGFyYXRvcj8gcGF0aFsxXSkgKQogICAgZW5kCgog ICAgZGVmIHNlbGYuc2Nhbl9zaW5nbGUgZmlsZQogICAgICBpZiBwYXRoX2Fic29sdXRlPyBmaWxl CiAgICAgICAgcmV0dXJuIGZpbGUgaWYgRmlsZS5leGlzdHM/IGZpbGUKICAgICAgZWxzZQogICAg ICAgICQ6LmVhY2h7fHBhdGh8IGFicyA9IHBhdGggKyBGaWxlOjpTZXBhcmF0b3IgKyBmaWxlIDsg cmV0dXJuIGFicyBpZiBGaWxlLmV4aXN0cz8gYWJzfQogICAgICBlbmQKICAgICAgbmlsCiAgICBl bmQKCiAgICBkZWYgc2VsZi5zY2FuIGZpbGUKICAgICAgZXh0cyA9IGdldF9leHRzCiAgICAgIGlm IGV4dHMubWFwe3xlfCBSZWdleHAubmV3ICJcXC4je2V9XFxaIn0uaW5qZWN0KGZhbHNlKXt8dixy ZXwgdiB8fCAoZmlsZSA9fiByZSl9IAogICAgICAgIGZpbGVzID0gW2ZpbGVdCiAgICAgIGVsc2UK ICAgICAgICBmaWxlcyA9IGV4dHMubWFwe3xlfCAiI3tmaWxlfS4je2V9In0KICAgICAgZW5kCiAg ICAgIGZpbGVzLmVhY2h7fGZ8IAogICAgICAgIHMgPSBzY2FuX3NpbmdsZSBmCiAgICAgICAgcmV0 dXJuIHMgaWYgcwogICAgICB9CiAgICAgIG5pbAogICAgZW5kCgogICAgZGVmIHNlbGYuc3RkbGli PwogICAgICBLZXJuZWw6OmNhbGxlcigyKVswXSA9fiBRMTc1OjpTdGRsaWIKICAgIGVuZAoKICAg IExvYWQgPSBLZXJuZWwuaW5zdGFuY2VfbWV0aG9kIDpsb2FkCiAgICBSZXF1aXJlID0gS2VybmVs Lmluc3RhbmNlX21ldGhvZCA6cmVxdWlyZQogICAgU3RkbGliID0gUmVnZXhwLm5ldyAiXiN7Q29u ZmlnOjpDT05GSUdbJ3J1YnlsaWJkaXInXX0iCgogIGVuZAoKICB1bmRlZl9tZXRob2QgOmxvYWQK ICBkZWYgbG9hZCBmaWxlLCB3cmFwPWZhbHNlCiAgICBsb2MgPSBRMTc1OjpzY2FuIGZpbGUKICAg IHJlcyA9IFExNzU6OkxvYWQuYmluZChzZWxmKS5jYWxsIGZpbGUsIHdyYXAKICAgIFNUREVSUi5w dXRzICJsb2FkOiAje2ZpbGV9ID0+ICN7bG9jfSIgaWYgcmVzICYmIGxvYyAmJiAhIFExNzU6OnN0 ZGxpYj8KICAgIHJlcwogIGVuZAoKICB1bmRlZl9tZXRob2QgOnJlcXVpcmUKICBkZWYgcmVxdWly ZSBmaWxlCiAgICBsb2MgPSBRMTc1OjpzY2FuIGZpbGUKICAgIHJlcyA9IFExNzU6OlJlcXVpcmUu YmluZChzZWxmKS5jYWxsIGZpbGUKICAgIFNUREVSUi5wdXRzICJyZXF1aXJlOiAje2ZpbGV9ID0+ ICN7bG9jfSIgaWYgcmVzICYmIGxvYyAmJiAhIFExNzU6OnN0ZGxpYj8KICAgIHJlcwogIGVuZAoK ZW5kCgplbmQKCmlmICQwID09IF9fRklMRV9fCiAgQVJHVi5lYWNoe3xuYW1lfCBwdXRzICJyZXF1 aXJlOiAje25hbWV9ID0+ICN7S2VybmVsOjpRMTc1OjpzY2FuIG5hbWV9IiB9CmVuZAo------ art_45968_22548176.1220210787373--