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.
