Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- === Buggy ===
- class EmailAddress
- include Comparable
- def initialize(string)
- if string =~ /@/
- @raw_email_address = string.downcase.strip
- else
- raise ArgumentError, "email address must have an '@'"
- end
- end
- def <=>(other)
- raw_email_address <=> other.to_s # <-- BUG IS HERE
- end
- def to_s
- raw_email_address
- end
- protected
- attr_reader :raw_email_address
- end
- === Test ===
- irb(main):024:0> EmailAddress.new("user@example.com") == EmailAddress.new("user@example.com")
- => true
- irb(main):025:0> EmailAddress.new("user@example.com") == EmailAddress.new("User@example.com")
- => true
- irb(main):026:0> EmailAddress.new("user@example.com") == "user@example.com"
- => true
- irb(main):027:0> EmailAddress.new("user@example.com") == "User@example.com"
- => false
- === Fixed ===
- class EmailAddress
- include Comparable
- def initialize(string)
- if string =~ /@/
- @raw_email_address = string.downcase.strip
- else
- raise ArgumentError, "email address must have an '@'"
- end
- end
- def <=>(other)
- raw_email_address <=> other.to_s.downcase.strip # <<-- FIXED HERE
- end
- def to_s
- raw_email_address
- end
- protected
- attr_reader :raw_email_address
- end
- === Test ===
- irb(main):024:0> EmailAddress.new("user@example.com") == EmailAddress.new("user@example.com")
- => true
- irb(main):025:0> EmailAddress.new("user@example.com") == EmailAddress.new("User@example.com")
- => true
- irb(main):026:0> EmailAddress.new("user@example.com") == "user@example.com"
- => true
- irb(main):027:0> EmailAddress.new("user@example.com") == "User@example.com"
- => true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement