gsolr 0.12.2
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.
- data/.gitignore +3 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +30 -0
- data/LICENSE +13 -0
- data/README.md +160 -0
- data/Rakefile +40 -0
- data/gsolr.gemspec +25 -0
- data/lib/gsolr/client.rb +121 -0
- data/lib/gsolr/connection/net_http.rb +56 -0
- data/lib/gsolr/connection/requestable.rb +48 -0
- data/lib/gsolr/connection/utils.rb +82 -0
- data/lib/gsolr/connection.rb +9 -0
- data/lib/gsolr/message/document.rb +52 -0
- data/lib/gsolr/message/field.rb +23 -0
- data/lib/gsolr/message/generator.rb +94 -0
- data/lib/gsolr/message.rb +8 -0
- data/lib/gsolr/version.rb +3 -0
- data/lib/gsolr.rb +39 -0
- data/spec/api/client_spec.rb +97 -0
- data/spec/api/connection/net_http_spec.rb +148 -0
- data/spec/api/connection/requestable_spec.rb +92 -0
- data/spec/api/connection/utils_spec.rb +84 -0
- data/spec/api/gsolr_spec.rb +29 -0
- data/spec/api/message_spec.rb +120 -0
- data/spec/spec_helper.rb +1 -0
- data/tasks/spec.rake +35 -0
- metadata +123 -0
@@ -0,0 +1,120 @@
|
|
1
|
+
describe GSolr::Message do
|
2
|
+
|
3
|
+
let(:generator){ GSolr::Message::Generator.new }
|
4
|
+
|
5
|
+
# call all of the simple methods...
|
6
|
+
# make sure the xml string is valid
|
7
|
+
# ensure the class is actually Solr::XML
|
8
|
+
[:optimize, :rollback, :commit].each do |meth|
|
9
|
+
it "#{meth} should generator xml" do
|
10
|
+
result = generator.send(meth)
|
11
|
+
result.should match(Regexp.escape("<#{meth}/>"))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context :add do
|
16
|
+
|
17
|
+
it 'should yield a Message::Document object when #add is called with a block' do
|
18
|
+
documents = [{:id=>1, :name=>'sam', :cat=>['cat 1', 'cat 2']}]
|
19
|
+
add_attrs = {:boost=>200.00}
|
20
|
+
result = generator.add(documents, add_attrs) do |doc|
|
21
|
+
doc.field_by_name(:name).attrs[:boost] = 10
|
22
|
+
doc.fields.size.should == 4
|
23
|
+
doc.fields_by_name(:cat).size.should == 2
|
24
|
+
end
|
25
|
+
result.should match(%r(name="cat">cat 1</field>))
|
26
|
+
result.should match(%r(name="cat">cat 2</field>))
|
27
|
+
result.should match(%r(<add boost="200.0">))
|
28
|
+
result.should match(%r(boost="10"))
|
29
|
+
result.should match(%r(<field name="id">1</field>))
|
30
|
+
end
|
31
|
+
|
32
|
+
# add a single hash ("doc")
|
33
|
+
it 'should create an add from a hash' do
|
34
|
+
data = {
|
35
|
+
:id=>1,
|
36
|
+
:name=>'matt'
|
37
|
+
}
|
38
|
+
result = generator.add(data)
|
39
|
+
result.should match(/<field name="name">matt<\/field>/)
|
40
|
+
result.should match(/<field name="id">1<\/field>/)
|
41
|
+
end
|
42
|
+
|
43
|
+
# add an array of hashes
|
44
|
+
it 'should create many adds from an array of hashes' do
|
45
|
+
data = [
|
46
|
+
{
|
47
|
+
:id=>1,
|
48
|
+
:name=>'matt'
|
49
|
+
},
|
50
|
+
{
|
51
|
+
:id=>2,
|
52
|
+
:name=>'sam'
|
53
|
+
}
|
54
|
+
]
|
55
|
+
message = generator.add(data)
|
56
|
+
expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><add><doc><field name=\"id\">1</field><field name=\"name\">matt</field></doc><doc><field name=\"id\">2</field><field name=\"name\">sam</field></doc></add>"
|
57
|
+
message.should match(/<field name="name">matt<\/field>/)
|
58
|
+
message.should match(/<field name="name">sam<\/field>/)
|
59
|
+
end
|
60
|
+
|
61
|
+
# multiValue field support test, thanks to Fouad Mardini!
|
62
|
+
it 'should create multiple fields from array values' do
|
63
|
+
data = {
|
64
|
+
:id => 1,
|
65
|
+
:name => ['matt1', 'matt2']
|
66
|
+
}
|
67
|
+
result = generator.add(data)
|
68
|
+
result.should match(/<field name="name">matt1<\/field>/)
|
69
|
+
result.should match(/<field name="name">matt2<\/field>/)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should create an add from a single Message::Document' do
|
73
|
+
document = GSolr::Message::Document.new
|
74
|
+
document.add_field('id', 1)
|
75
|
+
document.add_field('name', 'matt', :boost => 2.0)
|
76
|
+
result = generator.add(document)
|
77
|
+
result.should match(Regexp.escape('<?xml version="1.0" encoding="UTF-8"?>'))
|
78
|
+
result.should match(/<field name="id">1<\/field>/)
|
79
|
+
result.should match Regexp.escape('boost="2.0"')
|
80
|
+
result.should match Regexp.escape('name="name"')
|
81
|
+
result.should match Regexp.escape('matt</field>')
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should create adds from multiple Message::Documents' do
|
85
|
+
documents = (1..2).map do |i|
|
86
|
+
doc = GSolr::Message::Document.new
|
87
|
+
doc.add_field('id', i)
|
88
|
+
doc.add_field('name', "matt#{i}")
|
89
|
+
doc
|
90
|
+
end
|
91
|
+
result = generator.add(documents)
|
92
|
+
result.should match(/<field name="name">matt1<\/field>/)
|
93
|
+
result.should match(/<field name="name">matt2<\/field>/)
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
context :delete_by_id do
|
99
|
+
|
100
|
+
it 'should create a doc id delete' do
|
101
|
+
generator.delete_by_id(10).should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?><delete><id>10</id></delete>"
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should create many doc id deletes' do
|
105
|
+
generator.delete_by_id([1, 2, 3]).should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?><delete><id>1</id><id>2</id><id>3</id></delete>"
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
context :delete_by_query do
|
111
|
+
it 'should create a query delete' do
|
112
|
+
generator.delete_by_query('status:"LOST"').should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?><delete><query>status:\"LOST\"</query></delete>"
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'should create many query deletes' do
|
116
|
+
generator.delete_by_query(['status:"LOST"', 'quantity:0']).should == "<?xml version=\"1.0\" encoding=\"UTF-8\"?><delete><query>status:\"LOST\"</query><query>quantity:0</query></delete>"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'gsolr')
|
data/tasks/spec.rake
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# gem 'rspec'
|
2
|
+
|
3
|
+
# $stderr.puts `gem list`
|
4
|
+
|
5
|
+
require 'rspec'
|
6
|
+
require 'rspec/core'
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
|
9
|
+
namespace :spec do
|
10
|
+
namespace :ruby do
|
11
|
+
desc 'run api specs through the Ruby implementations'
|
12
|
+
task :api do
|
13
|
+
puts "Ruby 1.8.7"
|
14
|
+
puts `rake spec:api`
|
15
|
+
puts "Ruby 1.9"
|
16
|
+
puts `rake1.9 spec:api`
|
17
|
+
puts "JRuby"
|
18
|
+
puts `jruby -S rake spec:api`
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'run api specs (mock out Solr dependency)'
|
23
|
+
Rspec::Core::RakeTask.new(:api) do |spec|
|
24
|
+
spec.pattern = "spec/api/**/*_spec.rb"
|
25
|
+
spec.verbose = true
|
26
|
+
spec.rspec_opts = ['--color']
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'run integration specs'
|
30
|
+
Rspec::Core::RakeTask.new(:integration) do |spec|
|
31
|
+
spec.pattern = "spec/integration/**/*_spec.rb"
|
32
|
+
spec.verbose = true
|
33
|
+
spec.rspec_opts = ['--color']
|
34
|
+
end
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gsolr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 12
|
8
|
+
- 2
|
9
|
+
version: 0.12.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Scott Gonyea
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-11-07 01:00:00 -07:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: json
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 4
|
30
|
+
- 6
|
31
|
+
version: 1.4.6
|
32
|
+
type: :runtime
|
33
|
+
prerelease: false
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rspec
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
version: "0"
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *id002
|
48
|
+
description: This is a generic solr client, capable of talking to Solr, as well as Riak
|
49
|
+
email:
|
50
|
+
- me@sgonyea.com
|
51
|
+
executables: []
|
52
|
+
|
53
|
+
extensions: []
|
54
|
+
|
55
|
+
extra_rdoc_files: []
|
56
|
+
|
57
|
+
files:
|
58
|
+
- .gitignore
|
59
|
+
- Gemfile
|
60
|
+
- Gemfile.lock
|
61
|
+
- LICENSE
|
62
|
+
- README.md
|
63
|
+
- Rakefile
|
64
|
+
- gsolr.gemspec
|
65
|
+
- lib/gsolr.rb
|
66
|
+
- lib/gsolr/client.rb
|
67
|
+
- lib/gsolr/connection.rb
|
68
|
+
- lib/gsolr/connection/net_http.rb
|
69
|
+
- lib/gsolr/connection/requestable.rb
|
70
|
+
- lib/gsolr/connection/utils.rb
|
71
|
+
- lib/gsolr/message.rb
|
72
|
+
- lib/gsolr/message/document.rb
|
73
|
+
- lib/gsolr/message/field.rb
|
74
|
+
- lib/gsolr/message/generator.rb
|
75
|
+
- lib/gsolr/version.rb
|
76
|
+
- spec/api/client_spec.rb
|
77
|
+
- spec/api/connection/net_http_spec.rb
|
78
|
+
- spec/api/connection/requestable_spec.rb
|
79
|
+
- spec/api/connection/utils_spec.rb
|
80
|
+
- spec/api/gsolr_spec.rb
|
81
|
+
- spec/api/message_spec.rb
|
82
|
+
- spec/spec_helper.rb
|
83
|
+
- tasks/spec.rake
|
84
|
+
has_rdoc: true
|
85
|
+
homepage: http://rubygems.org/gems/gsolr
|
86
|
+
licenses: []
|
87
|
+
|
88
|
+
post_install_message:
|
89
|
+
rdoc_options: []
|
90
|
+
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
segments:
|
99
|
+
- 0
|
100
|
+
version: "0"
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
version: "0"
|
109
|
+
requirements: []
|
110
|
+
|
111
|
+
rubyforge_project: gsolr
|
112
|
+
rubygems_version: 1.3.7
|
113
|
+
signing_key:
|
114
|
+
specification_version: 3
|
115
|
+
summary: Generic Solr Client
|
116
|
+
test_files:
|
117
|
+
- spec/api/client_spec.rb
|
118
|
+
- spec/api/connection/net_http_spec.rb
|
119
|
+
- spec/api/connection/requestable_spec.rb
|
120
|
+
- spec/api/connection/utils_spec.rb
|
121
|
+
- spec/api/gsolr_spec.rb
|
122
|
+
- spec/api/message_spec.rb
|
123
|
+
- spec/spec_helper.rb
|