Class: Friendly::Indexer
- Inherits:
-
Object
- Object
- Friendly::Indexer
- Defined in:
- lib/friendly/indexer.rb
Class Attribute Summary (collapse)
-
+ (Object) objects_per_iteration
Returns the value of attribute objects_per_iteration.
Instance Attribute Summary (collapse)
-
- (Object) datastore
readonly
Returns the value of attribute datastore.
-
- (Object) translator
readonly
Returns the value of attribute translator.
Class Method Summary (collapse)
Instance Method Summary (collapse)
-
- (Indexer) initialize(datastore = Friendly.datastore, translator = Translator.new)
constructor
A new instance of Indexer.
- - (Object) populate(klass, index)
Constructor Details
- (Indexer) initialize(datastore = Friendly.datastore, translator = Translator.new)
A new instance of Indexer
19 20 21 22 |
# File 'lib/friendly/indexer.rb', line 19 def initialize(datastore = Friendly.datastore, translator = Translator.new) @datastore = datastore @translator = translator end |
Class Attribute Details
+ (Object) objects_per_iteration
Returns the value of attribute objects_per_iteration
4 5 6 |
# File 'lib/friendly/indexer.rb', line 4 def objects_per_iteration @objects_per_iteration end |
Instance Attribute Details
- (Object) datastore (readonly)
Returns the value of attribute datastore
17 18 19 |
# File 'lib/friendly/indexer.rb', line 17 def datastore @datastore end |
- (Object) translator (readonly)
Returns the value of attribute translator
17 18 19 |
# File 'lib/friendly/indexer.rb', line 17 def translator @translator end |
Class Method Details
+ (Object) instance
10 11 12 |
# File 'lib/friendly/indexer.rb', line 10 def instance @instance ||= new end |
+ (Object) populate(klass, *fields)
6 7 8 |
# File 'lib/friendly/indexer.rb', line 6 def populate(klass, *fields) instance.populate(klass, klass.storage_proxy.index_for_fields(fields)) end |
Instance Method Details
- (Object) populate(klass, index)
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/friendly/indexer.rb', line 24 def populate(klass, index) count = 0 loop do rows = datastore.all(klass, Query.new(:offset! => count, :limit! => objects_per_iteration, :order! => :added_id.asc)) rows.each do |attrs| begin index.create(translator.to_object(klass, attrs)) rescue Sequel::DatabaseError # we can safely swallow this exception because if we've gotten # to this point, we can be pretty sure that it's a duplicate # key error, which just means that the object already exists # in the index end end break if rows.length < objects_per_iteration count += objects_per_iteration end end |