rsolr 0.9.7.1 → 0.9.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/CHANGES.txt +3 -0
  2. data/lib/rsolr.rb +1 -1
  3. data/lib/rsolr/client.rb +113 -0
  4. metadata +3 -2
data/CHANGES.txt CHANGED
@@ -1,3 +1,6 @@
1
+ 0.9.7.2 - November 6, 2009
2
+ fixed gem spec, added client.rb
3
+
1
4
  0.9.7.1 - November 5, 2009
2
5
  added support for multibyte url characters in RSolr::Connection::Utils
3
6
  - this is because Ruby 1.9's String size method is different than 1.8
data/lib/rsolr.rb CHANGED
@@ -8,7 +8,7 @@ require 'xout'
8
8
 
9
9
  module RSolr
10
10
 
11
- VERSION = '0.9.7'
11
+ VERSION = '0.9.7.2'
12
12
 
13
13
  autoload :Message, 'rsolr/message'
14
14
  autoload :Client, 'rsolr/client'
@@ -0,0 +1,113 @@
1
+ class RSolr::Client
2
+
3
+ attr_reader :adapter
4
+
5
+ # "adapter" is instance of:
6
+ # RSolr::Adapter::HTTP
7
+ # RSolr::Adapter::Direct (jRuby only)
8
+ # or any other class that uses the connection "interface"
9
+ def initialize(adapter)
10
+ @adapter = adapter
11
+ end
12
+
13
+ # Send a request to a request handler using the method name.
14
+ def method_missing(method_name, *args, &blk)
15
+ request("/#{method_name}", *args, &blk)
16
+ end
17
+
18
+ # sends data to the update handler
19
+ # data can be a string of xml, or an object that returns xml from its #to_xml method
20
+ def update(data, params={})
21
+ request '/update', params, data
22
+ end
23
+
24
+ # send request solr
25
+ # params is hash with valid solr request params (:q, :fl, :qf etc..)
26
+ # if params[:wt] is not set, the default is :ruby
27
+ # if :wt is something other than :ruby, the raw response body is used
28
+ # otherwise, a simple Hash is returned
29
+ # NOTE: to get raw ruby, use :wt=>'ruby' <- a string, not a symbol like :ruby
30
+ #
31
+ #
32
+ def request(path, params={}, *extra)
33
+ response = @adapter.request(path, map_params(params), *extra)
34
+ adapt_response(response)
35
+ end
36
+
37
+ #
38
+ # single record:
39
+ # solr.update(:id=>1, :name=>'one')
40
+ #
41
+ # update using an array
42
+ # solr.update([{:id=>1, :name=>'one'}, {:id=>2, :name=>'two'}])
43
+ #
44
+ def add(doc, &block)
45
+ update message.add(doc, &block)
46
+ end
47
+
48
+ # send </commit>
49
+ def commit
50
+ update message.commit
51
+ end
52
+
53
+ # send </optimize>
54
+ def optimize
55
+ update message.optimize
56
+ end
57
+
58
+ # send </rollback>
59
+ # NOTE: solr 1.4 only
60
+ def rollback
61
+ update message.rollback
62
+ end
63
+
64
+ # Delete one or many documents by id
65
+ # solr.delete_by_id 10
66
+ # solr.delete_by_id([12, 41, 199])
67
+ def delete_by_id(id)
68
+ update message.delete_by_id(id)
69
+ end
70
+
71
+ # delete one or many documents by query
72
+ # solr.delete_by_query 'available:0'
73
+ # solr.delete_by_query ['quantity:0', 'manu:"FQ"']
74
+ def delete_by_query(query)
75
+ update message.delete_by_query(query)
76
+ end
77
+
78
+ # shortcut to RSolr::Message::Builder
79
+ def message
80
+ @message ||= RSolr::Message::Builder.new
81
+ end
82
+
83
+ protected
84
+
85
+ # sets default params etc.. - could be used as a mapping hook
86
+ # type of request should be passed in here? -> map_params(:query, {})
87
+ def map_params(params)
88
+ params||={}
89
+ {:wt=>:ruby}.merge(params)
90
+ end
91
+
92
+ # "adapter_response" must be a hash with the following keys:
93
+ # :params - a sub hash of standard solr params
94
+ # : body - the raw response body from the solr server
95
+ # This method will evaluate the :body value if the params[:wt] == :ruby
96
+ # otherwise, the body is returned
97
+ # The return object has a special method attached called #adapter_response
98
+ # This method gives you access to the original response from the adapter,
99
+ # so you can access things like the actual :url sent to solr,
100
+ # the raw :body, original :params and original :data
101
+ def adapt_response(adapter_response)
102
+ data = adapter_response[:body]
103
+ # if the wt is :ruby, evaluate the ruby string response
104
+ if adapter_response[:params][:wt] == :ruby
105
+ data = Kernel.eval(data)
106
+ end
107
+ # attach a method called #adapter_response that returns the original adapter response value
108
+ def data.raw; @raw end
109
+ data.send(:instance_variable_set, '@raw', adapter_response)
110
+ data
111
+ end
112
+
113
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsolr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7.1
4
+ version: 0.9.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Mitchell
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-05 00:00:00 -05:00
12
+ date: 2009-11-06 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -27,6 +27,7 @@ extra_rdoc_files:
27
27
  files:
28
28
  - examples/direct.rb
29
29
  - examples/http.rb
30
+ - lib/rsolr/client.rb
30
31
  - lib/rsolr/connection/direct.rb
31
32
  - lib/rsolr/connection/net_http.rb
32
33
  - lib/rsolr/connection.rb