[rails] strange regex validation failure

Hi,

I’m getting invalid results when testing a Regex in a format
validation on a Rails model.

Code is…

in Model

allow ‘- n/a -’ or alphanum with _ – no spaces

validates_format_of :test_name, :with => /\A[A-Za-z0-9_]+\z/, :unless
=> lambda{|x| x.test_name == ‘- n/a -’}

in spec

hardware_test = Factory.build(:hardware_test, :test_name => ‘- n/a -’)
hardware_test.should be_valid, “’#{hardware_test.test_name}’ - should
be valid”

spec result

‘HardwareTest should properly validate test_name format’ FAILED
‘- n/a -’ - should be valid
./spec/models/hardware_test_spec.rb:34:

finally, from console

andy@hst-26-147 (Rails234)->sc
Loading development environment (Rails 2.3.4)

a = HardwareTest.new(:test_name => ‘- n/a -’)
=> #<HardwareTest id: nil, test_name: “- n/a -”, code_module_id: nil,
test_description: nil, test_reviewed: false, interactive: false,
loopback: false, factory: false, media: false, test_category_id: nil,
created_at: nil, updated_at: nil, creator_id: nil, updater_id: nil>

a.valid?
=> true

Granted the console is in dev, not test, but I still don’t get it.
Literally pulled on my hair on this one. I’ve tried altering the
Regex many times - adding the :unless => lambda was my last effort.

I can’t see how this isn’t passing.

Thanks for any help

Hi Andy,

Nothing jumps out at me at the moment. If you think there might be a
difference between dev and test, you could launch script/console with
the
test env. and try it again on the console.

$ script/console test

Regards,
Craig

wait, nevermind

turns out there was a callback that was being hidden - and triggering
a different error

all’s well