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