
DataMapper renders stdlib's URI class inaccessible
Reported by dan (at angryamoeba) | January 8th, 2009 @ 06:28 AM
DataMapper provides URI as a metatype for properties, which is great, but immediately sets up a constant conflict with the ruby standard library. In our application where model changes trigger callbacks to external services, this becomes an issue:
class URIHack; def self.parse(arg); URI.parse(arg); end; end;
class MyModel
include DataMapper::Resource
def parse_uri(arg)
URIHack.parse(arg)
end
end
Comments and changes to this ticket
-
Lin Jen-Shin January 8th, 2009 @ 10:53 AM
Perhaps you could use ::URI to indicate top level URI came from stdlib in parse_uri.
-
dan (at angryamoeba) January 8th, 2009 @ 11:02 AM
Yes, my example is deliberately awful. But I don't think DM should be conflicting with the stdlib in any way - just my opinion.
-
Dan Kubb (dkubb) January 8th, 2009 @ 02:00 PM
- State changed from unconfirmed to resolved
- Assigned user set to Dan Kubb (dkubb)
This won't be an issue in dkubb/dm-core.
In sam/dm-core we included the DataMapper::Types namespace into the models, which includes DM::Types::URI. This conflicted with the built-in URI, as mentioned.
In dkubb/dm-core we don't include the DataMapper::Types namespace into the models at all. Instead we let you use the stdlib URI constant, and inside Model#property, we see if there is a similarly named DM::Types class, and remap it to use that.
It seems to work out really well, and eliminates this problem altogether.
Please Sign in or create a free account to add a new ticket.
With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »