Conditional string building in Ruby
First of all, you have weird behaviour if pending_coloring and pending_processing are both empty arrays.  The output would then be




You have . Go to widget dashboard





I assume that in such a case, it should just say "Go to widget dashboard".



I think that pluralization ought to be treated as an i18n issue.  Even if your application happens to be English-only for now, it's actually easier to generalize the solution, since pluralization is considered a solved problem in internationalization.  In particular, you can use the i18n gem (which is included in Rails, and is a simple installation with no dependencies even if you aren't using Rails).

require 'i18n'

pending_coloring = …
pending_processing = …

I18n.backend.store_translations :en, 'widget' =&gt; {
    :zero =&gt; nil,
    :one =&gt; '1 widget to %{verb}',
    :other =&gt; '%{count} widgets to %{verb}'
}
coloring_text = I18n.t 'widget', :count =&gt; pending_coloring.size, :verb =&gt; 'color'
processing_text = I18n.t 'widget', :count =&gt; pending_processing.size, :verb =&gt; 'process'

notification_text = if (!coloring_text &amp;&amp; !processing_text) then
  ''
else
  "You have #{[coloring_text, processing_text].compact.join(' and ')}.  "
end + "Go to widget dashboard"