gsolr_ext 0.12.3

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 ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2008-2009 Matt Mitchell
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.rdoc ADDED
@@ -0,0 +1,126 @@
1
+ =GSolr::Ext
2
+ A set of helper methods/modules to assist in building Solr queries and handling responses when using the GSolr library.
3
+
4
+ == Installation:
5
+ gem sources -a http://gemcutter.org
6
+ sudo gem install gsolr_ext
7
+
8
+ ==Related Resources & Projects
9
+ * {GSolr}[http://github.com/mwmitchell/gsolr_ext]
10
+
11
+ ==Requests
12
+ To use the GSolr::Ext connection instead of the normal GSolr connection just require 'gsolr_ext':
13
+ require 'gsolr_ext'
14
+ solr = GSolr.connect
15
+
16
+ GSolr::Ext adds a #find and a #luke method to the connection object.
17
+
18
+ ===#luke
19
+ The #luke method returns a Hash/Mash result of a /admin/luke?numTerms=0 request:
20
+ luke_response = solr.luke
21
+ luke_response['index']
22
+ luke_response['fields']
23
+ luke_response['info']
24
+
25
+
26
+ ===#find
27
+ The #find method listens for certain keys. All other keys are ignored, allowing the ability to mix-and-match special keys with normal Solr param keys. The recognized keys are describe below.
28
+
29
+
30
+ :page - This maps to the Solr "start" param. The current "page" in the results set. GSolr::Ext handles the page-to-rows math for you.
31
+
32
+
33
+ :per_page - This maps to the Solr "rows" param. How many "pages" in the result.
34
+
35
+
36
+ :queries - This key maps to the Solr "q" param. Accepts a string, array or hash. When an array is used, each value is joined by a space. When a hash is used, the keys are used as Solr fields.
37
+
38
+ * :queries => 'normal' BECOMES ?q=normal
39
+ * :queries => ['one', 'two'] BECOMES ?q=one two
40
+ * :queries => {:title=>'one'} BECOMES ?q=title:(one)
41
+ * :queries => ['red', {:title=>'one'}] BECOMES ?q=red title:(one)
42
+
43
+
44
+ :phrases - This value is mapped to the Solr "q" param. When this key is used, the value will become double-quoted, creating a Solr "phrase" based query.
45
+
46
+ * :phrases => 'normal' BECOMES ?q="normal"
47
+ * :phrases => ['one', 'two'] BECOMES ?q="one" "two"
48
+ * :phrases => {:title=>'one'} BECOMES ?q=title:("one")
49
+ * :phrases => ['red', {:title=>'one'}] BECOMES ?q="red" title:("one")
50
+
51
+
52
+ :filters - The :filters key maps to the Solr :fq param. This has the same behavior as the :queries key, except it's for the :fq param.
53
+
54
+ * :filters => 'normal' BECOMES ?fq=normal
55
+ * :filters => ['one', 'two'] BECOMES ?fq=one two
56
+ * :filters => {:title=>'one'} BECOMES ?fq=title:(one)
57
+ * :filters => ['red', {:title=>'one'}] BECOMES ?fq=red title:(one)
58
+
59
+
60
+ :phrase_filters - The :phrase_filters key maps to the Solr :fq param. This has the same behavior as the :phrases key, except it's for the :fq param.
61
+
62
+ * :phrase_filters => 'normal' BECOMES ?fq="normal"
63
+ * :phrase_filters => ['one', 'two'] BECOMES ?fq="one" "two"
64
+ * :phrase_filters => {:title=>'one'} BECOMES ?fq=title:("one")
65
+ * :phrase_filters => ['red', {:title=>'one'}] BECOMES ?fq="red" title:("one")
66
+
67
+
68
+ :facets - The :facets does a few different things. First, it sets the Solr param facet=true. It accepts a hash with a single key called :fields. This should be an array of field names to facet on.
69
+
70
+ * :facets=>{:fields=>['cat', 'blah']} BECOMES ?facet=true&facet.field=cat&facet.field=blah
71
+
72
+
73
+
74
+ ==Request Example
75
+ require 'gsolr_ext'
76
+ solr = GSolr.connect
77
+ solr_params = {
78
+ :page=>2,
79
+ :per_page=>10,
80
+ :phrases=>{:name=>'This is a phrase'},
81
+ :filters=>['test', {:price=>(1..10)}],
82
+ :phrase_filters=>{:manu=>['Apple']},
83
+ :queries=>'ipod',
84
+ :facets=>{:fields=>['cat', 'blah']},
85
+ :echoParams => 'EXPLICIT'
86
+ }
87
+ response = gsolr_ext.find solr_params
88
+
89
+ ==Responses
90
+ GSolr::Ext decorates the normal output hash from GSolr and adds some helpful methods.
91
+
92
+ require 'gsolr_ext'
93
+ solr = GSolr.connect
94
+
95
+ response = solr.find :q=>'*:*'
96
+
97
+ response.ok?
98
+ response.params
99
+ response.docs
100
+ response.docs.previous_page
101
+ response.docs.next_page
102
+ response.facets.each do |facet|
103
+ puts facet.name
104
+ facet.items.each do |item|
105
+ puts "#{facet.name}::#{item.value} (#{item.hits})"
106
+ end
107
+ end
108
+
109
+ You can access values in the response hash using symbols or strings.
110
+
111
+ ===Documents/Pagination
112
+ If you wanna paginate, just throw the collection into the WillPaginate view helper.
113
+ <%= will_paginate response.docs %>
114
+
115
+ ==The "Model" Module
116
+ You can create your own <read-only> "models" using GSolr::Ext::Model
117
+
118
+ class Book
119
+ include GSolr::Ext::Model
120
+ def self.find_by_author(author)
121
+ find(:fq=>'object_type:"book"', :rows=>10, :phrase_filters=>{:author=>author})
122
+ end
123
+ end
124
+
125
+ all_books = Book.find('*:*')
126
+ hawk_books = Book.find_by_author('hawk')
data/Rakefile ADDED
@@ -0,0 +1,46 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'bundler'
5
+ require 'rake'
6
+ require 'rake/testtask'
7
+ require 'rake/gempackagetask'
8
+
9
+ gemspec = eval File.read('gsolr_ext.gemspec')
10
+
11
+ # Gem packaging tasks
12
+ Rake::GemPackageTask.new(gemspec) do |pkg|
13
+ pkg.need_zip = false
14
+ pkg.need_tar = false
15
+ end
16
+
17
+ task :gem => :gemspec
18
+
19
+ desc %{Build the gemspec file.}
20
+ task :gemspec do
21
+ gemspec.validate
22
+ end
23
+
24
+ desc %{Release the gem to RubyGems.org}
25
+ task :release => :gem do
26
+ system "gem push pkg/#{gemspec.name}-#{gemspec.version}.gem"
27
+ end
28
+
29
+ require 'rspec'
30
+ require 'rspec/core'
31
+ require 'rspec/core/rake_task'
32
+
33
+ Rspec::Core::RakeTask.new(:spec) do |spec|
34
+ spec.pattern = 'spec/**/*_spec.rb'
35
+ spec.verbose = true
36
+ spec.rspec_opts = ['--color']
37
+ end
38
+
39
+ Rspec::Core::RakeTask.new(:rcov) do |spec|
40
+ spec.pattern = 'spec/**/*_spec.rb'
41
+ spec.verbose = true
42
+ spec.rcov = true
43
+ spec.rspec_opts = ['--color']
44
+ end
45
+
46
+ task :default => :spec
data/TODO.txt ADDED
@@ -0,0 +1 @@
1
+ default_params for Model?
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.12.1
data/gsolr_ext.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ $:.unshift(File.dirname(__FILE__)) unless
7
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
8
+
9
+ $:.push File.expand_path("../lib", __FILE__)
10
+
11
+ require 'date'
12
+ require 'gsolr_ext/version'
13
+
14
+ Gem::Specification.new do |s|
15
+ s.name = %q{gsolr_ext}
16
+ s.version = GSolr::Ext::VERSION
17
+ s.date = Date.today.to_s
18
+ s.authors = ["Scott Gonyea"] # "Matt Mitchell" authored RSolr + RSolr::Ext
19
+ s.email = %q{me@sgonyea.com}
20
+ s.homepage = %q{https://github.com/aitrus/gsolr_ext}
21
+
22
+ s.summary = %q{A query/response extension lib for GSolr}
23
+ s.description = %q{A query/response extension lib for the Generic Solr Gem (fork of RSolr)}
24
+
25
+ s.add_dependency 'gsolr'
26
+ s.add_development_dependency "rspec"
27
+
28
+ s.files = `git ls-files`.split("\n")
29
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
30
+ s.require_paths = ["lib"]
31
+ end
32
+
data/gsolr_ext.tmproj ADDED
@@ -0,0 +1,258 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>currentDocument</key>
6
+ <string>lib/gsolr_ext.rb</string>
7
+ <key>documents</key>
8
+ <array>
9
+ <dict>
10
+ <key>expanded</key>
11
+ <true/>
12
+ <key>name</key>
13
+ <string>gsolr_ext</string>
14
+ <key>regexFolderFilter</key>
15
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
16
+ <key>sourceDirectory</key>
17
+ <string></string>
18
+ </dict>
19
+ </array>
20
+ <key>fileHierarchyDrawerWidth</key>
21
+ <integer>200</integer>
22
+ <key>metaData</key>
23
+ <dict>
24
+ <key>Gemfile</key>
25
+ <dict>
26
+ <key>caret</key>
27
+ <dict>
28
+ <key>column</key>
29
+ <integer>13</integer>
30
+ <key>line</key>
31
+ <integer>6</integer>
32
+ </dict>
33
+ <key>firstVisibleColumn</key>
34
+ <integer>0</integer>
35
+ <key>firstVisibleLine</key>
36
+ <integer>0</integer>
37
+ </dict>
38
+ <key>Rakefile</key>
39
+ <dict>
40
+ <key>caret</key>
41
+ <dict>
42
+ <key>column</key>
43
+ <integer>0</integer>
44
+ <key>line</key>
45
+ <integer>9</integer>
46
+ </dict>
47
+ <key>firstVisibleColumn</key>
48
+ <integer>0</integer>
49
+ <key>firstVisibleLine</key>
50
+ <integer>1</integer>
51
+ </dict>
52
+ <key>gsolr_ext.gemspec</key>
53
+ <dict>
54
+ <key>caret</key>
55
+ <dict>
56
+ <key>column</key>
57
+ <integer>0</integer>
58
+ <key>line</key>
59
+ <integer>25</integer>
60
+ </dict>
61
+ <key>firstVisibleColumn</key>
62
+ <integer>0</integer>
63
+ <key>firstVisibleLine</key>
64
+ <integer>0</integer>
65
+ </dict>
66
+ <key>lib/gsolr_ext.rb</key>
67
+ <dict>
68
+ <key>caret</key>
69
+ <dict>
70
+ <key>column</key>
71
+ <integer>19</integer>
72
+ <key>line</key>
73
+ <integer>16</integer>
74
+ </dict>
75
+ <key>firstVisibleColumn</key>
76
+ <integer>0</integer>
77
+ <key>firstVisibleLine</key>
78
+ <integer>0</integer>
79
+ </dict>
80
+ <key>lib/gsolr_ext/client.rb</key>
81
+ <dict>
82
+ <key>caret</key>
83
+ <dict>
84
+ <key>column</key>
85
+ <integer>17</integer>
86
+ <key>line</key>
87
+ <integer>2</integer>
88
+ </dict>
89
+ <key>firstVisibleColumn</key>
90
+ <integer>0</integer>
91
+ <key>firstVisibleLine</key>
92
+ <integer>0</integer>
93
+ </dict>
94
+ <key>lib/gsolr_ext/doc.rb</key>
95
+ <dict>
96
+ <key>caret</key>
97
+ <dict>
98
+ <key>column</key>
99
+ <integer>0</integer>
100
+ <key>line</key>
101
+ <integer>0</integer>
102
+ </dict>
103
+ <key>firstVisibleColumn</key>
104
+ <integer>0</integer>
105
+ <key>firstVisibleLine</key>
106
+ <integer>0</integer>
107
+ </dict>
108
+ <key>lib/gsolr_ext/model.rb</key>
109
+ <dict>
110
+ <key>caret</key>
111
+ <dict>
112
+ <key>column</key>
113
+ <integer>0</integer>
114
+ <key>line</key>
115
+ <integer>99</integer>
116
+ </dict>
117
+ <key>firstVisibleColumn</key>
118
+ <integer>0</integer>
119
+ <key>firstVisibleLine</key>
120
+ <integer>70</integer>
121
+ </dict>
122
+ <key>lib/gsolr_ext/request.rb</key>
123
+ <dict>
124
+ <key>caret</key>
125
+ <dict>
126
+ <key>column</key>
127
+ <integer>0</integer>
128
+ <key>line</key>
129
+ <integer>0</integer>
130
+ </dict>
131
+ <key>firstVisibleColumn</key>
132
+ <integer>0</integer>
133
+ <key>firstVisibleLine</key>
134
+ <integer>0</integer>
135
+ </dict>
136
+ <key>lib/gsolr_ext/response.rb</key>
137
+ <dict>
138
+ <key>caret</key>
139
+ <dict>
140
+ <key>column</key>
141
+ <integer>0</integer>
142
+ <key>line</key>
143
+ <integer>38</integer>
144
+ </dict>
145
+ <key>firstVisibleColumn</key>
146
+ <integer>0</integer>
147
+ <key>firstVisibleLine</key>
148
+ <integer>0</integer>
149
+ </dict>
150
+ <key>lib/gsolr_ext/response/docs.rb</key>
151
+ <dict>
152
+ <key>caret</key>
153
+ <dict>
154
+ <key>column</key>
155
+ <integer>0</integer>
156
+ <key>line</key>
157
+ <integer>0</integer>
158
+ </dict>
159
+ <key>firstVisibleColumn</key>
160
+ <integer>0</integer>
161
+ <key>firstVisibleLine</key>
162
+ <integer>0</integer>
163
+ </dict>
164
+ <key>lib/gsolr_ext/response/facets.rb</key>
165
+ <dict>
166
+ <key>caret</key>
167
+ <dict>
168
+ <key>column</key>
169
+ <integer>0</integer>
170
+ <key>line</key>
171
+ <integer>0</integer>
172
+ </dict>
173
+ <key>firstVisibleColumn</key>
174
+ <integer>0</integer>
175
+ <key>firstVisibleLine</key>
176
+ <integer>0</integer>
177
+ </dict>
178
+ <key>lib/gsolr_ext/response/spelling.rb</key>
179
+ <dict>
180
+ <key>caret</key>
181
+ <dict>
182
+ <key>column</key>
183
+ <integer>0</integer>
184
+ <key>line</key>
185
+ <integer>0</integer>
186
+ </dict>
187
+ <key>firstVisibleColumn</key>
188
+ <integer>0</integer>
189
+ <key>firstVisibleLine</key>
190
+ <integer>0</integer>
191
+ </dict>
192
+ <key>lib/gsolr_ext/version.rb</key>
193
+ <dict>
194
+ <key>caret</key>
195
+ <dict>
196
+ <key>column</key>
197
+ <integer>0</integer>
198
+ <key>line</key>
199
+ <integer>5</integer>
200
+ </dict>
201
+ <key>firstVisibleColumn</key>
202
+ <integer>0</integer>
203
+ <key>firstVisibleLine</key>
204
+ <integer>0</integer>
205
+ </dict>
206
+ <key>lib/mash.rb</key>
207
+ <dict>
208
+ <key>caret</key>
209
+ <dict>
210
+ <key>column</key>
211
+ <integer>0</integer>
212
+ <key>line</key>
213
+ <integer>0</integer>
214
+ </dict>
215
+ <key>firstVisibleColumn</key>
216
+ <integer>0</integer>
217
+ <key>firstVisibleLine</key>
218
+ <integer>0</integer>
219
+ </dict>
220
+ <key>spec/spec_helper.rb</key>
221
+ <dict>
222
+ <key>caret</key>
223
+ <dict>
224
+ <key>column</key>
225
+ <integer>10</integer>
226
+ <key>line</key>
227
+ <integer>4</integer>
228
+ </dict>
229
+ <key>firstVisibleColumn</key>
230
+ <integer>0</integer>
231
+ <key>firstVisibleLine</key>
232
+ <integer>0</integer>
233
+ </dict>
234
+ </dict>
235
+ <key>openDocuments</key>
236
+ <array>
237
+ <string>lib/gsolr_ext/client.rb</string>
238
+ <string>lib/gsolr_ext/doc.rb</string>
239
+ <string>lib/gsolr_ext/model.rb</string>
240
+ <string>lib/gsolr_ext/request.rb</string>
241
+ <string>lib/gsolr_ext/response/docs.rb</string>
242
+ <string>lib/gsolr_ext/response/facets.rb</string>
243
+ <string>lib/gsolr_ext/response/spelling.rb</string>
244
+ <string>lib/gsolr_ext/response.rb</string>
245
+ <string>lib/gsolr_ext.rb</string>
246
+ <string>Rakefile</string>
247
+ <string>gsolr_ext.gemspec</string>
248
+ <string>Gemfile</string>
249
+ <string>lib/gsolr_ext/version.rb</string>
250
+ <string>lib/mash.rb</string>
251
+ <string>spec/spec_helper.rb</string>
252
+ </array>
253
+ <key>showFileHierarchyDrawer</key>
254
+ <true/>
255
+ <key>windowFrame</key>
256
+ <string>{{221, 173}, {944, 776}}</string>
257
+ </dict>
258
+ </plist>