greglu-solr-ruby 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. data/CHANGES.yml +50 -0
  2. data/LICENSE.txt +201 -0
  3. data/README +56 -0
  4. data/Rakefile +190 -0
  5. data/examples/delicious_library/dl_importer.rb +60 -0
  6. data/examples/delicious_library/sample_export.txt +164 -0
  7. data/examples/marc/marc_importer.rb +106 -0
  8. data/examples/tang/tang_importer.rb +58 -0
  9. data/lib/solr.rb +21 -0
  10. data/lib/solr/connection.rb +179 -0
  11. data/lib/solr/document.rb +73 -0
  12. data/lib/solr/exception.rb +13 -0
  13. data/lib/solr/field.rb +39 -0
  14. data/lib/solr/importer.rb +19 -0
  15. data/lib/solr/importer/array_mapper.rb +26 -0
  16. data/lib/solr/importer/delimited_file_source.rb +38 -0
  17. data/lib/solr/importer/hpricot_mapper.rb +27 -0
  18. data/lib/solr/importer/mapper.rb +51 -0
  19. data/lib/solr/importer/solr_source.rb +43 -0
  20. data/lib/solr/importer/xpath_mapper.rb +35 -0
  21. data/lib/solr/indexer.rb +52 -0
  22. data/lib/solr/request.rb +26 -0
  23. data/lib/solr/request/add_document.rb +63 -0
  24. data/lib/solr/request/base.rb +36 -0
  25. data/lib/solr/request/commit.rb +31 -0
  26. data/lib/solr/request/delete.rb +50 -0
  27. data/lib/solr/request/dismax.rb +46 -0
  28. data/lib/solr/request/index_info.rb +22 -0
  29. data/lib/solr/request/modify_document.rb +51 -0
  30. data/lib/solr/request/optimize.rb +21 -0
  31. data/lib/solr/request/ping.rb +36 -0
  32. data/lib/solr/request/select.rb +56 -0
  33. data/lib/solr/request/spellcheck.rb +30 -0
  34. data/lib/solr/request/standard.rb +374 -0
  35. data/lib/solr/request/update.rb +23 -0
  36. data/lib/solr/response.rb +27 -0
  37. data/lib/solr/response/add_document.rb +17 -0
  38. data/lib/solr/response/base.rb +42 -0
  39. data/lib/solr/response/commit.rb +17 -0
  40. data/lib/solr/response/delete.rb +13 -0
  41. data/lib/solr/response/dismax.rb +20 -0
  42. data/lib/solr/response/index_info.rb +26 -0
  43. data/lib/solr/response/modify_document.rb +17 -0
  44. data/lib/solr/response/optimize.rb +14 -0
  45. data/lib/solr/response/ping.rb +28 -0
  46. data/lib/solr/response/ruby.rb +42 -0
  47. data/lib/solr/response/select.rb +17 -0
  48. data/lib/solr/response/spellcheck.rb +20 -0
  49. data/lib/solr/response/standard.rb +60 -0
  50. data/lib/solr/response/xml.rb +42 -0
  51. data/lib/solr/solrtasks.rb +27 -0
  52. data/lib/solr/util.rb +32 -0
  53. data/lib/solr/xml.rb +47 -0
  54. data/script/setup.rb +14 -0
  55. data/script/solrshell +18 -0
  56. data/solr-ruby.gemspec +26 -0
  57. data/solr/conf/admin-extra.html +31 -0
  58. data/solr/conf/protwords.txt +21 -0
  59. data/solr/conf/schema.xml +221 -0
  60. data/solr/conf/scripts.conf +24 -0
  61. data/solr/conf/solrconfig.xml +394 -0
  62. data/solr/conf/stopwords.txt +58 -0
  63. data/solr/conf/synonyms.txt +31 -0
  64. data/solr/conf/xslt/example.xsl +132 -0
  65. data/test/conf/admin-extra.html +31 -0
  66. data/test/conf/protwords.txt +21 -0
  67. data/test/conf/schema.xml +237 -0
  68. data/test/conf/scripts.conf +24 -0
  69. data/test/conf/solrconfig.xml +376 -0
  70. data/test/conf/stopwords.txt +58 -0
  71. data/test/conf/synonyms.txt +31 -0
  72. data/test/functional/server_test.rb +218 -0
  73. data/test/functional/test_solr_server.rb +104 -0
  74. data/test/unit/add_document_test.rb +40 -0
  75. data/test/unit/array_mapper_test.rb +37 -0
  76. data/test/unit/changes_yaml_test.rb +21 -0
  77. data/test/unit/commit_test.rb +41 -0
  78. data/test/unit/connection_test.rb +55 -0
  79. data/test/unit/data_mapper_test.rb +75 -0
  80. data/test/unit/delete_test.rb +56 -0
  81. data/test/unit/delimited_file_source_test.rb +29 -0
  82. data/test/unit/dismax_request_test.rb +26 -0
  83. data/test/unit/document_test.rb +69 -0
  84. data/test/unit/field_test.rb +48 -0
  85. data/test/unit/hpricot_mapper_test.rb +44 -0
  86. data/test/unit/hpricot_test_file.xml +26 -0
  87. data/test/unit/indexer_test.rb +57 -0
  88. data/test/unit/modify_document_test.rb +24 -0
  89. data/test/unit/ping_test.rb +51 -0
  90. data/test/unit/request_test.rb +61 -0
  91. data/test/unit/response_test.rb +43 -0
  92. data/test/unit/select_test.rb +25 -0
  93. data/test/unit/solr_mock_base.rb +40 -0
  94. data/test/unit/spellcheck_response_test.rb +26 -0
  95. data/test/unit/spellchecker_request_test.rb +27 -0
  96. data/test/unit/standard_request_test.rb +324 -0
  97. data/test/unit/standard_response_test.rb +174 -0
  98. data/test/unit/suite.rb +16 -0
  99. data/test/unit/tab_delimited.txt +2 -0
  100. data/test/unit/util_test.rb +24 -0
  101. data/test/unit/xpath_mapper_test.rb +38 -0
  102. data/test/unit/xpath_test_file.xml +25 -0
  103. metadata +173 -0
