Delegate default value option

I find I often use delegate and many nil guards in my facades. Adding a default_value option to delegate would simplify this, but I am interested how others feel about it.

Implementation would look something like:

class PersonFacade

delegate :name, :to => :person, :default_value => “”

def initialize(person)

@person = person

end

end

p = Person.find

p.name => nil

f = PersonFacade.new(p)

f.name => “”

2 Likes

I like this idea and would use it.

-Amiel

Thanks.

I will work up a pull request and see if I can get it added.

What is the advantage over?

def name
  [person.name](http://person.name) || ""
end

I am really against adding new options to delegate method since all that it does is define methods like this in the class.

It’s not clear (to me) how this should interact with passing multiple attributes to delegate:

delegate :foo, :bar, :baz, :to => :person

Also, should the default value be returned if :allow_nil is set and the delegated-to object isn’t present?

–Matt Jones

This is why I wanted to ask the group before making the pull request.

As for Rafael’s question – it is no different from writing the methods out, but either is delegate. I just found that many times where I would have used delegate I ended up writing out the individual methods only to add || = “”. So, I thought others might use it as well.

As for Matt’s questions:

(1) It’s not clear (to me) how this should interact with passing multiple attributes to delegate:

The way I wrote it all of the delegated methods passed would get the default values so:

delegate :foo, :bar, :to => :person, :default_value => “”

delegate :baz, :to => :person

foo => “”

bar => “”

baz => nil

(2) Also, should the default value be returned if :allow_nil is set and the delegated-to object isn’t present?

Yes.

We already rejected this feature before. See https://github.com/rails/rails/pull/11908

Fair enough, thanks for the reference.