I see. But it does feel like code smell to me. And, you can always do
something like :

region = [params[:state], params[:country], 'US'].detect(&:present?)

On Sun, Dec 27, 2009 at 10:28 PM, ColinDKelley <[email protected]> wrote:
>> We already have Object#present? :)
>
> True, but present? is just the inverse of blank?.  What we've found
> very useful is to have a method that treats blank parameters the same
> as missing ones, and allows chaining.
>
> Check out the example:
>
>  state   = params[:state]   unless params[:state].blank?
>   country = params[:country] unless params[:country].blank?
>   region  = state || country || 'US'
>
> Rewriting with present? isn't any more expressive:
>
>  state    = params[:state]     if params[:state].present?
>   country = params[:country] if params[:country].present?
>   region   = state || country || 'US'
>
> But nonblank? makes it more concise and expressive IMO:
>
>   region = params[:state].nonblank? || params[:country].nonblank? ||
> 'US'
>
> We've been using it this way for the last year and it really has
> cleaned up a lot of code.  More importantly it has become a reflex to
> use it inline--as shown above--that has helped us avoid bugs where we
> might think a parameter was present but really it was just there with
> an empty value.
>
> I suppose we could keep the method name present? but switch its
> behavior to match what's proposed here for nonblank?.  But that
> contract change could break someone's code who was depending on a
> boolean being returned.  Also I prefer that nonblank? has a name that
> parallels nonzero? from Ruby.
>
> I like the symmetrical pair of nonzero? and nonblank? because they map
> values (0, empty/blank string respectively) to nil that are typically
> equivalent to not being present at all.  Other languages like Python
> found it convenient to have 0 and empty string treated as false for
> just this reason I think.
>
> -Colin
>
>
> On Dec 27, 5:37 am, Pratik <[email protected]> wrote:
>> We already have Object#present? :)
>>
>>
>>
>>
>>
>> On Sun, Dec 27, 2009 at 7:49 AM, ColinDKelley <[email protected]> wrote:
>> > All,
>>
>> > I'd like to propose the Object#nonblank? in ActiveSupport, layered
>> > over the blank? method.  This has been working well for us in the past
>> > year and hopefully others will find it useful enough to include in
>> > core.
>>
>> > It is analogous to Ruby's Numeric#nonzero? method: it either returns
>> > the object itself (if not blank) or nil (if blank). This makes it easy
>> > to treat blank parameters the same as missing ones, and allows
>> > chaining:
>>
>> > For example, this:
>>
>> >  state   = params[:state]   unless params[:state].blank?
>> >  country = params[:country] unless params[:country].blank?
>> >  region  = state || country || 'US'
>>
>> > becomes:
>>
>> >  region = params[:state].nonblank? || params[:country].nonblank? ||
>> > 'US'
>>
>> > The ticket is here:
>>
>> >https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/3...
>>
>> > along with a patch that includes full documentation and tests.
>>
>> > --
>>
>> > 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 
>> > athttp://groups.google.com/group/rubyonrails-core?hl=en.
>>
>> --
>> Cheers!
>> - Pratikhttp://m.onkey.org|http://twitter.com/lifo
>
> --
>
> 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.
>
>
>



-- 
Cheers!
- Pratik
http://m.onkey.org | http://twitter.com/lifo

--

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