Hey all,

This line of code I am having trouble understanding what it's doing:

validates_presence_of :email, :unless => proc { |this|
this.validation_context == :create_user }

Basically, there is a code block that floats adjacent to a method. The
method is called and returns a value. That yielded value is passed as an
argument (local variable "this") into the code block and the code block
returns a value to the method (in this case true or false since double
equal is used and converts result into primitive (actually not but an
object of type boolean) type boolean). But then I did a search for this
method proc and its definition doesn't exist in application. However, a
google search shows there is an object called proc. Since code blocks
are not objects, instead just holding a context of logic sitting
adjacent to a method which invokes them via yield, using proc is a way
to convert a code block to an object. Hence, they can be stored in
variables and called through the variables as a callable object. But as
you see in the above example, proc is not instantiated like so:
Proc.new. And even if you look at context, there will be no reason to
use an instance of proc here, since we aren't storing anything into a
variable for later use as a callable method, such as in this example:

hello_world   = Proc.new { |str| return str + 'world' }

def fnc(new_fnc, *args)
 return unless new_fnc.respond_to?("call")
 new_fnc.call(*args)
end

puts fnc hello_world, 'hey'

So my question is am I missing something here? What exactly is "proc"
doing since it isn't an instance of Proc nor is it a method (there's no
definition for it as I mentioned)?

Thanks for response

-- 
Posted via http://www.ruby-forum.com/.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to