From: Michal Suchanek Date: 2008-09-05T01:52:30+09:00 Subject: Re: [QUIZ] Where the Required Things Are (#175) ------=_Part_44929_17789567.1220547493028 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline On 03/09/2008, Michal Suchanek wrote: > > $ cat q175t.rb > > require 'date' > require 'readline' > require 'matrix' > require 'rubygems' > require 'time' > require 'hpricot' > require 'rubyforge' > require 'hoe' > require 'curses' As pointed out by Matthew the second solution does not work on OS X (or perhaps pre-1.8.7). While trying to cope reasonably well with Rubygems I introduced some problems which make the solution nonportable. First I stumbled upon start_with? which is a String method only available in 1.8.7. I recall implementing workarounds with regexps quite a few times so I was like "Hell, why did I never use that?", and the reason is it does not exist. Packaging 1.8.7 as the default Ruby interpreter is evil ;-) Second, there is an interesting problem with Rubygems: at one point the class/module Gem exists but Gem.path does not. I did not see this situation happen on the 1.8.7 Linux interpreter but it happens on 1.8.6 OS X. Also there is a small bug with detecting the gem path. I thought File.split splits to components bu it only splits to dirname and basename. So here goes the corrected solution which should again work on multiple platforms. It also removes some of the noise from the reported gem dependencies. $ ruby -r q175.rb q175t.rb require: q175t.rb:2: date => /sw/lib/ruby/1.8/date.rb require: q175t.rb:3: readline => /sw/lib/ruby/1.8/i686-darwin/readline.bundle require: q175t.rb:4: matrix => /sw/lib/ruby/1.8/matrix.rb require: q175t.rb:5: rubygems => /sw/lib/ruby/1.8/rubygems.rb require: q175t.rb:6: time => /sw/lib/ruby/1.8/time.rb require: q175t.rb:7: hpricot => /sw/var/lib/gems/1.8/gems/hpricot-0.6.161/lib/hpricot.rb require: q175t.rb:8: rubyforge => /sw/var/lib/gems/1.8/gems/rubyforge-1.0.0/lib/rubyforge.rb require: /sw/var/lib/gems/1.8/gems/hoe-1.7.0/lib/hoe.rb:4: rake => /sw/var/lib/gems/1.8/gems/rake-0.8.1/lib/rake.rb require: /sw/var/lib/gems/1.8/gems/hoe-1.7.0/lib/hoe.rb:5: rake/gempackagetask => /sw/var/lib/gems/1.8/gems/rake-0.8.1/lib/rake/gempackagetask.rb require: /sw/var/lib/gems/1.8/gems/hoe-1.7.0/lib/hoe.rb:6: rake/rdoctask => /sw/var/lib/gems/1.8/gems/rake-0.8.1/lib/rake/rdoctask.rb require: /sw/var/lib/gems/1.8/gems/hoe-1.7.0/lib/hoe.rb:7: rake/testtask => /sw/var/lib/gems/1.8/gems/rake-0.8.1/lib/rake/testtask.rb require: q175t.rb:9: hoe => /sw/var/lib/gems/1.8/gems/hoe-1.7.0/lib/hoe.rb require: q175t.rb:10: curses => /sw/lib/ruby/1.8/i686-darwin/curses.bundle Thanks Michal ------=_Part_44929_17789567.1220547493028 Content-Type: application/octet-stream; name=q175.rb Content-Transfer-Encoding: base64 X-Attachment-Id: f_fkpma52v Content-Disposition: attachment; filename=q175.rb dW5sZXNzIEtlcm5lbC5jb25zdGFudHMuaW5jbHVkZT8gIlExNzUiCgpyZXF1aXJlICdyYmNvbmZp ZycKCnVubGVzcyBTdHJpbmcuaW5zdGFuY2VfbWV0aG9kcy5pbmNsdWRlPyAic3RhcnRfd2l0aD8i CiAgY2xhc3MgU3RyaW5nCiAgICBkZWYgc3RhcnRfd2l0aD8gc3RyCiAgICAgIHJldHVybiBmYWxz ZSBpZiBzdHIubGVuZ3RoID4gbGVuZ3RoCiAgICAgICgwLi4uKHN0ci5sZW5ndGggLSAxKSkuZWFj aHt8aXwKICAgICAgICByZXR1cm4gZmFsc2UgaWYgc2VsZltpXSAhPSBzdHJbaV0KICAgICAgfQog ICAgICB0cnVlCiAgICBlbmQKICBlbmQKZW5kCgptb2R1bGUgS2VybmVsCgogIG1vZHVsZSBRMTc1 CgogICAgZGVmIHNlbGYuZmlsZV9zcGxpdGFsbCBmbmFtZQogICAgICByZXM9W2ZuYW1lXQogICAg ICB3aGlsZSByZXNbMF0ubGVuZ3RoID4gMSAmJiAoc3BsaXQgPSBGaWxlLnNwbGl0IHJlc1swXSku bGVuZ3RoID4gMSAgJiYgc3BsaXRbMF0ubGVuZ3RoID4gMQogICAgICAgIHJlcyA9IHNwbGl0ICsg cmVzWzEuLi0xXQogICAgICBlbmQKICAgICAgcmVzCiAgICBlbmQKCiAgICBkZWYgc2VsZi5nZXRf ZXh0cwogICAgICBleHRzID0gWyJyYiIsIENvbmZpZzo6Q09ORklHWyJETEVYVCJdLCBDb25maWc6 OkNPTkZJR1siRExFWFQyIl1dCiAgICAgIGV4dHMucG9wIHVubGVzcyBleHRzWy0xXS5sZW5ndGgg PiAwCiAgICAgIGV4dHMKICAgIGVuZAoKICAgIGRlZiBzZWxmLmRpcl9zZXBhcmF0b3I/IG51bQog ICAgICBudW0gPT0gRmlsZTo6U0VQQVJBVE9SWzBdIHx8CiAgICAgICAgKCBGaWxlOjpBTFRfU0VQ QVJBVE9SICYmIG51bSA9PSBGaWxlOjpBTFRfU0VQQVJBVE9SWzBdKQogICAgZW5kCgogICAgZGVm IHNlbGYuZG90PyBudW0KICAgICAgbnVtID09ICIuIlswXQogICAgZW5kCgogICAgZGVmIHNlbGYu cGF0aF9hYnNvbHV0ZT8gcGF0aAogICAgICAoZGlyX3NlcGFyYXRvcj8gcGF0aFswXSkgfHwgCiAg ICAgICAgKCAoZG90PyBwYXRoWzBdKSAmJiAoZGlyX3NlcGFyYXRvcj8gcGF0aFsxXSkgKQogICAg ZW5kCgogICAgZGVmIHNlbGYuc2Nhbl9zaW5nbGUgZmlsZQogICAgICBpZiBwYXRoX2Fic29sdXRl PyBmaWxlCiAgICAgICAgcmV0dXJuIGZpbGUgaWYgRmlsZS5leGlzdHM/IGZpbGUKICAgICAgZWxz ZQogICAgICAgICQ6LmVhY2h7fHBhdGh8IGFicyA9IEZpbGUuam9pbiBbcGF0aCwgZmlsZV0gOyBy ZXR1cm4gYWJzIGlmIEZpbGUuZXhpc3RzPyBhYnN9CiAgICAgIGVuZAogICAgICBuaWwKICAgIGVu ZAoKICAgIGRlZiBzZWxmLnNjYW4gZmlsZQogICAgICBleHRzID0gZ2V0X2V4dHMKICAgICAgaWYg ZXh0cy5tYXB7fGV8IFJlZ2V4cC5uZXcgIlxcLiN7ZX1cXFoifS5pbmplY3QoZmFsc2Upe3x2LHJl fCB2IHx8IChmaWxlID1+IHJlKX0gCiAgICAgICAgZmlsZXMgPSBbZmlsZV0KICAgICAgZWxzZQog ICAgICAgIGZpbGVzID0gZXh0cy5tYXB7fGV8ICIje2ZpbGV9LiN7ZX0ifQogICAgICBlbmQKICAg ICAgZmlsZXMuZWFjaHt8ZnwgCiAgICAgICAgcyA9IHNjYW5fc2luZ2xlIGYKICAgICAgICByZXR1 cm4gcyBpZiBzCiAgICAgIH0KICAgICAgbmlsCiAgICBlbmQKCiAgICBkZWYgc2VsZi5yZXF1ZXN0 b3IgZGVwdGg9MgogICAgICByZXMgPSBLZXJuZWw6OmNhbGxlcihkZXB0aClbMF0KICAgICAgKHJl cy5zdGFydF93aXRoPyBHZW1fUmVxdWlyZSkgPyBLZXJuZWw6OmNhbGxlcihkZXB0aCsxKVswXSA6 IHJlcwogICAgZW5kCgogICAgZGVmIHNlbGYuZ2VtcGF0aCByZXEKICAgICAgaWYgKE9iamVjdC5j b25zdGFudHMuaW5jbHVkZT8gIkdlbSIpICYmIChHZW0ubWV0aG9kcy5pbmNsdWRlPyAicGF0aCIp CiAgICAgICAgR2VtLnBhdGguZWFjaHt8cHwgcCA9IEZpbGUuam9pbiBbcCwiZ2VtcyJdCiAgICAg ICAgICByZXR1cm4gIHAgKyAoZmlsZV9zcGxpdGFsbCByZXFbcC5sZW5ndGggLi4gLTFdKVswXSAg aWYgcmVxLnN0YXJ0X3dpdGg/IHAKICAgICAgICB9IAogICAgICBlbmQKICAgICAgbmlsCiAgICBl bmQKCiAgICBkZWYgc2VsZi5wcmludD8gbG9jCiAgICAgIHJlcSA9IHJlcXVlc3RvcigzKSAKICAg ICAgcmV0dXJuIGZhbHNlIGlmIChyZXEuc3RhcnRfd2l0aD8gUTE3NTo6U3RkbGliKQogICAgICBw YXRoID0gZ2VtcGF0aCByZXEKICAgICAgcmV0dXJuIGZhbHNlIGlmIHBhdGggJiYgKCAobG9jLnN0 YXJ0X3dpdGg/IHBhdGgpIHx8IChsb2Muc3RhcnRfd2l0aD8gUTE3NTo6U3RkbGliKSkKICAgICAg dHJ1ZQogICAgZW5kCgogICAgTG9hZCA9IEtlcm5lbC5pbnN0YW5jZV9tZXRob2QgOmxvYWQKICAg IFJlcXVpcmUgPSBLZXJuZWwuaW5zdGFuY2VfbWV0aG9kIDpyZXF1aXJlCiAgICBTdGRsaWIgPSBD b25maWc6OkNPTkZJR1sncnVieWxpYmRpciddCiAgICBHZW1fUmVxdWlyZSA9IEZpbGUuam9pbiBb Q29uZmlnOjpDT05GSUdbJ3J1YnlsaWJkaXInXSwgInJ1YnlnZW1zIiwgImN1c3RvbV9yZXF1aXJl LnJiIl0KCiAgZW5kCgogIHVuZGVmX21ldGhvZCA6bG9hZAogIGRlZiBsb2FkIGZpbGUsIHdyYXA9 ZmFsc2UKICAgIGxvYyA9IFExNzU6OnNjYW4gZmlsZQogICAgcmVzID0gUTE3NTo6TG9hZC5iaW5k KHNlbGYpLmNhbGwgZmlsZSwgd3JhcAogICAgU1RERVJSLnB1dHMgImxvYWQ6ICN7UTE3NTo6cmVx dWVzdG9yfTogI3tmaWxlfSA9PiAje2xvY30iIGlmIHJlcyAmJiBsb2MgJiYgKFExNzU6OnByaW50 PyBsb2MpCiAgICByZXMKICBlbmQKCiAgdW5kZWZfbWV0aG9kIDpyZXF1aXJlCiAgZGVmIHJlcXVp cmUgZmlsZQogICAgbG9jID0gUTE3NTo6c2NhbiBmaWxlCiAgICByZXMgPSBRMTc1OjpSZXF1aXJl LmJpbmQoc2VsZikuY2FsbCBmaWxlCiAgICBTVERFUlIucHV0cyAicmVxdWlyZTogI3tRMTc1Ojpy ZXF1ZXN0b3J9OiAje2ZpbGV9ID0+ICN7bG9jfSIgaWYgcmVzICYmIGxvYyAmJiAoUTE3NTo6cHJp bnQ/IGxvYykKICAgIHJlcwogIGVuZAoKZW5kCgplbmQKCmlmICQwID09IF9fRklMRV9fCiAgQVJH Vi5lYWNoe3xuYW1lfCBwdXRzICJyZXF1aXJlOiAje25hbWV9ID0+ICN7S2VybmVsOjpRMTc1Ojpz Y2FuIG5hbWV9IiB9CmVuZAo= ------=_Part_44929_17789567.1220547493028--