Author: ehatcher
Date: Wed Aug 22 08:22:06 2007
New Revision: 568654

URL: http://svn.apache.org/viewvc?rev=568654&view=rev
Log:
Fix modify document implementation to support multivalued fields

Modified:
    lucene/solr/trunk/client/ruby/solr-ruby/lib/solr/request/modify_document.rb
    lucene/solr/trunk/client/ruby/solr-ruby/test/unit/modify_document_test.rb

Modified: 
lucene/solr/trunk/client/ruby/solr-ruby/lib/solr/request/modify_document.rb
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solr-ruby/lib/solr/request/modify_document.rb?rev=568654&r1=568653&r2=568654&view=diff
==============================================================================
--- lucene/solr/trunk/client/ruby/solr-ruby/lib/solr/request/modify_document.rb 
(original)
+++ lucene/solr/trunk/client/ruby/solr-ruby/lib/solr/request/modify_document.rb 
Wed Aug 22 08:22:06 2007
@@ -20,37 +20,27 @@
   # Example: ModifyDocument.new(:id => 10, :overwrite => {:field_name => "new 
value"})
   def initialize(update_data)
     modes = []
-    @fields = {}
+    @doc = {}
     [:overwrite, :append, :distinct, :increment].each do |mode|
       field_data = update_data[mode]
       if field_data
         field_data.each do |field_name, field_value|
           modes << "#{field_name}:#{mode.to_s.upcase}"
-          @fields[field_name] = field_value
+          @doc[field_name] = field_value
         end
         update_data.delete mode
       end
     end
     @mode = modes.join(",")
-    @id = update_data  # should only be one key remaining
+    
+    # only one key should be left over, the id
+    @doc[update_data.keys[0].to_s] = update_data.values[0]
   end
 
   # returns the request as a string suitable for posting
   def to_s
     e = Solr::XML::Element.new 'add'
-    doc = Solr::XML::Element.new 'doc'
-    e.add_element doc
-    f = Solr::XML::Element.new 'field'
-    f.attributes['name'] = @id.keys[0].to_s
-    f.text = @id.values[0]
-    doc.add_element f
-    @fields.each do |key, value|
-      f = Solr::XML::Element.new 'field'
-      f.attributes['name'] = key.to_s
-      # TODO - what about boost?  - can it be updated too?
-      f.text = value
-      doc.add_element f
-    end
+    e.add_element(Solr::Document.new(@doc).to_xml)
     return e.to_s
   end
   

Modified: 
lucene/solr/trunk/client/ruby/solr-ruby/test/unit/modify_document_test.rb
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solr-ruby/test/unit/modify_document_test.rb?rev=568654&r1=568653&r2=568654&view=diff
==============================================================================
--- lucene/solr/trunk/client/ruby/solr-ruby/test/unit/modify_document_test.rb 
(original)
+++ lucene/solr/trunk/client/ruby/solr-ruby/test/unit/modify_document_test.rb 
Wed Aug 22 08:22:06 2007
@@ -16,10 +16,10 @@
 class ModifyDocumentTest < Test::Unit::TestCase
 
   def test_update_formatting
-    request = Solr::Request::ModifyDocument.new(:id => 10, :overwrite => 
{:name => :value})
+    request = Solr::Request::ModifyDocument.new(:id => 10, :overwrite => 
{:name => ['val1', 'val2']})
     assert_equal :xml, request.response_format
     assert_equal 'update?mode=name:OVERWRITE', request.handler
     
-    assert_match(/<add>[\s]*<doc>[\s]*<field 
name=["']id['"]>10<\/field>[\s]*<field 
name=['"]name['"]>value<\/field>[\s]*<\/doc>[\s]*<\/add>/, request.to_s)
+    assert_match(/<add>[\s]*<doc>[\s]*<field 
name=["']id['"]>10<\/field>[\s]*<field 
name=['"]name['"]>val1<\/field>[\s]*<field 
name=['"]name['"]>val2<\/field>[\s]*<\/doc>[\s]*<\/add>/, request.to_s)
   end
 end


Reply via email to