5
\$\begingroup\$

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
 end
end
Jamal
35.2k13 gold badges134 silver badges238 bronze badges
asked Oct 9, 2012 at 22:22
\$\endgroup\$

2 Answers 2

3
\$\begingroup\$

It seems like you need a Rails validation callback (and a virtual attribute for submitted_password). I'd write:

attr_accessor :submitted_password
validate :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
 end
end

Comments:

  • 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.

answered Oct 10, 2012 at 9:05
\$\endgroup\$
3
  • \$\begingroup\$ Thank you for the explanation and example - much appreciated! \$\endgroup\$ Commented Oct 10, 2012 at 15:03
  • \$\begingroup\$ This returns nil when the password is valid. \$\endgroup\$ Commented Nov 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\$ Commented Nov 10, 2012 at 21:42
0
\$\begingroup\$

There is no need to write explicit return . You can omit it. Because in Ruby the result of last executed statement in your code is returned automatically.

answered Oct 10, 2012 at 3:18
\$\endgroup\$
1
  • \$\begingroup\$ Care to expand your answer a bit to explain why return can be omitted? \$\endgroup\$ Commented Oct 10, 2012 at 4:30

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.