-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
The three rules of Ruby Quiz 2:
1. Please do not post any solutions or spoiler discussion for this
quiz until 48 hours have passed from the time on this message.2. Support Ruby Quiz 2 by submitting ideas as often as you can! (A
permanent, new website is in the works for Ruby Quiz 2. Until then,
please visit the temporary website at<http://splatbang.com/rubyquiz/>\.
3. Enjoy!
Suggestion: A [QUIZ] in the subject of emails about the problem
helps everyone on Ruby Talk follow the discussion. Please reply to
the original quiz message, if you can.-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
## Where the Required Things Are (#175)
Occasionally, I've taken a look at the source for some Ruby module,
often because there is no manual or man page, or what documentation is
available is outdated or incomplete. Or sometimes I just want to see
how some Ruby stuff is implemented.One such example was from the previous quiz: I want to learn more
about the Sys::Uptime module. I have it installed, and the call to
`require 'sys/uptime'` works, but I don't know how to use it. But,
alas, I also don't know where the installed files are located. The
shell command `which` doesn't help here, since the module is unlikely
to be in the shell's executable path.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.bundleruby modwhich.rb date
require 'date' => /opt/local/lib/ruby/1.8/date.rb
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:49Note that we allow upsince.rb to run as normal; the output of
modwhich.rb is mixed into stdout.
Lots of fun with this quiz
so far, I came up with something that does like this:
rolando@dev02:~$ ruby quiz175.rb "date"
require 'date' => /usr/local/lib/ruby/1.8/date.rb
rolando@dev02:~$ ruby quiz175.rb "rubygems"
require 'rubygems' => /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb
rolando@dev02:~$ ruby quiz175.rb "rubygems" "sequel"
require 'rubygems' => /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb
require 'sequel' => /usr/local/lib/ruby/gems/1.8/gems/sequel-2.4.0/lib/sequel.rb
rolando@dev02:~$ ruby -r quiz175 test_quiz175.rb
require 'date' => /usr/local/lib/ruby/1.8/date.rb
require 'rubygems' => /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb
require 'sequel' => /usr/local/lib/ruby/gems/1.8/gems/sequel-2.4.0/lib/sequel.rb
require 'sequel_model' => /usr/local/lib/ruby/gems/1.8/gems/sequel-2.4.0/lib/sequel_model.rb
i'm cool piece of ruby code
rolando@dev02:~$ cat test_quiz175.rb
require 'date'
require 'rubygems'
#puts "requiring sequel"
require 'sequel'
require 'sequel_model'
puts "i'm cool piece of ruby code"
rolando@dev02:~$ REQUIRE_SHOW_ALL=1 ruby quiz175.rb "date"
require 'date' => /usr/local/lib/ruby/1.8/date.rb
require 'rational' => /usr/local/lib/ruby/1.8/rational.rb
require 'date/format' => /usr/local/lib/ruby/1.8/date/format.rb
rolando@dev02:~$ REQUIRE_SHOW_ALL=1 ruby quiz175.rb "rubygems"
require 'rubygems' => /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb
require 'rubygems/rubygems_version' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/rubygems_version.rb
require 'rubygems/defaults' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/defaults.rb
require 'thread' => /usr/local/lib/ruby/1.8/thread.rb
require 'thread.so' => /usr/local/lib/ruby/1.8/i686-linux/thread.so
require 'rbconfig' => /usr/local/lib/ruby/1.8/i686-linux/rbconfig.rb
require 'rubygems/exceptions' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/exceptions.rb
require 'rubygems/version' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/version.rb
require 'rubygems/requirement' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/requirement.rb
require 'rubygems/dependency' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/dependency.rb
require 'rubygems/gem_path_searcher' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/gem_path_searcher.rb
require 'rubygems/source_index' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb
require 'rubygems/user_interaction' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/user_interaction.rb
require 'rubygems/specification' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/specification.rb
require 'rubygems/platform' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/platform.rb
require 'rubygems/spec_fetcher' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/spec_fetcher.rb
require 'zlib' => /usr/local/lib/ruby/1.8/i686-linux/zlib.so
require 'rubygems/remote_fetcher' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb
require 'net/http' => /usr/local/lib/ruby/1.8/net/http.rb
require 'net/protocol' => /usr/local/lib/ruby/1.8/net/protocol.rb
require 'socket' => /usr/local/lib/ruby/1.8/i686-linux/socket.so
require 'timeout' => /usr/local/lib/ruby/1.8/timeout.rb
require 'uri' => /usr/local/lib/ruby/1.8/uri.rb
require 'uri/common' => /usr/local/lib/ruby/1.8/uri/common.rb
require 'uri/generic' => /usr/local/lib/ruby/1.8/uri/generic.rb
require 'uri/ftp' => /usr/local/lib/ruby/1.8/uri/ftp.rb
require 'uri/http' => /usr/local/lib/ruby/1.8/uri/http.rb
require 'uri/https' => /usr/local/lib/ruby/1.8/uri/https.rb
require 'uri/ldap' => /usr/local/lib/ruby/1.8/uri/ldap.rb
require 'uri/mailto' => /usr/local/lib/ruby/1.8/uri/mailto.rb
require 'stringio' => /usr/local/lib/ruby/1.8/i686-linux/stringio.so
require 'rubygems/builder' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/builder.rb
require 'rubygems/custom_require' => /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb
(Matthew: I sent you my answer to the quiz in private, since I'll be away for the next week)
--
Matthew Moss <matthew.moss@gmail.com>
thanks Matthew for the fun
regards,
···
On 29-08-2008, at 10:02, Matthew Moss wrote:
--
Rolando Abarca M.