From: Michael Fellinger Date: 2009-03-02T19:34:06+09:00 Subject: Re: passing a method as a paramter On Mon, Mar 2, 2009 at 6:49 PM, Sarah Allen wrote: > I'm probably missing some basic Ruby syntax, but I'm relatively new to > Ruby and can't figure this out from the various references I've looked > at > > I'd like to use this nifty test helper: > >  # Calls creation_method with nil values for field_names and asserts > that >  # the resulting object was not saved and that errors were added for > that field. >  # >  #  assert_required_fields :create_article, :subject, :body, :author >  def assert_required_fields(creation_method, *field_names) >    field_names.each do |field| >      record = send(creation_method, field => nil) >      assert_equal false, record.valid? >      assert_not_nil record.errors.on(field) >    end >  end ## Using blocks: def assert_required_fields(*field_names, &block) field_names.each do |field_name| record = yield(field_name => nil) assert_equal(false, record.valid?) assert_not_nil(record.errors.on(field) end end # Usage: assert_required_fields(:email, :lastname, :password){|field| User::create(field) } ## Using the method itself def assert_required_fields(method, *field_names) field_names.each do |field_name| record = method.call(field_name => nil) assert_equal(false, record.valid?) assert_not_nil(record.errors.on(field) end end # Usage assert_required_fields(User.method(:create), :email, :lastname, :password) ## Using send def assert_required_fields(obj, method, *field_names) field_names.each do |field_name| record = obj.send(method, field_name => nil) assert_equal(false, record.valid?) assert_not_nil(record.errors.on(field) end end # Usage assert_required_fields(User, :create, :email, :lastname, :password) ^ manveru