- From: Christoph Badura <bad@bsd.de>
- Date: Wed, 25 May 2011 18:58:55 +0200
- To: public-rdf-ruby@w3.org
- Cc: Ben Lavender <ben@dydra.com>
I have looked more into this over the last days. On Fri, May 20, 2011 at 12:11:10PM -0500, Ben Lavender wrote: > This is a quirk of Promise. In Ruby 1.8, there is no BasicObject, so > Promise fakes it by undefining all of the non-critical methods on > Object. This is a part that actually fails in 1.8.7. The reason is that instance_methods() returns an array of strings in 1.8 and an array of symbols in 1.9. And undef_methods silently fails if passed a string instead of a symbol. Using instance_methods.each { |m| undef_method m.to_sym unless m.to_s =~ /__/ } ^^^^^^^ in promise.rb brings us forward a big step to a solution. The other thing is that the test case is wrong for 1.8.7. Promise must be required *after* Object has been modified because it only undefs the instance methods that are defined on Object when promise.rb is executed. class Object def to_zorch "promises can't be zorched!" end end require 'promise' class Fixnum def to_zorch to_s end end x = promise { 15 } x.to_zorch With the above change to promise.rb I now get '15' on 1.8.7 too. Of course, this does not produce exactly the same behaviour as under 1.9.x. A quick test suggests it may be enough to make Spira and Rails work on 1.8.7. --chris
Received on Wednesday, 25 May 2011 16:59:19 UTC