+1 for or_if_blank?. Some minor suggestions:

1. I think there does not need to be a special implementation for
NilClass, since nil.blank? => true.

2. I would consider leaving out the "?" from the method name. ?-
methods tend to evaluate to a boolean. This one doesn't.

3. The return can be omitted.

Tim

On 28 Jan., 07:25, Ryan Angilly <[email protected]> wrote:
> I just found out google groups was bouncing my emails because they were
> coming from a different address, so to sum them all up in one:
>
> I also realized that I do crap like this a lot too:
>
> self.owner_object_association ? self.owner_object_association :
> default_thing
>
> Where this would give me:
>
> self.owner_object_association.or_if_blank? default_thing
>
> Maybe just add it to Object?
>
> class Object
>   def or_if_blank?(val)
>     if respond_to? :blank?
>       return self.blank? ? val : self
>     else
>       self
>     end
>   end
> end
>
> class NilClass
>   def or_if_blank?(val)
>     val
>   end
> end
>
> That way you get it everywhere blank? is defined (Hash, Array, String, Nil,
> Numeric)
>
> And the problem withhttp://gist.github.com/53846is that I don't think you
> can do stuff on regular strings like this:
>
> user_msg = params[:stuff].or_if_blank? 'didnt type anything'
>
> -Ryan
>
> On Wed, Jan 28, 2009 at 1:21 AM, Ryan Angilly <[email protected]> wrote:
> > But then it wouldn't work on regular strings right?
>
> > So you couldn't do things like:
>
> > user_msg = params[:stuff].or_if_blank? 'didnt type anything'
>
> > On Wed, Jan 28, 2009 at 1:18 AM, Chris Eppstein 
> > <[email protected]>wrote:
>
> >> I do it like this:
>
> >>http://gist.github.com/53846
>
> >> Long story short:
>
> >> >> class Foo
> >> >>   attr_accessor :bar
> >> >>   nillify_blank :bar
> >> >> end
> >> >> f = Foo.new
> >> => #<Foo:0x4fe8a68>
> >> >> f.bar = ""
> >> => ""
> >> >> f.bar
> >> => nil
>
> >> Then you can use the || operator naturally.
>
> >> Chris
>
> >> On Jan 27, 10:04 pm, Mike Gaffney <[email protected]> wrote:
> >> > ifempty?
>
> >> > Pascal Ehlert wrote:
> >> > > Hi,
>
> >> > > How about adding some method #foo instead that returns nil if the
> >> > > string is blank and self otherwise, so that you can do:
>
> >> > > self.email.foo || self.name
>
> >> > > This looks slightly better and more intuitive to me, if we can figure
> >> > > out a descriptive name for the #foo method (I can't think of any atm,
> >> > > admittedly).
>
> >> > > Cheers
>
> >> > > Pascal
>
> >> > > On 1/28/09 6:45 AM, "Ryan Angilly" <[email protected]> wrote:
>
> >> > >     Hey guys,
>
> >> > >     I find myself doing stuff like this a lot:
>
> >> > >     self.email.blank? ? self.name <http://self.name> : self.email
>
> >> > >     Anyone feel like adding an 'or' method to nil and String (a la
> >> > >     blank?) so that this will work:
>
> >> > >     self.email.or(self.name <http://self.name> )
>
> >> > >     It would be as simple as adding this file to ActiveSupport
>
> >> > >     activesupport/lib/core_ext/or.rb
>
> >> > >     class String
> >> > >     def or(val)
> >> > >     self == "" ? val : self
> >> > >     end
> >> > >     end
>
> >> > >     class NilClass
> >> > >     def or(val)
> >> > >     val
> >> > >     end
> >> > >     end
>
> >> > >     I'll submit a patch of this + tests to LH if people are
> >> interested.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to