You are right, still a gotcha tho:

Ruby 1.9.2:

  def foo(a, b={})
    b[:handler].call if b.has_key?(:handler)
  end
  foo :bar, handler: Proc.new do
    puts 42
  end

`new': tried to create Proc object without a block (ArgumentError)

def foo(a, b={})
    b[:handler].call if b.has_key?(:handler)
  end
  foo :bar, handler: Proc.new{
    puts 42
  }

Works fine.

I guess this is due to the fact that we are using CRuby's parser.
I got a bit confused because MacRuby allows you to define methods like that:

def foo(a, b:handler)
  handler.call
end

foo :bar, b: Proc.new{ puts 42 }

Which is an extension of the Ruby syntax.
Anyways, thanks for the heads up, I didn't notice it got fixed in 0.8

- Matt

On Sun, Jan 9, 2011 at 2:44 PM, Laurent Sansonetti <lsansonetti@apple.com> wrote:
This seems to be a Ruby syntax point, unrelated to MacRuby.

Laurent

On Jan 9, 2011, at 2:32 PM, Matt Aimonetti wrote:

Laurent you are right, however I noticed a little gotcha:

If you use the following code:

    panel.beginSheetModalForWindow window, completionHandler: Proc.new do |result|
      return if (result == NSCancelButton)
      path = panel.filename
      dest_path = applicationSupportFolder
      guid = NSProcessInfo.processInfo.globallyUniqueString
      dest_path = "#{dest_path}/#{guid}"
      error = Pointer.new(:id)
      NSFileManager.defaultManager.copyItemAtPath(path, toPath:dest_path, error:error)
      NSApp.presentError(error) if error[0]
      movie.setValue(dest_path, forKey:"imagePath")
    end

You get an argument error: tried to create Proc object without a block (ArgumentError)

However using the curly brackets would work:

panel.beginSheetModalForWindow window, completionHandler: Proc.new{|result|
      return if (result == NSCancelButton)
      path = panel.filename
      dest_path = applicationSupportFolder
      guid = NSProcessInfo.processInfo.globallyUniqueString
      dest_path = "#{dest_path}/#{guid}"
      error = Pointer.new(:id)
      NSFileManager.defaultManager.copyItemAtPath(path, toPath:dest_path, error:error)
      NSApp.presentError(error) if error[0]
      movie.setValue(dest_path, forKey:"imagePath")
 }

Finally, the only way to get the do/end proc approach to work is to use the parenthesis around the arguments:

   panel.beginSheetModalForWindow(window, completionHandler: Proc.new do |result|
      return if (result == NSCancelButton)
      path = panel.filename
      dest_path = applicationSupportFolder
      guid = NSProcessInfo.processInfo.globallyUniqueString
      dest_path = "#{dest_path}/#{guid}"
      error = Pointer.new(:id)
      NSFileManager.defaultManager.copyItemAtPath(path, toPath:dest_path, error:error)
      NSApp.presentError(error) if error[0]
      movie.setValue(dest_path, forKey:"imagePath")
   end)

- Matt

On Sun, Jan 9, 2011 at 2:22 PM, Laurent Sansonetti <lsansonetti@apple.com> wrote:
Hi Rolando,

The syntax is simple, you simply pass a Proc project.

Here is an example:

framework 'Foundation'
a = [1, 2, 3, 4, 5]
a.enumerateObjectsUsingBlock(Proc.new { |obj, index, stop|
p obj
stop.assign(true) if index == 2
})

It looks like the snippet you pasted should just work. Did you find a problem?

Laurent


On Jan 9, 2011, at 8:09 AM, Rolando Abarca wrote:

Hi all,

I've taken a look at the referred issue (#712), but I'm not sure of
the final implemented syntax. I'm trying to use a NSOpenPanel, so far
this is what I'm doing:


{{{
 def loadSprite(sender)
   @panel.beginSheetModalForWindow(@window, completionHandler:lambda { |code|
     NSLog("code: #{code}")
   })
 end
}}}

what's the Right Way(tm) to use a NSOpenPanel?
thanks!
-- 
Rolando Abarca M.
Games For Food S.p.A.
http://www.gamesforfood.com
Phone: +1 (408) 345-5433
_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel