rails-ext 0.3.11 → 0.3.12

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/.git/COMMIT_EDITMSG CHANGED
@@ -1 +1 @@
1
- upd
1
+ add solr sunspot search
data/.git/index CHANGED
Binary file
data/.git/logs/HEAD CHANGED
@@ -62,3 +62,4 @@ a3ece30fb5827ed20d26a75253bb4854f657055a 0538f41ddebf7fa8c71ebe99c5288d5e11c3fb8
62
62
  b4343d9284a89e2971022f8d4acf7865d8341c6d 824ac01aecaa766ea8a7b10ef9d9f67810fdff40 alex <alex@amac.local> 1270516451 +0400 commit: upd
63
63
  824ac01aecaa766ea8a7b10ef9d9f67810fdff40 83b834761b24c759d71e6fb8121dcf127290454e alex <alex@amac.local> 1270519846 +0400 commit: upd
64
64
  83b834761b24c759d71e6fb8121dcf127290454e bc8c233044e9ab4299af036c0602bab06d3a5349 alex <alex@amac.local> 1271850978 +0400 commit: upd
65
+ bc8c233044e9ab4299af036c0602bab06d3a5349 f7be86378738705bbd1f97dd8be92c3cc7d54a66 alex <alex@amac.local> 1271938860 +0400 commit: add solr sunspot search
@@ -62,3 +62,4 @@ a3ece30fb5827ed20d26a75253bb4854f657055a 0538f41ddebf7fa8c71ebe99c5288d5e11c3fb8
62
62
  b4343d9284a89e2971022f8d4acf7865d8341c6d 824ac01aecaa766ea8a7b10ef9d9f67810fdff40 alex <alex@amac.local> 1270516451 +0400 commit: upd
63
63
  824ac01aecaa766ea8a7b10ef9d9f67810fdff40 83b834761b24c759d71e6fb8121dcf127290454e alex <alex@amac.local> 1270519846 +0400 commit: upd
64
64
  83b834761b24c759d71e6fb8121dcf127290454e bc8c233044e9ab4299af036c0602bab06d3a5349 alex <alex@amac.local> 1271850978 +0400 commit: upd
65
+ bc8c233044e9ab4299af036c0602bab06d3a5349 f7be86378738705bbd1f97dd8be92c3cc7d54a66 alex <alex@amac.local> 1271938860 +0400 commit: add solr sunspot search
@@ -48,3 +48,4 @@ a3ece30fb5827ed20d26a75253bb4854f657055a 0538f41ddebf7fa8c71ebe99c5288d5e11c3fb8
48
48
  b4343d9284a89e2971022f8d4acf7865d8341c6d 824ac01aecaa766ea8a7b10ef9d9f67810fdff40 alex <alex@amac.local> 1270516459 +0400 update by push
49
49
  824ac01aecaa766ea8a7b10ef9d9f67810fdff40 83b834761b24c759d71e6fb8121dcf127290454e alex <alex@amac.local> 1270519856 +0400 update by push
50
50
  83b834761b24c759d71e6fb8121dcf127290454e bc8c233044e9ab4299af036c0602bab06d3a5349 alex <alex@amac.local> 1271850990 +0400 update by push
