You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by eh...@apache.org on 2007/02/06 12:13:15 UTC

svn commit: r504077 - in /lucene/solr/trunk/client/ruby/solrb: lib/ lib/solr/ lib/solr/request/ test/unit/

Author: ehatcher
Date: Tue Feb  6 03:13:14 2007
New Revision: 504077

URL: http://svn.apache.org/viewvc?view=rev&rev=504077
Log:
SOLR-122: Add optional support for libxml2, with fall back to REXML if libxml is not installed. (Contributed by Coda Hale)


Added:
    lucene/solr/trunk/client/ruby/solrb/lib/solr/xml.rb
Modified:
    lucene/solr/trunk/client/ruby/solrb/lib/solr.rb
    lucene/solr/trunk/client/ruby/solrb/lib/solr/document.rb
    lucene/solr/trunk/client/ruby/solrb/lib/solr/field.rb
    lucene/solr/trunk/client/ruby/solrb/lib/solr/request/add_document.rb
    lucene/solr/trunk/client/ruby/solrb/lib/solr/request/commit.rb
    lucene/solr/trunk/client/ruby/solrb/lib/solr/request/delete.rb
    lucene/solr/trunk/client/ruby/solrb/test/unit/delete_test.rb
    lucene/solr/trunk/client/ruby/solrb/test/unit/document_test.rb
    lucene/solr/trunk/client/ruby/solrb/test/unit/field_test.rb
    lucene/solr/trunk/client/ruby/solrb/test/unit/request_test.rb

Modified: lucene/solr/trunk/client/ruby/solrb/lib/solr.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/lib/solr.rb?view=diff&rev=504077&r1=504076&r2=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/lib/solr.rb (original)
+++ lucene/solr/trunk/client/ruby/solrb/lib/solr.rb Tue Feb  6 03:13:14 2007
@@ -15,3 +15,4 @@
 require 'solr/request'
 require 'solr/connection'
 require 'solr/response'
+require 'solr/xml'
\ No newline at end of file

Modified: lucene/solr/trunk/client/ruby/solrb/lib/solr/document.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/lib/solr/document.rb?view=diff&rev=504077&r1=504076&r2=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/lib/solr/document.rb (original)
+++ lucene/solr/trunk/client/ruby/solrb/lib/solr/document.rb Tue Feb  6 03:13:14 2007
@@ -10,7 +10,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-require 'rexml/document'
+require 'solr/xml'
 require 'solr/field'
 
 class Solr::Document
@@ -64,7 +64,7 @@
 
   # convert the Document to a REXML::Element 
   def to_xml
-    e = REXML::Element.new 'doc'
+    e = Solr::XML::Element.new 'doc'
     @fields.each {|f| e.add_element(f.to_xml)}
     return e
   end

Modified: lucene/solr/trunk/client/ruby/solrb/lib/solr/field.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/lib/solr/field.rb?view=diff&rev=504077&r1=504076&r2=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/lib/solr/field.rb (original)
+++ lucene/solr/trunk/client/ruby/solrb/lib/solr/field.rb Tue Feb  6 03:13:14 2007
@@ -10,7 +10,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-require 'rexml/document'
+require 'solr/xml'
 require 'time'
 
 class Solr::Field
@@ -26,7 +26,7 @@
   end
 
   def to_xml
-    e = REXML::Element.new 'field'
+    e = Solr::XML::Element.new 'field'
     e.attributes['name'] = @name
     e.text = @value
     return e

Modified: lucene/solr/trunk/client/ruby/solrb/lib/solr/request/add_document.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/lib/solr/request/add_document.rb?view=diff&rev=504077&r1=504076&r2=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/lib/solr/request/add_document.rb (original)
+++ lucene/solr/trunk/client/ruby/solrb/lib/solr/request/add_document.rb Tue Feb  6 03:13:14 2007
@@ -10,10 +10,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+require 'solr/xml'
 require 'solr/request/base'
 require 'solr/document'
 require 'solr/request/update'
-require 'rexml/document'
 
 class Solr::Request::AddDocument < Solr::Request::Update
 
@@ -41,7 +41,7 @@
   # returns the request as a string suitable for posting
   
   def to_s
-    e = REXML::Element.new 'add'
+    e = Solr::XML::Element.new 'add'
     for doc in @docs
       e.add_element doc.to_xml
     end

Modified: lucene/solr/trunk/client/ruby/solrb/lib/solr/request/commit.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/lib/solr/request/commit.rb?view=diff&rev=504077&r1=504076&r2=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/lib/solr/request/commit.rb (original)
+++ lucene/solr/trunk/client/ruby/solrb/lib/solr/request/commit.rb Tue Feb  6 03:13:14 2007
@@ -10,12 +10,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-require 'rexml/document'
+require 'solr/xml'
 
 class Solr::Request::Commit < Solr::Request::Update
 
   def to_s
