Sha256: 91ca6136e7d777bb759b2d738bfdd924833f580a8078720fbff391440b5436ae

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

require "google/cloud"

module GdatastoreMapper
  module Scoping

    def where condition
      return nil unless condition.is_a?(Hash)
      entities = dataset_run(where_query condition)
    end

    def find id
      return nil unless id.is_a?(Fixnum)
      query = Google::Cloud::Datastore::Key.new self.to_s, id.to_i
      entities = GdatastoreMapper::Session.dataset.lookup query
      from_entity entities.first if entities.any?
    end

    def find_by condition
      return nil unless condition.is_a?(Hash)
      where(condition)&.first
    end

    def order condition
      return nil unless condition.is_a?(Hash)
      dataset_run(order_query condition)
    end

    private

    def where_query condition
      query = Google::Cloud::Datastore::Query.new
      query.kind self.to_s
      condition.each do |property, value|
        query.where(property.to_s, '=', value)
      end
      query
    end

    def order_query condition
      query = Google::Cloud::Datastore::Query.new
      query.kind self.to_s
      condition.each do |property, value|
        query.order(property.to_s, value)
      end
      query
    end

    def dataset_run query
      entities = GdatastoreMapper::Session.dataset.run query
      entities.map do |entity|
        from_entity entity
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gdatastore_mapper-0.1.1 lib/gdatastore_mapper/scoping.rb