module Poro::Context::FindMethods::RootMethods
Provides the delegate methods for the find routines.
These methods are made private so that developers use the main find methods. This makes it easier to change behavior in the future due to the bottlenecking.
Subclasses of Context
should override all of these. See the inline subclassing documentation sections for each method for details.
Public Instance Methods
Calls the relevant finder method on the underlying data store, and converts all the results to plain objects.
One usually calls thrigh through the data_store_find
method with the :all or :many arument.
Use of this method is discouraged as being non-portable, but sometimes there is no alternative but to get right down to the underlying data store.
Note that if this method still isn’t enough, you’ll have to use the data store and convert the objects yourself, like so:
SomeContext.data_store.find_method(arguments).map {{|data| SomeContext.convert_to_plain_object(data)}
Subclassing¶ ↑
Subclasses MUST override this method.
Subclasses are expected to return the results converted to plain objects using
self.convert_to_plain_object(data)
# File lib/poro/context.rb, line 299 def data_store_find_all(*args, &block) return [].map {|data| convert_to_plain_object(data)} end
Calls the relevant finder method on the underlying data store, and converts the result to a plain object.
One usually calls thrigh through the data_store_find
method with the :first or :one arument.
Use of this method is discouraged as being non-portable, but sometimes there is no alternative but to get right down to the underlying data store.
Note that if this method still isn’t enough, you’ll have to use the data store and convert the object yourself, like so:
SomeContext.convert_to_plain_object( SomeContext.data_store.find_method(arguments) )
Subclassing¶ ↑
Subclasses MUST override this method.
Subclasses are expected to return the result converted to a plain object using
self.convert_to_plain_object(data)
# File lib/poro/context.rb, line 324 def data_store_find_first(*args, &block) return convert_to_plain_object(nil) end
Returns an array of all the records that match the following options.
One ususally calls this through find
via the :all or :many argument.
See find
for more help.
Subclassing¶ ↑
Subclasses MUST override this method.
Subclases usually convert the options into a call to data_store_find_all
.
# File lib/poro/context.rb, line 256 def find_all(opts) return data_store_find_all(opts) end
Returns the first record that matches the following options. Use of fetch
is more convenient if finding by ID.
One usually calls this through find
via the :first or :one argument.
See find
for more help.
Subclassing¶ ↑
Subclasses MUST override this method!
They usually take one of several tacts:
-
Convert tothe options and call
data_store_find_first
. -
Set the limit to 1 and call
find_all
.
# File lib/poro/context.rb, line 274 def find_first(opts) hashize_limit(opts[:limit])[:limit] = 1 return find_all(opts) end
Returns the records that correspond to the passed ids (or array of ids).
One usually calls this by giving an array of IDs to the find
method.
Subclassing¶ ↑
Subclasses SHOULD override this method.
By default, this method aggregates separate calls to fetch. For most data stores this makes N calls to the server, decreasing performance.
When possible, this method should be overriden by subclasses to be more efficient, probably calling a find_all
with the IDs, as filtered by the clean_id
private method.
# File lib/poro/context.rb, line 342 def find_with_ids(*ids) ids = ids.flatten return ids.map {|id| fetch(id)} end