How should I make this more Ruby-like or just "better"?
def password_format_is_valid?(submitted_password) #Gets regular expression for password format validation from settings and applies it regex = Regexp.new(Setting['global_admin.password_format_regex']) if submitted_password =~ regex then return true else self.errors.add(:password, Setting['global_admin.password_format_error_message']) return false endend2 Answers2
It seems like you need a Rails validation callback (and a virtual attribute forsubmitted_password). I'd write:
attr_accessor :submitted_passwordvalidate :password_format_is_valid?def password_format_is_valid? regex = Regexp.new(Setting['global_admin.password_format_regex']) unless submitted_password =~ regex self.errors.add(:password, Setting['global_admin.password_format_error_message']) false endendComments:
In the vein of Lisp, the last expression of a body in Ruby is the return value of the method/block, so no need to use an explicit
return(in fact it's unidiomatic and discouraged)Note that Rails can validate fields with regular expression, you should use the predefined validations whenever possible:
validates_format_of.
- \$\begingroup\$Thank you for the explanation and example - much appreciated!\$\endgroup\$Douglas Birch– Douglas Birch2012-10-10 15:03:43 +00:00CommentedOct 10, 2012 at 15:03
- \$\begingroup\$This returns
nilwhen the password is valid.\$\endgroup\$steenslag– steenslag2012-11-10 21:09:12 +00:00CommentedNov 10, 2012 at 21:09 - \$\begingroup\$@steenslag: Indeed, I tried to write the method as a Rails callback, but the code was incomplete. Edited.\$\endgroup\$tokland– tokland2012-11-10 21:42:31 +00:00CommentedNov 10, 2012 at 21:42
There is no need to write explicitreturn . You can omit it. Because in Ruby the result of last executed statement in your code is returned automatically.
- \$\begingroup\$Care to expand your answer a bit to explainwhy
returncan be omitted?\$\endgroup\$yannis– yannis2012-10-10 04:30:57 +00:00CommentedOct 10, 2012 at 4:30
You mustlog in to answer this question.
Explore related questions
See similar questions with these tags.
