Thanks Alex, am in the process of merging it in.

-- 
Pat

On 05/05/2011, at 5:17 AM, Alex Chee wrote:

> 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.
> 

-- 
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