class ZxcvbnService def initialize(password) @password = password end def complexity wxcvbn = compute_zxcvbn score = wxcvbn.score length = @password.blank? ? 0 : @password.length vulnerabilities = wxcvbn.match_sequence.map { |m| m.matched_word.nil? ? m.token : m.matched_word }.filter { |s| s.length > 2 }.join(', ') [score, vulnerabilities, length] end def score compute_zxcvbn.score end private def compute_zxcvbn Zxcvbn.test(@password, [], ZXCVBN_DICTIONNARIES) end end