/ Published in: Ruby
Access deeply nested properties in a nil-safe manner. This is usually a code smell but if you insist...
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
class SafeGetter attr_accessor :receiver def self.safe_nil @safe_nil ||= SafeGetter.new(nil) end def initialize(r) @receiver = r end def to_s @receiver.to_s end def method_missing(methodname, *args) (@receiver.respond_to? methodname) ? SafeGetter.new(@receiver.send(methodname)) : SafeGetter.safe_nil end end # SafeGetter.new(@user).course.book.title.name.to_s => ''