Guest User

Untitled

a guest
Jun 19th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. # I'm inviting suggestions for refactoring this initialize method---without losing the fact that it's a subclass of String
  2.  
  3. # should accept empty arguments;
  4. # should accept a string, and set default attributes;
  5. # should accept a string, with optional Hash args to set attributes;
  6. # should raise an error if there is no String but there is a Hash
  7.  
  8.  
  9. class ExtraString < String
  10. attr_accessor :optional_parameter
  11.  
  12. def initialize(*args)
  13. if args[0].nil?
  14. super("")
  15. else
  16. raise ArgumentError, "ExtraString#new expected a String" unless args[0].kind_of?(String)
  17. super(args[0])
  18. end
  19. @optional_parameter = args[1].nil? ? 100 : args[1][:bar] || 100
  20. end
  21. end
  22.  
  23.  
  24. puts ExtraString.new.inspect # -> ""
  25. puts ExtraString.new.optional_parameter # -> 100
  26.  
  27. puts ExtraString.new("foo").inspect # -> "foo"
  28. puts ExtraString.new("foo").optional_parameter # -> 100
  29.  
  30. puts ExtraString.new("foo", bar:12).inspect # -> "foo"
  31. puts ExtraString.new("foo", bar:12).optional_parameter # -> 12
  32.  
  33. puts ExtraString.new("foo", baz:99).inspect # -> foo
  34. puts ExtraString.new("foo", baz:99).optional_parameter # -> 100
  35.  
  36. puts ExtraString.new(baz:99).inspect # raise an ArgumentError
  37. puts ExtraString.new(bar:13).optional_parameter # raise an ArgumentError
Add Comment
Please, Sign In to add comment