I found a way to get a failing spec, and I did a pull request
https://github.com/freelancing-god/thinking-sphinx/pull/218


On May 4, 2:15 am, Clemens Kofler <[email protected]> wrote:
> I'd love to but I can't figure out how to write a failing test for it at the 
> moment. I will try again later today.
>
> On May 4, 2011, at 9:25 AM, Pat Allan wrote:
>
>
>
>
>
>
>
> > Clemens - perhaps you can allow for this in your recent patch, so we get 
> > this fixed up at the same time?
>
> > --
> > Pat
>
> > On 04/05/2011, at 5:23 PM, Clemens Kofler wrote:
>
> >> The more performant way would be to call compact on the array resulting 
> >> from the collect:
>
> >> def translate(object, attribute_value)
> >>    objects = source_objects(object)
> >>    return nil if objects.nil? || objects.empty?
>
> >>    if objects.length > 1
> >>      objects.collect { |item| item.send(column.__name) }.compact.detect { |
> >> item|
> >>        item.to_crc32 == attribute_value
> >>      }
> >>    else
> >>      method = value_source || column.__name
> >>      objects.first.send(method)
> >>    end
> >>  end
>
> >> Otherwise (in the worst case scenario where the detect hits for the last 
> >> element or not at all) you'd have to iterate the same (potentially large 
> >> collection) twice.
>
> >> - C.
>
> >> On May 4, 2011, at 1:36 AM, Alex Chee wrote:
>
> >>> I'm trying to make a facet from a string column that might contain
> >>> NULL. When it gets to the translate method, it tries to call to_crc32
> >>> on nil:
>
> >>> NoMethodError: undefined method `to_crc32' for nil:NilClass
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/gems/
> >>> activesupport-3.0.6/lib/active_support/whiny_nil.rb:48:in
> >>> `method_missing'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet.rb:106:in `block in
> >>> translate'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet.rb:105:in `each'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet.rb:105:in `detect'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet.rb:105:in `translate'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet.rb:81:in `value'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:127:in `block
> >>> in add_from_results'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/search.rb:322:in `block in
> >>> each_with_match'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/search.rb:321:in `each'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/search.rb:321:in
> >>> `each_with_index'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/search.rb:321:in
> >>> `each_with_match'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:126:in
> >>> `add_from_results'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:52:in `block
> >>> in populate'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:49:in `each'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:49:in
> >>> `each_with_index'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:49:in
> >>> `populate'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/facet_search.rb:13:in
> >>> `initialize'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/search_methods.rb:422:in `new'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/bundler/gems/thinking-
> >>> sphinx-f81441e28813/lib/thinking_sphinx/search_methods.rb:422:in
> >>> `facets'
> >>>    from (irb):1
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.6/
> >>> lib/rails/commands/console.rb:44:in `start'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.6/
> >>> lib/rails/commands/console.rb:8:in `start'
> >>>    from /Users/alexchee/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.6/
> >>> lib/rails/commands.rb:23:in `<top (required)>'
> >>>    from script/rails:6:in `require'
> >>>    from script/rails:6:in `<main>'irb(main):002:0>
>
> >>> So I'm trying to get around this by changing the translate method to
> >>> only collect if the item is not nil and the crc32 matches, like:
> >>>  def translate(object, attribute_value)
> >>>    objects = source_objects(object)
> >>>    return nil if objects.nil? || objects.empty?
>
> >>>    if objects.length > 1
> >>>      objects.collect { |item| item.send(column.__name) }.detect { |
> >>> item|
> >>>        !item.nil? && item.to_crc32 == attribute_value
> >>>      }
> >>>    else
> >>>      method = value_source || column.__name
> >>>      objects.first.send(method)
> >>>    end
> >>>  end
>
> >>> Does anyone know if this sounds like reasonable solution for me?
>
> >>> Thanks,
> >>> -Alex
>
> >>> --
> >>> You received this message because you are subscribed to the Google Groups 
> >>> "Thinking Sphinx" 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/thinking-sphinx?hl=en.
>
> >> --
> >> You received this message because you are subscribed to the Google Groups 
> >> "Thinking Sphinx" 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/thinking-sphinx?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Thinking Sphinx" 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/thinking-sphinx?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" 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/thinking-sphinx?hl=en.

Reply via email to