greglu-solr-ruby 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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