-    REXML::Element.new('commit').to_s
+    Solr::XML::Element.new('commit').to_s
   end
 
 end

Modified: lucene/solr/trunk/client/ruby/solrb/lib/solr/request/delete.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/lib/solr/request/delete.rb?view=diff&rev=504077&r1=504076&r2=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/lib/solr/request/delete.rb (original)
+++ lucene/solr/trunk/client/ruby/solrb/lib/solr/request/delete.rb Tue Feb  6 03:13:14 2007
@@ -10,7 +10,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-require 'rexml/document'
+require 'solr/xml'
 
 class Solr::Request::Delete < Solr::Request::Update
 
@@ -34,13 +34,13 @@
   end
 
   def to_s
-    delete_element = REXML::Element.new('delete')
+    delete_element = Solr::XML::Element.new('delete')
     if @document_id
-      id_element = REXML::Element.new('id')
+      id_element = Solr::XML::Element.new('id')
       id_element.text = @document_id
       delete_element.add_element(id_element)
     elsif @query
-      query = REXML::Element.new('query')
+      query = Solr::XML::Element.new('query')
       query.text = @query 
       delete_element.add_element(query)
     end

Added: lucene/solr/trunk/client/ruby/solrb/lib/solr/xml.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/lib/solr/xml.rb?view=auto&rev=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/lib/solr/xml.rb (added)
+++ lucene/solr/trunk/client/ruby/solrb/lib/solr/xml.rb Tue Feb  6 03:13:14 2007
@@ -0,0 +1,47 @@
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module Solr::XML
+end
+
+begin
+  
+  # If we can load rubygems and libxml-ruby...
+  require 'rubygems'
+  require 'xml/libxml'
+  
+  # then make a few modifications to XML::Node so it can stand in for REXML::Element
+  class XML::Node
+    # element.add_element(another_element) should work
+    alias_method :add_element, :<<
+
+    # element.attributes['blah'] should work
+    def attributes
+      self
+    end
+
+    # element.text = "blah" should work
+    def text=(x)
+      self.content = x.to_s
+    end
+  end
+  
+  # And use XML::Node for our XML generation
+  Solr::XML::Element = XML::Node
+  
+rescue LoadError => e # If we can't load either rubygems or libxml-ruby
+  
+  # Just use REXML.
+  require 'rexml/document'
+  Solr::XML::Element = REXML::Element
+  
+end
\ No newline at end of file

Modified: lucene/solr/trunk/client/ruby/solrb/test/unit/delete_test.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/test/unit/delete_test.rb?view=diff&rev=504077&r1=504076&r2=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/test/unit/delete_test.rb (original)
+++ lucene/solr/trunk/client/ruby/solrb/test/unit/delete_test.rb Tue Feb  6 03:13:14 2007
@@ -16,12 +16,12 @@
 
   def test_delete_request
     request = Solr::Request::Delete.new(:id => '123')
-    assert_equal "<delete><id>123</id></delete>", request.to_s
+    assert_match(/<delete>[\s]*<id>123<\/id>[\s]*<\/delete>/m, request.to_s)
   end
 
   def test_delete_by_query_request
     request = Solr::Request::Delete.new(:query => 'name:summers')
-    assert_equal "<delete><query>name:summers</query></delete>", request.to_s
+    assert_match(/<delete>[\s]*<query>name:summers<\/query>[\s]*<\/delete>/m, request.to_s)
   end
 
   def test_delete_response
@@ -50,7 +50,7 @@
 
   def test_delete_by_i18n_query_request
     request = Solr::Request::Delete.new(:query => 'ëäïöü')
-    assert_equal "<delete><query>ëäïöü</query></delete>", request.to_s
+    assert_match(/<delete>[\s]*<query>ëäïöü<\/query>[\s]*<\/delete>/m, request.to_s)
   end
 
 end

Modified: lucene/solr/trunk/client/ruby/solrb/test/unit/document_test.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/test/unit/document_test.rb?view=diff&rev=504077&r1=504076&r2=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/test/unit/document_test.rb (original)
+++ lucene/solr/trunk/client/ruby/solrb/test/unit/document_test.rb Tue Feb  6 03:13:14 2007
@@ -18,21 +18,21 @@
   def test_xml
     doc = Solr::Document.new
     doc << Solr::Field.new(:creator => 'Erik Hatcher')
