[MacRuby-devel] URI and NSURL compatibility
Joshua Ballanco
joshua.ballanco at apple.com
Thu Oct 7 21:15:21 PDT 2010
This is Ruby, where everything is an expression. If you're going to be clever, why not go all the way?
---
def is_macruby?; defined?(RUBY_ENGINE) && RUBY_ENGINE == 'macruby'; end
if is_macruby?
framework 'Foundation'
else
require 'uri'
COMPONENTS = [:scheme, :userinfo, :host, :port, :registry,
:path, :opaque, :query, :fragment]
end
class HackURI < (is_macruby? ? NSURL : URI::HTTP)
def initialize(uri)
if is_macruby?
self.initWithString(uri)
else
u = URI.parse(uri)
super(*COMPONENTS.map { |c| u.send(c) })
end
end
def what_am_I?
puts self.class.ancestors
end
end
h = HackURI.new('http://www.macruby.org')
h.what_am_I?
---
Although, you may want to rethink your strategy here…there's a REALLY BIG impedance mismatch between the way that the URI module is designed and the way NSURL works. Anyway, hope this helps…
Cheers,
Josh
On Oct 7, 2010, at 8:21 PM, Mark Rada wrote:
> A more efficient version of that class:
>
> class HackURI
> if RUBY_ENGINE == 'macruby'
> def initialize(uri)
> @url = NSURL.URLWithString uri
> end
> else
> def initialize(uri)
> @url = URI.parse uri
> end
> end
>
> def method_missing(method, *args)
> @url.send(method, *args)
> end
> end
>
>
> On 2010-10-07, at 11:11 PM, Mark Rada wrote:
>
>> Hi devs,
>>
>> I am trying to write a gem so that it will run on MRI and MacRuby, but still be able to take advantage of MacRuby things like Cocoa and GCD.
>>
>> I was playing around with some URI related stuff and I cannot find much documentation on whether NSURL and URI objects have been bridged for MacRuby?
>>
>> If they aren't bridged, I was thinking I could just hack together an empty class that just chooses if it inherits from NSURL or URI at run time.
>> Something like this:
>>
>> require 'uri'
>>
>> class HackURI
>> def initialize(uri)
>> if RUBY_ENGINE == 'macruby'
>> @url = NSURL.URLWithString uri
>> else
>> @url = URI.parse uri
>> end
>> end
>>
>> def method_missing(method, *args)
>> @url.send(method, *args)
>> end
>> end
>>
>> --
>> Mark Rada
>>
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel at lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20101007/7daa0f8f/attachment.html>
More information about the MacRuby-devel
mailing list