@@ -0,0 +1,41 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ require 'solr_mock_base'
14
+
15
+ class CommitTest < SolrMockBaseTestCase
16
+
17
+ def test_commit
18
+ xml = '<?xml version="1.0" encoding="UTF-8"?><response><lst name="responseHeader"><int name="status">0</int><int name="QTime">2</int></lst></response>'
19
+ conn = Solr::Connection.new('http://localhost:9999/solr')
20
+ set_post_return(xml)
21
+ response = conn.send(Solr::Request::Commit.new)
22
+ assert_kind_of Solr::Response::Commit, response
23
+ assert_equal true, response.ok?
24
+
25
+ # test shorthand
26
+ assert_equal true, conn.commit
27
+ end
28
+
29
+ # def test_invalid_commit
30
+ # xml = '<?xml version="1.0" encoding="UTF-8"?><response><lst name="responseHeader"><int name="status">1</int><int name="QTime">2</int></lst></response>'
31
+ # conn = Solr::Connection.new('http://localhost:9999/solr')
32
+ # set_post_return(xml)
33
+ # response = conn.send(Solr::Request::Commit.new)
34
+ # assert_kind_of Solr::Response::Commit, response
35
+ # assert_equal false, response.ok?
36
+ #
37
+ # # test shorthand
38
+ # assert_equal false, conn.commit
39
+ # end
40
+
41
+ end
@@ -0,0 +1,55 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ require 'test/unit'
14
+ require 'solr'
15
+ require 'solr_mock_base'
16
+
17
+ class ConnectionTest < SolrMockBaseTestCase
18
+ def test_mock
19
+ connection = Connection.new("http://localhost:9999")
20
+ set_post_return("foo")
21
+ assert_equal "foo", connection.post(Solr::Request::AddDocument.new)
22
+ end
23
+
24
+ def test_bad_url
25
+ assert_raise(RuntimeError) do
26
+ Connection.new("ftp://localhost:9999")
27
+ end
28
+ end
29
+
30
+ def test_connection_initialize
31
+ connection = Solr::Connection.new("http://localhost:8983/solr")
32
+ assert_equal 'localhost', connection.url.host
33
+ assert_equal 8983, connection.url.port
34
+ assert_equal '/solr', connection.url.path
35
+ end
36
+
37
+ def test_non_standard_context
38
+ connection = Solr::Connection.new("http://localhost:8983/index")
39
+ assert_equal '/index', connection.url.path
40
+ end
41
+
42
+ def test_xml_response
43
+ connection = Connection.new("http://localhost:9999")
44
+ set_post_return "<bogus/>"
45
+ response = connection.send(Solr::Request::Ping.new)
46
+ assert_equal "<bogus/>", response.raw_response
47
+ end
48
+
49
+ def test_ruby_response
50
+ connection = Connection.new("http://localhost:9999")
51
+ set_post_return "{'responseHeader' => {}, 'response' => {}}"
52
+ response = connection.send(Solr::Request::Standard.new(:query => 'foo'))
53
+ assert_equal({'responseHeader' => {}, 'response' => {}}, response.data)
54
+ end
55
+ end
@@ -0,0 +1,75 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ require 'solr'
14
+ require 'test/unit'
15
+
16
+ class DataMapperTest < Test::Unit::TestCase
17
+
18
+ def test_static_mapping
19
+ mapping = {:static => "value",
20
+ :static_array => ["value1", "value2"]}
21
+
22
+ mapper = Solr::Importer::Mapper.new(mapping)
23
+ mapped_data = mapper.map({})
24
+
25
+ assert_equal "value", mapped_data[:static]
26
+ assert_equal ["value1", "value2"], mapped_data[:static_array]
27
+ end
28
+
29
+ def test_simple_mapping
30
+ orig_data = {:orig_field => "value",
31
+ :multi1 => "val1", :multi2 => "val2"}
32
+ mapping = {:solr_field => :orig_field,
33
+ :mapped_array => [:multi1, :multi2], }
34
+
35
+ mapper = Solr::Importer::Mapper.new(mapping)
36
+ mapped_data = mapper.map(orig_data)
37
+
38
+ assert_equal "value", mapped_data[:solr_field]
39
+ assert_equal ["val1", "val2"], mapped_data[:mapped_array]
40
+ end
41
+
42
+ def test_proc
43
+ orig_data = {:orig_field => "value"}
44
+ mapping = {:solr_field => Proc.new {|record| ">#{record[:orig_field]}<"}}
45
+
46
+ mapper = Solr::Importer::Mapper.new(mapping)
47
+ mapped_data = mapper.map(orig_data)
48
+
49
+ assert_equal ">value<", mapped_data[:solr_field]
50
+ end
51
+
52
+ def test_overridden_field
53
+ mapping = {:solr_field => [:orig_field1, :orig_field2]}
54
+ orig_data = {:orig_field1 => "value1", :orig_field2 => "value2", }
55
+
56
+ mapper = Solr::Importer::Mapper.new(mapping)
57
+ def mapper.field_data(orig_data, field_name)
58
+ ["~#{super(orig_data, field_name)}~"] # array tests that the value is flattened
59
+ end
60
+ mapped_data = mapper.map(orig_data)
61
+
62
+ assert_equal ["~value1~", "~value2~"], mapped_data[:solr_field]
63
+ end
64
+
65
+ def test_unknown_mapping
66
+ mapping = {:solr_field => /foo/} # regexp currently not a valid mapping type
67
+
68
+ mapper = Solr::Importer::Mapper.new(mapping)
69
+
70
+ assert_raise(RuntimeError) do
71
+ mapped_data = mapper.map({})
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,56 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ require 'solr_mock_base'
14
+
15
+ class DeleteTest < SolrMockBaseTestCase
16
+
17
+ def test_delete_request
18
+ request = Solr::Request::Delete.new(:id => '123')
19
+ assert_match(/<delete>[\s]*<id>123<\/id>[\s]*<\/delete>/m, request.to_s)
20
+ end
21
+
22
+ def test_delete_by_query_request
23
+ request = Solr::Request::Delete.new(:query => 'name:summers')
24
+ assert_match(/<delete>[\s]*<query>name:summers<\/query>[\s]*<\/delete>/m, request.to_s)
25
+ end
26
+
27
+ def test_delete_response
28
+ conn = Solr::Connection.new 'http://localhost:9999/solr'
29
+ set_post_return('<?xml version="1.0" encoding="UTF-8"?><response><lst name="responseHeader"><int name="status">0</int><int name="QTime">2</int></lst></response>')
30
+ response = conn.send(Solr::Request::Delete.new(:id => 123))
31
+ assert_equal true, response.ok?
32
+ end
33
+
34
+ def test_bad_delete_request
35
+ assert_raise(Solr::Exception) do
36
+ Solr::Request::Delete.new(:bogus => :param)
37
+ end
38
+
39
+ assert_raise(Solr::Exception) do
40
+ Solr::Request::Delete.new(:id => 529, :query => "id:529")
41
+ end
42
+ end
43
+
44
+ def test_bad_delete_response
45
+ conn = Solr::Connection.new 'http://localhost:9999/solr'
46
+ set_post_return('<result status="400">uhoh</result>')
47
+ response = conn.send(Solr::Request::Delete.new(:id => 123))
48
+ assert_equal false, response.ok?
49
+ end
50
+
51
+ def test_delete_by_i18n_query_request
52
+ request = Solr::Request::Delete.new(:query => 'ëäïöü')
53
+ assert_match(/<delete>[\s]*<query>ëäïöü<\/query>[\s]*<\/delete>/m, request.to_s)
54
+ end
55
+
56
+ end
@@ -0,0 +1,29 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ require 'solr'
14
+ require 'test/unit'
15
+
16
+ class DelimitedFileSourceTest < Test::Unit::TestCase
17
+
18
+ def test_load
19
+ filename = File.expand_path(File.dirname(__FILE__)) + "/tab_delimited.txt"
20
+
21
+ source = Solr::Importer::DelimitedFileSource.new(filename,/\t/)
22
+ assert_equal source.to_a.size, 1
23
+
24
+ source.each do |data|
25
+ assert_equal data[:asin], '0865681740'
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,26 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ require 'test/unit'
14
+ require 'solr'
15
+
16
+ class DismaxRequestTest < Test::Unit::TestCase
17
+
18
+ def test_basic_query
19
+ request = Solr::Request::Dismax.new(:query => 'query', :phrase_slop => '1000', :sort => [{:deedle => :descending}])
20
+ assert_match(/q=query/, request.to_s)
21
+ assert_match(/qt=dismax/, request.to_s)
22
+ assert_match(/ps=1000/, request.to_s)
23
+ assert_match(/sort=deedle%20desc/, request.to_s)
24
+ end
25
+
26
+ end
@@ -0,0 +1,69 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ require 'test/unit'
14
+ require 'solr'
15
+
16
+ class DocumentTest < Test::Unit::TestCase
17
+
18
+ def test_xml
19
+ doc = Solr::Document.new
20
+ doc << Solr::Field.new(:creator => 'Erik Hatcher')
21
+ assert_kind_of Solr::XML::Element, doc.to_xml
22
+ assert_match(/<doc>[\s]*<field name=['"]creator['"]>Erik Hatcher<\/field>[\s]*<\/doc>/m, doc.to_xml.to_s)
23
+ end
24
+
25
+ def test_repeatable
26
+ doc = Solr::Document.new
27
+ doc << Solr::Field.new(:creator => 'Erik Hatcher')
28
+ doc << Solr::Field.new(:creator => 'Otis Gospodnetic')
29
+ assert_kind_of Solr::XML::Element, doc.to_xml
30
+ 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)
31
+ end
32
+
33
+ def test_repeatable_in_hash
34
+ doc = Solr::Document.new({:creator => ['Erik Hatcher', 'Otis Gospodnetic']})
35
+ 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)
36
+ end
37
+
38
+ def test_bad_doc
39
+ doc = Solr::Document.new
40
+ assert_raise(RuntimeError) do
41
+ doc << "invalid"
42
+ end
43
+ end
44
+
45
+ def test_hash_shorthand
46
+ doc = Solr::Document.new :creator => 'Erik Hatcher', :title => 'Lucene in Action'
47
+ assert_equal 'Erik Hatcher', doc[:creator]
48
+ assert_equal 'Lucene in Action', doc[:title]
49
+ assert_equal nil, doc[:foo]
50
+
51
+ doc = Solr::Document.new
52
+ doc << {:creator => 'Erik Hatcher', :title => 'Lucene in Action'}
53
+ doc[:subject] = 'Search'
54
+ assert_equal 'Erik Hatcher', doc[:creator]
55
+ assert_equal 'Lucene in Action', doc[:title]
56
+ assert_equal 'Search', doc[:subject]
57
+ end
58
+
59
+ def test_boost
60
+ doc = Solr::Document.new :name => "McGrump"
61
+ doc.boost = 300.28
62
+ assert_match(/<doc boost=['"]300.28['"]>[\s]*<field name=['"]name['"]>McGrump<\/field>[\s]*<\/doc>/, doc.to_xml.to_s)
63
+ end
64
+
65
+ def test_string_values
66
+ doc = Solr::Document.new :name => "multi\nline"
67
+ assert_match(/<doc>[\s]*<field name=['"]name['"]>multi\nline<\/field>[\s]*<\/doc>/, doc.to_xml.to_s)
68
+ end
69
+ end
@@ -0,0 +1,48 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ require 'test/unit'
14
+ require 'solr'
15
+
16
+ class FieldTest < Test::Unit::TestCase
17
+
18
+ def test_xml
19
+ field = Solr::Field.new :creator => 'Erik Hatcher'
20
+ assert_kind_of Solr::XML::Element, field.to_xml
21
+ assert_match(/<field name=["']creator["']>Erik Hatcher<\/field>/, field.to_xml.to_s)
22
+ end
23
+
24
+ def test_escaped_xml
25
+ field = Solr::Field.new :creator => 'Erik Hatcher & His Amazing Leaping Ability'
26
+ assert_kind_of Solr::XML::Element, field.to_xml
27
+ assert_match(/<field name=["']creator["']>Erik Hatcher &amp; His Amazing Leaping Ability<\/field>/, field.to_xml.to_s)
28
+ end
29
+
30
+ def test_xml_date
31
+ field = Solr::Field.new :time => Time.now
32
+ assert_kind_of Solr::XML::Element, field.to_xml
33
+ 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)
34
+ end
35
+
36
+ def test_i18n_xml
37
+ field = Solr::Field.new :i18nstring => 'Äêâîôû Öëäïöü'
38
+ assert_kind_of Solr::XML::Element, field.to_xml
39
+ assert_match(/<field name=["']i18nstring["']>Äêâîôû Öëäïöü<\/field>/m, field.to_xml.to_s)
40
+ end
41
+
42
+ def test_boost_values
43
+ field = Solr::Field.new(:blah => "squee", :boost => 3.0)
44
+ assert_kind_of Solr::XML::Element, field.to_xml
45
+ assert_match(/<field name=["']blah["'] boost=["']3.0["']>squee<\/field>/, field.to_xml.to_s)
46
+ end
47
+
48
+ end
@@ -0,0 +1,44 @@
1
+ # The ASF licenses this file to You under the Apache License, Version 2.0
2
+ # (the "License"); you may not use this file except in compliance with
3
+ # the License. You may obtain a copy of the License at
4
+ #
5
+ # http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # Unless required by applicable law or agreed to in writing, software
8
+ # distributed under the License is distributed on an "AS IS" BASIS,
9
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10
+ # See the License for the specific language governing permissions and
11
+ # limitations under the License.
12
+
13
+ begin
14
+ require 'solr'
15
+ require 'test/unit'
16
+ require 'hpricot'
17
+
18
+ class HpricotMapperTest < Test::Unit::TestCase
19
+
20
+ def setup
21
+ @doc = open(File.expand_path(File.dirname(__FILE__)) + "/hpricot_test_file.xml"){|f| Hpricot.XML(f)}
22
+ end
23
+
24
+ def test_simple_hpricot_path
25
+ mapping = {:field1 => :'child[@attribute="attribute1"]',
26
+ :field2 => :'child[@attribute="attribute2"]',
27
+ :field3 => :'child[@attribute="attribute3"]',
28
+ :field4 => :'child[@attribute="attribute3"] grandchild',
29
+ :field5 => :'child'}
30
+
31
+ mapper = Solr::Importer::HpricotMapper.new(mapping)
32
+ mapped_data = mapper.map(@doc)
33
+
34
+ assert_equal ['text1'], mapped_data[:field1]
35
+ assert_equal ['text2'], mapped_data[:field2]
36
+ assert_equal ['text3<grandchild>grandchild 3 text</grandchild>'], mapped_data[:field3]
37
+ assert_equal ['grandchild 3 text'], mapped_data[:field4]
38
+ assert_equal ['text1', 'text2', 'text3<grandchild>grandchild 3 text</grandchild>'], mapped_data[:field5]
39
+ end
40
+
41
+ end
42
+ rescue LoadError => e
43
+ puts "HpricotMapperTest not run because #{e}"
44
+ end