-    assert_kind_of REXML::Element, doc.to_xml
-    assert_equal "<doc><field name='creator'>Erik Hatcher</field></doc>", 
-      doc.to_xml.to_s
+    assert_kind_of Solr::XML::Element, doc.to_xml
+    assert_match(/<doc>[\s]*<field name=['"]creator['"]>Erik Hatcher<\/field>[\s]*<\/doc>/m, doc.to_xml.to_s)
   end
 
   def test_repeatable
     doc = Solr::Document.new
     doc << Solr::Field.new(:creator => 'Erik Hatcher')
     doc << Solr::Field.new(:creator => 'Otis Gospodnetic')
-    assert_equal "<doc><field name='creator'>Erik Hatcher</field><field name='creator'>Otis Gospodnetic</field></doc>", doc.to_xml.to_s
+    assert_kind_of Solr::XML::Element, doc.to_xml
+    assert_match(/<doc>[\s]*<field name=['"]creator['"]>Erik Hatcher<\/field>[\s]*<field name=['"]creator['"]>Otis Gospodnetic<\/field>[\s]*<\/doc>/m, doc.to_xml.to_s)
   end
   
   def test_repeatable_in_hash
     doc = Solr::Document.new({:creator => ['Erik Hatcher', 'Otis Gospodnetic']})
-    assert_equal "<doc><field name='creator'>Erik Hatcher</field><field name='creator'>Otis Gospodnetic</field></doc>", doc.to_xml.to_s
+    assert_match(/<doc>[\s]*<field name=['"]creator['"]>Erik Hatcher<\/field>[\s]*<field name=['"]creator['"]>Otis Gospodnetic<\/field>[\s]*<\/doc>/m, doc.to_xml.to_s)
   end
   
   def test_bad_doc

Modified: lucene/solr/trunk/client/ruby/solrb/test/unit/field_test.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/test/unit/field_test.rb?view=diff&rev=504077&r1=504076&r2=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/test/unit/field_test.rb (original)
+++ lucene/solr/trunk/client/ruby/solrb/test/unit/field_test.rb Tue Feb  6 03:13:14 2007
@@ -17,20 +17,20 @@
   
   def test_xml
     field = Solr::Field.new :creator => 'Erik Hatcher'
-    assert_kind_of REXML::Element, field.to_xml
-    assert_equal "<field name='creator'>Erik Hatcher</field>", field.to_xml.to_s
+    assert_kind_of Solr::XML::Element, field.to_xml
+    assert_match(/<field name=["']creator["']>Erik Hatcher<\/field>/, field.to_xml.to_s)
   end
   
   def test_xml_date
     field = Solr::Field.new :time => Time.now
-    assert_kind_of REXML::Element, field.to_xml
-    assert_match(/<field name='time'>[\d]{4}-[\d]{2}-[\d]{2}T[\d]{2}:[\d]{2}:[\d]{2}Z<\/field>/, field.to_xml.to_s)
+    assert_kind_of Solr::XML::Element, field.to_xml
+    assert_match(/<field name=["']time["']>[\d]{4}-[\d]{2}-[\d]{2}T[\d]{2}:[\d]{2}:[\d]{2}Z<\/field>/, field.to_xml.to_s)
   end
   
   def test_i18n_xml
     field = Solr::Field.new :i18nstring => 'Äêâîôû Öëäïöü'
-    assert_kind_of REXML::Element, field.to_xml
-    assert_equal "<field name='i18nstring'>Äêâîôû Öëäïöü</field>", field.to_xml.to_s
+    assert_kind_of Solr::XML::Element, field.to_xml
+    assert_match(/<field name=["']i18nstring["']>Äêâîôû Öëäïöü<\/field>/m, field.to_xml.to_s)
   end
   
 end

Modified: lucene/solr/trunk/client/ruby/solrb/test/unit/request_test.rb
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/ruby/solrb/test/unit/request_test.rb?view=diff&rev=504077&r1=504076&r2=504077
==============================================================================
--- lucene/solr/trunk/client/ruby/solrb/test/unit/request_test.rb (original)
+++ lucene/solr/trunk/client/ruby/solrb/test/unit/request_test.rb Tue Feb  6 03:13:14 2007
@@ -27,7 +27,7 @@
   
   def test_add_doc_request
     request = Solr::Request::AddDocument.new(:title => "title")
-    assert_equal "<add><doc><field name='title'>title</field></doc></add>", request.to_s
+    assert_match(/<add>[\s]*<doc>[\s]*<field name=["']title["']>title<\/field>[\s]*<\/doc>[\s]*<\/add>/m, request.to_s)
     assert_equal :xml, request.response_format
     assert_equal 'update', request.handler
     
@@ -38,7 +38,7 @@
   
   def test_add_multidoc_request
     request = Solr::Request::AddDocument.new([{:title => "title1"}, {:title => "title2"}])
-    assert_equal "<add><doc><field name='title'>title1</field></doc><doc><field name='title'>title2</field></doc></add>", request.to_s
+    assert_match(/<add>[\s]*<doc>[\s]*<field name=["']title["']>title1<\/field>[\s]*<\/doc>[\s]*<doc>[\s]*<field name=["']title["']>title2<\/field>[\s]*<\/doc>[\s]*<\/add>/m, request.to_s)
     assert_equal :xml, request.response_format
     assert_equal 'update', request.handler
   end