Sha256: 81456325ec660095edc9c0a1bf3a711fb0d12c12fa875fee54116c1a01d530d1

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

module CassandraObject
  class Scope
    module FinderMethods
      def find(ids)
        if ids.is_a?(Array)
          find_some(ids)
        else
          find_one(ids)
        end
      end

      def find_by_id(ids)
        find(ids)
      rescue CassandraObject::RecordNotFound
        nil
      end

      def find_in_batches(id, next_cursor = nil)
        obj = self.clone
        obj.is_all = true
        obj.next_cursor = next_cursor
        obj.where_ids(id).execute_paged
      end

      def find_all_in_batches(next_cursor = nil)
        obj = self.clone
        obj.is_all = true
        obj.next_cursor = next_cursor
        obj.execute
      end

      def first
        return limit(1).find_all_in_batches[:results].first if self.schema_type == :dynamic_attributes || self.schema_type == :schemaless
        limit(1).execute.first
      end

      private

      def find_one(id)
        if id.blank?
          raise CassandraObject::RecordNotFound, "Couldn't find #{self.name} with key #{id.inspect}"
        elsif self.schema_type == :dynamic_attributes
          record = where_ids(id).execute
          raise CassandraObject::RecordNotFound if record.empty?
          record
        elsif record = where_ids(id)[0]
          record
        else
          raise CassandraObject::RecordNotFound
        end
      end

      def find_some(ids)
        ids = ids.flatten
        return [] if ids.empty?
        ids = ids.compact.map(&:to_s).uniq
        where_ids(ids).execute
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
extendi-cassandra_object-1.0.7 lib/cassandra_object/scope/finder_methods.rb
extendi-cassandra_object-1.0.6 lib/cassandra_object/scope/finder_methods.rb