51
+ bc8c233044e9ab4299af036c0602bab06d3a5349 f7be86378738705bbd1f97dd8be92c3cc7d54a66 alex <alex@amac.local> 1271938911 +0400 update by push
@@ -0,0 +1 @@
1
+ x+)JMU�0`040031QHLI,(I-*�+Jb���P�*�U�樿K���ddTYqjbQrFbRN*H�{{ޞm<�ѐ{< �����K���
@@ -1 +1 @@
1
- bc8c233044e9ab4299af036c0602bab06d3a5349
1
+ f7be86378738705bbd1f97dd8be92c3cc7d54a66
@@ -1 +1 @@
1
- bc8c233044e9ab4299af036c0602bab06d3a5349
1
+ f7be86378738705bbd1f97dd8be92c3cc7d54a66
data/Rakefile CHANGED
@@ -18,7 +18,7 @@ require 'fileutils'
18
18
 
19
19
  spec = Gem::Specification.new do |s|
20
20
  s.name = "rails-ext"
21
- s.version = "0.3.11"
21
+ s.version = "0.3.12"
22
22
  s.summary = "Set of common Ruby on Rails extensions"
23
23
  s.description = "Set of common Ruby on Rails extensions"
24
24
  s.author = "Alexey Petrushin"
@@ -0,0 +1,79 @@
1
+ module Sunspot #:nodoc:
2
+ module MongoMapper #:nodoc:
3
+ #
4
+ # This module provides Sunspot Adapter implementations for MongoMapper
5
+ # models.
6
+ #
7
+ module Adapters
8
+ class MongoMapperInstanceAdapter < Sunspot::Adapters::InstanceAdapter
9
+ #
10
+ # Return the primary key for the adapted instance
11
+ #
12
+ # ==== Returns
13
+ #
14
+ # Integer:: Database ID of model
15
+ #
16
+ def id
17
+ @instance.id
18
+ end
19
+ end
20
+
21
+ class MongoMapperDataAccessor < Sunspot::Adapters::DataAccessor
22
+ # options for the find
23
+ attr_accessor :include, :select
24
+
25
+ #
26
+ # Set the fields to select from the database. This will be passed
27
+ # to MongoMapper.
28
+ #
29
+ # ==== Parameters
30
+ #
31
+ # value<Mixed>:: String of comma-separated columns or array of columns
32
+ #
33
+ def select=(value)
34
+ value = value.join(', ') if value.respond_to?(:join)
35
+ @select = value
36
+ end
37
+
38
+ #
39
+ # Get one MongoMapper instance out of the database by ID
40
+ #
41
+ # ==== Parameters
42
+ #
43
+ # id<String>:: Database ID of model to retreive
44
+ #
45
+ # ==== Returns
46
+ #
47
+ # MongoMapper::Base:: MongoMapper model
48
+ #
49
+ def load(id)
50
+ @clazz.first(options_for_find.merge(:id => id))
51
+ end
52
+
53
+ #
54
+ # Get a collection of MongoMapper instances out of the database by ID
55
+ #
56
+ # ==== Parameters
57
+ #
58
+ # ids<Array>:: Database IDs of models to retrieve
59
+ #
60
+ # ==== Returns
61
+ #
62
+ # Array:: Collection of MongoMapper models
63
+ #
64
+ def load_all(ids)
65
+ @clazz.all(options_for_find.merge(:id => ids))
66
+ end
67
+
68
+ private
69
+
70
+ def options_for_find
71
+ returning({}) do |options|
72
+ options[:include] = @include unless @include.blank?
73
+ options[:select] = @select unless @select.blank?
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,412 @@
1
+ module Sunspot #:nodoc:
2
+ module MongoMapper #:nodoc:
3
+ #
4
+ # This module adds Sunspot functionality to MongoMapper models. As well as
5
+ # providing class and instance methods, it optionally adds lifecycle hooks
6
+ # to automatically add and remove models from the Solr index as they are
7
+ # created and destroyed.
8
+ #
9
+ module Searchable
10
+ class <<self
11
+ def included(base) #:nodoc:
12
+ base.module_eval do
13
+ extend(ActsAsMethods)
14
+ end
15
+ end
16
+ end
17
+
18
+ module ActsAsMethods
19
+ #
20
+ # Makes a class searchable if it is not already, or adds search
21
+ # configuration if it is. Note that the options passed in are only used
22
+ # the first time this method is called for a particular class; so,
23
+ # search should be defined before activating any mixins that extend
24
+ # search configuration.
25
+ #
26
+ # The block passed into this method is evaluated by the
27
+ # <code>Sunspot.setup</code> method. See the Sunspot documentation for
28
+ # complete information on the functionality provided by that method.
29
+ #
30
+ # ==== Options (+options+)
31
+ #
32
+ # :auto_index<Boolean>::
33
+ # Automatically index models in Solr when they are saved.
34
+ # Default: true
35
+ # :auto_remove<Boolean>::
36
+ # Automatically remove models from the Solr index when they are
37
+ # destroyed. <b>Setting this option to +false+ is not recommended
38
+ # </b>(see the README).
39
+ # :ignore_attribute_changes_of<Array>::
40
+ # Define attributes, that should not trigger a reindex of that
41
+ # object. Usual suspects are updated_at or counters.
42
+ # :include<Mixed>::
43
+ # Define default MongoMapper includes, set this to allow MongoMapper
44
+ # to load required associations when indexing. See MongoMapper's
45
+ # documentation on eager-loading for examples on how to set this
46
+ # Default: []
47
+ #
48
+ # ==== Example
49
+ #
50
+ # class Post < MongoMapper::Base
51
+ # searchable do
52
+ # text :title, :body
53
+ # string :sort_title do
54
+ # title.downcase.sub(/^(an?|the)/, '')
55
+ # end
56
+ # integer :blog_id
57
+ # time :updated_at
58
+ # end
59
+ # end
60
+ #
61
+ def searchable(options = {}, &block)
62
+ Sunspot.setup(self, &block)
63
+
64
+ if searchable?
65
+ sunspot_options[:include].concat(Util::Array(options[:include]))
66
+ else
67
+ extend ClassMethods
68
+ include InstanceMethods
69
+
70
+ class_inheritable_hash :sunspot_options
71
+
72
+ unless options[:auto_index] == false
73
+ before_save :maybe_mark_for_auto_indexing
74
+ after_save :maybe_auto_index
75
+ end
76
+
77
+ unless options[:auto_remove] == false
78
+ after_destroy do |searchable|
79
+ searchable.remove_from_index
80
+ end
81
+ end
82
+ options[:include] = Util::Array(options[:include])
83
+
84
+ self.sunspot_options = options
85
+ end
86
+ end
87
+
88
+ #
89
+ # This method is defined on all MongoMapper::Base subclasses. It
90
+ # is false for classes on which #searchable has not been called, and
91
+ # true for classes on which #searchable has been called.
92
+ #
93
+ # ==== Returns
94
+ #
95
+ # +false+
96
+ #
97
+ def searchable?
98
+ false
99
+ end
100
+ end
101
+
102
+ module ClassMethods
103
+ def self.extended(base) #:nodoc:
104
+ class <<base
105
+ alias_method :search, :solr_search unless method_defined? :search
106
+ alias_method :search_ids, :solr_search_ids unless method_defined? :search_ids
107
+ alias_method :remove_all_from_index, :solr_remove_all_from_index unless method_defined? :remove_all_from_index
108
+ alias_method :remove_all_from_index!, :solr_remove_all_from_index! unless method_defined? :remove_all_from_index!
109
+ alias_method :reindex, :solr_reindex unless method_defined? :reindex
110
+ alias_method :index, :solr_index unless method_defined? :index
111
+ alias_method :index_orphans, :solr_index_orphans unless method_defined? :index_orphans
112
+ alias_method :clean_index_orphans, :solr_clean_index_orphans unless method_defined? :clean_index_orphans
113
+ end
114
+ end
115
+ #
116
+ # Search for instances of this class in Solr. The block is delegated to
117
+ # the Sunspot.search method - see the Sunspot documentation for the full
118
+ # API.
119
+ #
120
+ # ==== Example
121
+ #
122
+ # Post.search(:include => [:blog]) do
123
+ # keywords 'best pizza'
124
+ # with :blog_id, 1
125
+ # order :updated_at, :desc
126
+ # facet :category_ids
127
+ # end
128
+ #
129
+ # ==== Options
130
+ #
131
+ # :include:: Specify associations to eager load
132
+ # :select:: Specify columns to select from database when loading results
133
+ #
134
+ # ==== Returns
135
+ #
136
+ # Sunspot::Search:: Object containing results, totals, facets, etc.
137
+ #
138
+ def solr_search(options = {}, &block)
139
+ solr_execute_search(options) do
140
+ Sunspot.new_search(self, &block)
141
+ end
142
+ end
143
+
144
+ #
145
+ # Get IDs of matching results without loading the result objects from
146
+ # the database. This method may be useful if search is used as an
147
+ # intermediate step in a larger find operation. The block is the same
148
+ # as the block provided to the #search method.
149
+ #
150
+ # ==== Returns
151
+ #
152
+ # Array:: Array of IDs, in the order returned by the search
153
+ #
154
+ def solr_search_ids(&block)
155
+ solr_execute_search_ids do
156
+ solr_search(&block)
157
+ end
158
+ end
159
+
160
+ #
161
+ # Remove instances of this class from the Solr index.
162
+ #
163
+ def solr_remove_all_from_index
164
+ Sunspot.remove_all(self)
165
+ end
166
+
167
+ #
168
+ # Remove all instances of this class from the Solr index and immediately
169
+ # commit.
170
+ #
171
+ #
172
+ def solr_remove_all_from_index!
173
+ Sunspot.remove_all!(self)
174
+ end
175
+
176
+ #
177
+ # Completely rebuild the index for this class. First removes all
178
+ # instances from the index, then loads records and indexes them.
179
+ #
180
+ # See #index for information on options, etc.
181
+ #
182
+ def solr_reindex(options = {})
183
+ solr_remove_all_from_index
184
+ solr_index(options)
185
+ end
186
+
187
+ #
188
+ # Add/update all existing records in the Solr index. The
189
+ # +batch_size+ argument specifies how many records to load out of the
190
+ # database at a time. The default batch size is 500; if nil is passed,
191
+ # records will not be indexed in batches. By default, a commit is issued
192
+ # after each batch; passing +false+ for +batch_commit+ will disable
193
+ # this, and only issue a commit at the end of the process. If associated
194
+ # objects need to indexed also, you can specify +include+ in format
195
+ # accepted by MongoMapper to improve your sql select performance
196
+ #
197
+ # ==== Options (passed as a hash)
198
+ #
199
+ # batch_size<Integer>:: Batch size with which to load records. Passing
200
+ # 'nil' will skip batches. Default is 500.
201
+ # batch_commit<Boolean>:: Flag signalling if a commit should be done after
202
+ # after each batch is indexed, default is 'true'
203
+ # include<Mixed>:: include option to be passed to the MongoMapper find,
204
+ # used for including associated objects that need to be
205
+ # indexed with the parent object, accepts all formats
206
+ # MongoMapper::Base.find does
207
+ # first_id:: The lowest possible ID for this class. Defaults to 0, which
208
+ # is fine for integer IDs; string primary keys will need to
209
+ # specify something reasonable here.
210
+ #
211
+ # ==== Examples
212
+ #
213
+ # # index in batches of 500, commit after each
214
+ # Post.index
215
+ #
216
+ # # index all rows at once, then commit
217
+ # Post.index(:batch_size => nil)
218
+ #
219
+ # # index in batches of 500, commit when all batches complete
220
+ # Post.index(:batch_commit => false)
221
+ #
222
+ # # include the associated +author+ object when loading to index
223
+ # Post.index(:include => :author)
224
+ #
225
+ def solr_index(opts={})
226
+ options = { :batch_size => 500, :batch_commit => true, :include => self.sunspot_options[:include], :first_id => 0}.merge(opts)
227
+ unless options[:batch_size]
228
+ Sunspot.index!(all(:include => options[:include]))
229
+ else
230
+ offset = 0
231
+ counter = 1
232
+ record_count = count
233
+ last_id = options[:first_id]
234
+ while(offset < record_count)
235
+ solr_benchmark options[:batch_size], counter do
236
+ records = all(:include => options[:include], :conditions => ["#{table_name}.#{primary_key} > ?", last_id], :limit => options[:batch_size], :order => primary_key)
237
+ Sunspot.index(records)
238
+ last_id = records.last.id
239
+ end
240
+ Sunspot.commit if options[:batch_commit]
241
+ offset += options[:batch_size]
242
+ counter += 1
243
+ end
244
+ Sunspot.commit unless options[:batch_commit]
245
+ end
246
+ end
247
+
248
+ #
249
+ # Return the IDs of records of this class that are indexed in Solr but
250
+ # do not exist in the database. Under normal circumstances, this should
251
+ # never happen, but this method is provided in case something goes
252
+ # wrong. Usually you will want to rectify the situation by calling
253
+ # #clean_index_orphans or #reindex
254
+ #
255
+ # ==== Returns
256
+ #
257
+ # Array:: Collection of IDs that exist in Solr but not in the database
258
+ def solr_index_orphans
259
+ count = self.count
260
+ indexed_ids = solr_search_ids { paginate(:page => 1, :per_page => count) }.to_set
261
+ all(:select => 'id').each do |object|
262
+ indexed_ids.delete(object.id)
263
+ end
264
+ indexed_ids.to_a
265
+ end
266
+
267
+ #
268
+ # Find IDs of records of this class that are indexed in Solr but do not
269
+ # exist in the database, and remove them from Solr. Under normal
270
+ # circumstances, this should not be necessary; this method is provided
271
+ # in case something goes wrong.
272
+ #
273
+ def solr_clean_index_orphans
274
+ solr_index_orphans.each do |id|
275
+ new do |fake_instance|
276
+ fake_instance.id = id
277
+ end.solr_remove_from_index
278
+ end
279
+ end
280
+
281
+ #
282
+ # Classes that have been defined as searchable return +true+ for this
283
+ # method.
284
+ #
285
+ # ==== Returns
286
+ #
287
+ # +true+
288
+ #
289
+ def searchable?
290
+ true
291
+ end
292
+
293
+ def solr_execute_search(options = {})
294
+ options.assert_valid_keys(:include, :select)
295
+ search = yield
296
+ unless options.empty?
297
+ search.build do |query|
298
+ if options[:include]
299
+ query.data_accessor_for(self).include = options[:include]
300
+ end
301
+ if options[:select]
302
+ query.data_accessor_for(self).select = options[:select]
303
+ end
304
+ end
305
+ end
306
+ search.execute
307
+ end
308
+
309
+ def solr_execute_search_ids(options = {})
310
+ search = yield
311
+ search.raw_results.map { |raw_result| raw_result.primary_key.to_i }
312
+ end
313
+
314
+ protected
315
+
316
+ #
317
+ # Does some logging for benchmarking indexing performance
318
+ #
319
+ def solr_benchmark(batch_size, counter, &block)
320
+ start = Time.now
321
+ logger.info("[#{Time.now}] Start Indexing")
322
+ yield
323
+ elapsed = Time.now-start
324
+ logger.info("[#{Time.now}] Completed Indexing. Rows indexed #{counter * batch_size}. Rows/sec: #{batch_size/elapsed.to_f} (Elapsed: #{elapsed} sec.)")
325
+ end
326
+
327
+ end
328
+
329
+ module InstanceMethods
330
+ def self.included(base) #:nodoc:
331
+ base.module_eval do
332
+ alias_method :index, :solr_index unless method_defined? :index
333
+ alias_method :index!, :solr_index! unless method_defined? :index!
334
+ alias_method :remove_from_index, :solr_remove_from_index unless method_defined? :remove_from_index
335
+ alias_method :remove_from_index!, :solr_remove_from_index! unless method_defined? :remove_from_index!
336
+ alias_method :more_like_this, :solr_more_like_this unless method_defined? :more_like_this
337
+ alias_method :more_like_this_ids, :solr_more_like_this_ids unless method_defined? :more_like_this_ids
338
+ end
339
+ end
340
+ #
341
+ # Index the model in Solr. If the model is already indexed, it will be
342
+ # updated. Using the defaults, you will usually not need to call this
343
+ # method, as models are indexed automatically when they are created or
344
+ # updated. If you have disabled automatic indexing (see
345
+ # ClassMethods#searchable), this method allows you to manage indexing
346
+ # manually.
347
+ #
348
+ def solr_index
349
+ Sunspot.index(self)
350
+ end
351
+
352
+ #
353
+ # Index the model in Solr and immediately commit. See #index
354
+ #
355
+ def solr_index!
356
+ Sunspot.index!(self)
357
+ end
358
+
359
+ #
360
+ # Remove the model from the Solr index. Using the defaults, this should
361
+ # not be necessary, as models will automatically be removed from the
362
+ # index when they are destroyed. If you disable automatic removal
363
+ # (which is not recommended!), you can use this method to manage removal
364
+ # manually.
365
+ #
366
+ def solr_remove_from_index
367
+ Sunspot.remove(self)
368
+ end
369
+
370
+ #
371
+ # Remove the model from the Solr index and commit immediately. See
372
+ # #remove_from_index
373
+ #
374
+ def solr_remove_from_index!
375
+ Sunspot.remove!(self)
376
+ end
377
+
378
+ def solr_more_like_this(*args, &block)
379
+ options = args.extract_options!
380
+ self.class.solr_execute_search(options) do
381
+ Sunspot.new_more_like_this(self, *args, &block)
382
+ end
383
+ end
384
+
385
+ def solr_more_like_this_ids(&block)
386
+ self.class.solr_execute_search_ids do
387
+ solr_more_like_this(&block)
388
+ end
389
+ end
390
+
391
+ private
392
+
393
+ def maybe_mark_for_auto_indexing
394
+ @marked_for_auto_indexing =
395
+ if !new_record? && ignore_attributes = self.class.sunspot_options[:ignore_attribute_changes_of]
396
+ @marked_for_auto_indexing = !(changed.map { |attr| attr.to_sym } - ignore_attributes).blank?
397
+ else
398
+ true
399
+ end
400
+ true
401
+ end
402
+
403
+ def maybe_auto_index
404
+ if @marked_for_auto_indexing
405
+ solr_index
406
+ remove_instance_variable(:@marked_for_auto_indexing)
407
+ end
408
+ end
409
+ end
410
+ end
411
+ end
412
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 11
9
- version: 0.3.11
8
+ - 12
9
+ version: 0.3.12
10
10
  platform: ruby
11
11
  authors:
12
12
  - Alexey Petrushin
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-21 00:00:00 +04:00
17
+ date: 2010-04-22 00:00:00 +04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -81,8 +81,10 @@ files:
81
81
  - .git/objects/08/bba6f68e3626f05fcfa8bcd10714aac9943407
82
82
  - .git/objects/08/f5dafa9123b7f8d1f22a796c4cba4a4063ad0d
83
83
  - .git/objects/09/20505d42c0044b31ff7b1f86cec6e282e13414
84
+ - .git/objects/0b/1a882513f514fe05177cc54f4480141b195956
84
85
  - .git/objects/0b/3b3d1048f25fdc0de3f680cdbbd867a42b5a95
85
86
  - .git/objects/0b/68897860be3a4a765d6f1788ea4a0e91ff8c6c
87
+ - .git/objects/0b/b62f25b6636b2ce32ebd4551120f5765b787e1
86
88
  - .git/objects/0b/e101a0586410212b4ee5905881ad726b7b4907
87
89
  - .git/objects/0c/4df6bee8ffbfd79927b23a070a4c9a41991152
88
90
  - .git/objects/0d/aa3468e187093eff222b8094a6e702dea9ba4e
@@ -161,6 +163,7 @@ files:
161
163
  - .git/objects/2d/043376f1bc26b2dad3e79fc72ea14341ea437d
162
164
  - .git/objects/2e/3e3fc8e46949a9b944da3c36207c444aa2c9b7
163
165
  - .git/objects/2e/f02adc5485c579d75dfacf7034b20760f2fdf4
166
+ - .git/objects/2f/af7acb8454f4b248d928b9a92f09571302a174
164
167
  - .git/objects/30/69d4978bbdfacf4402c4339438b29657275f2c
165
168
  - .git/objects/30/e5bf9c61cc450f8024ab7029a490d7fb9f3ff7
166
169
  - .git/objects/31/2f74fcf97e832a3493accaf640f001d6d85170
@@ -309,6 +312,7 @@ files:
309
312
  - .git/objects/79/4750e930e297c9616e902898f684967c2760c7
310
313
  - .git/objects/79/f570c126c66576fc1a5eaa52f003cf1b24e0d2
311
314
  - .git/objects/7a/d62f1e2a8e4af39d293ce70c5dca999263ab4e
315
+ - .git/objects/7b/469d63569dcc92c82f90fc7a48793c31365f9a
312
316
  - .git/objects/7b/f12fa27542b09a968ac9b1ceedc1a71bfd6ce8
313
317
  - .git/objects/7c/d6496ed2dbb6dc550d2080954a5485bff16e7f
314
318
  - .git/objects/7c/ecdf8b52167f490bafb6948b0413855923e3d4
@@ -351,9 +355,11 @@ files:
351
355
  - .git/objects/90/57dd59aea225dd8f4b1dfa3e10c6096671fab9
352
356
  - .git/objects/90/5fe8a081a30b8d3d198590c434e8d0e3b0a4a2
353
357
  - .git/objects/90/8c06f1a239ced6b5784c851e30c8df6780fcce
358
+ - .git/objects/90/a3187c0cfd6ae0de236633da361820a4cf1b19
354
359
  - .git/objects/90/ad7b150bde29d3a30f4a8ddd2463249e6c4418
355
360
  - .git/objects/90/ca84ea326afab5fcc92a50469c2052ebc46f11
356
361
  - .git/objects/92/dc044f4d69a5cb3a6a3109c2ce6b7f90bac2ab
362
+ - .git/objects/92/debcedcd81c328806dc7506b3cd91990bb9775
357
363
  - .git/objects/92/e1c250edfca72ed0932934257ef3cfc7122ec5
358
364
  - .git/objects/92/e1f3936e7c33007d0a466b836804450992a1eb
359
365
  - .git/objects/93/f9a6b596879347290cde161b03052bb22021de
@@ -525,6 +531,7 @@ files:
525
531
  - .git/objects/e3/cde2715e3e3870a5d7312cac9bbf6e24259e0f
526
532
  - .git/objects/e4/1d46e33f52e07b836b966d58677fc2a864a4a4
527
533
  - .git/objects/e4/d7cacac2d7e66df5a7c21eaae71c0a90f1439d
534
+ - .git/objects/e5/18de391d5b9dee87ec6f749900785f3b24dad0
528
535
  - .git/objects/e5/7fa5fd7f10f6f532742b0cc2dc3edaed6c0763
529
536
  - .git/objects/e6/4d9b4d86a001e4f882a9842a8dd4368001c470
530
537
  - .git/objects/e6/ed7d272f8c48a28904007d653837bfe761be36
@@ -567,6 +574,7 @@ files:
567
574
  - .git/objects/f6/b9bcda0a6940c634c0ac0d6ac626028927e1da
568
575
  - .git/objects/f7/32b167a61d8db0328f0196af00b55147ebf756
569
576
  - .git/objects/f7/b177b2c6b25dd886d23d6be87bcf802af9b513
577
+ - .git/objects/f7/be86378738705bbd1f97dd8be92c3cc7d54a66
570
578
  - .git/objects/f8/9eb17d4ff10a745b70063cf5b8ff76ec66e102
571
579
  - .git/objects/f9/8d0f95460a7a3f63ab4c08ad5508fd32d1b5c2
572
580
  - .git/objects/f9/cf98993bf7067d5b45b0f06dc36fdedba5ffcf
@@ -651,6 +659,8 @@ files:
651
659
  - lib/rails_ext/micelaneous/rails_require.rb
652
660
  - lib/rails_ext/micelaneous/safe_hash.rb
653
661
  - lib/rails_ext/micelaneous.rb
662
+ - lib/sunspot/mongo_mapper/adapters.rb
663
+ - lib/sunspot/mongo_mapper/searchable.rb
654
664
  - spec/mongo_mapper_ext/micelaneous_plugin_spec.rb
655
665
  - spec/mongo_mapper_ext/micelaneous_spec.rb
656
666
  - spec/mongo_mapper_ext/mongo_mapper_migration_spec.rb