Sha256: 3e5ba90c08ce1f97b587eb59d4ac259f9d738688858dc715f62124d67e161876
Contents?: true
Size: 1.54 KB
Versions: 4
Compression:
Stored size: 1.54 KB
Contents
module Casino class Projection attr_accessor :target, :pipeline def initialize(klass, pipeline = []) self.target = klass self.pipeline = pipeline end def results target.collection.aggregate(pipeline) end def mongoize(hash) hash.keys.map { |key| build_mongoized_hash(hash, key) }.reduce(&:merge) end def group(conditions) clone_with group: conditions end alias :pivot :group def project(conditions) clone_with project: conditions end alias :describe :project alias :build :project def unwind(conditions) clone_with unwind: conditions end alias :expand :unwind def match(conditions) clone_with match: conditions end alias :where :match alias :find :match def sort(conditions) clone_with sort: conditions end alias :order :sort def skip(conditions) clone_with skip: conditions end alias :offset :skip def limit(conditions) clone_with limit: conditions end private def clone_with(condition) self.class.new target, pipeline + [mongoize(condition)] end def build_mongoized_hash(hash, key) new_key = mongo_ready(key) value = hash[key] value = value.is_a?(Hash) ? mongoize(value) : mongo_ready(value) { new_key => evolve(value) } end def evolve(value) value.class.respond_to?(:evolve) ? value.class.evolve(value) : value end def mongo_ready(object) object.is_a?(Symbol) ? "$#{object}" : object end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
mongoid-casino-0.0.4 | lib/casino/projection.rb |
mongoid-casino-0.0.3 | lib/casino/projection.rb |
mongoid-casino-0.0.2 | lib/casino/projection.rb |
mongoid-casino-0.0.1 | lib/casino/projection.rb |