Sha256: e828a89d5df5340126da538068903d9d3f8f9e53c844f4e6b2c2146cfd74c494
Contents?: true
Size: 1.4 KB
Versions: 2
Compression:
Stored size: 1.4 KB
Contents
# frozen_string_literal: true require 'mongo' require_relative '../mixins/packer' module Trifle module Stats module Driver class Mongo include Mixins::Packer attr_accessor :client, :collection_name, :separator def initialize(client, collection_name: 'trifle_stats') @client = client @collection_name = collection_name @separator = '::' end def inc(key:, **values) pkey = key.join(separator) collection.bulk_write( [upsert_operation('$inc', pkey: pkey, values: values)] ) end def set(key:, **values) pkey = key.join(separator) collection.bulk_write( [upsert_operation('$set', pkey: pkey, values: values)] ) end def upsert_operation(operation, pkey:, values:) data = self.class.pack(hash: { data: values }) { update_many: { filter: { key: pkey }, update: { operation => data }, upsert: true } } end def get(key:) pkey = key.join(separator) data = collection.find(key: pkey).limit(1).first return {} if data.nil? || data['data'].nil? data['data'] end private def collection client[collection_name] end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
trifle-stats-0.4.1 | lib/trifle/stats/driver/mongo.rb |
trifle-stats-0.4.0 | lib/trifle/stats/driver/mongo.rb |