Ernie, Pretty cool, my library does(will do) what Shoes does but with more flexibility (you can assign any class/objects as a delegates and it supports more options (including using your keychain for auth)). Did/do you use Shoes, if so, I'd be interested in knowing what you think we are missing or what we should look at. Thanks, - Matt 2009/3/30 Ernest N. Prabhakar, Ph.D. <prabhaka@apple.com>
Hi Matt, On Mar 30, 2009, at 11:08 AM, Matt Aimonetti wrote:
As you can see from the example list, the method name download isn't always appropriate and maybe I should give it the http_query alias. What do you think? What's nice with this approach, is that on top of being simple, the query and the response handling are async so the rest of your code can be run and you get notified only when the response comes back.
The underlying API looks like that: MacRubyHTTP::Query.new( url, http_method='GET', options={} ) Queries don't run in a custom runloop yet but that's something I want to look at once IO work on the experimental branch will be done.
So, here is my question, do you guys think that this is something that should be part of HotCocoa or it's better if it stays its own separate lib? Also, what do you think about having a default vendor folder for hotcocoa apps and autoload the vendor files if available?
Good stuff. I think it is worth iterating on as a separate lib for now, and integrating it with HotCocoa later. For comparison, you may also want to look at how "Shoes" handles downloads (below).
-- Ernie P.
http://help.shoooes.net/App.html
*download(url: a string, styles)*<http://help.shoooes.net/App.html#download>
Starts a download thread (much like XMLHttpRequest, if you're familiar with JavaScript.) This method returns immediately and runs the download in the background. Each download thread also fires start, progress and finishevents. You can send the download to a file or just get back a string (in the finish event.)
If you attach a block to a download, it'll get called as the finish event. *Shoes*.app do stack do title "Searching Google", :size => 16 @status = para "One moment..." # Search Google for 'shoes' and print the HTTP headers download "http://www.google.com/search?q=shoes" do |goog| @status.text = "Headers: " + goog.response.headers.inspect end end end
And, if we wanted to use the downloaded data, we'd get it using goog.response.body. This example is truly the simplest form of download: pulling some web data down into memory and handling it once it's done.
Another simple use of download is to save some web data to a file, using the :save style. *Shoes*.app do stack do title "Downloading Google image", :size => 16 @status = para "One moment..." download "http://www.google.com/logos/nasa50th.gif", :save => "nasa50th.gif" do @status.text = "Okay, is downloaded." end end end
In this case, you can still get the headers for the downloaded file, but response.body will be nil, since the data wasn't saved to memory. You will need to open the file to get the downloaded goods.
If you need to send certain headers or actions to the web server, you can use the :method, :headers and :body styles to customize the HTTP request. (And, if you need to go beyond these, you can always break out Ruby's OpenURI class.) *Shoes*.app do stack do title "POSTing to Google", :size => 16 @status = para "One moment..." download "http://www.stevex.net/dump.php", :method => "POST", :body => "v=1.0&q=shoes" do |dump| require 'hpricot' @status.text = *Hpricot*(dump.response.body).inner_text end end end
As you can see from the above example, Shoes includes the Hpricot library for parsing HTML.
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel