module QueryDam::Trackable

Public Instance Methods

get_prior_results() click to toggle source
# File lib/query_dam/concerns/trackable.rb, line 11
def get_prior_results
  @_prior_results = {}

  queries.each do |tracking_key, query|
    @_prior_results[tracking_key] =
      self.class.connection.select_values(query).map(&:to_i)
  end
end
queries() click to toggle source
# File lib/query_dam/concerns/trackable.rb, line 54
def queries
  queries_set = Redis::Set.new(self.class.name)
  queries_set.members.reduce({}) do |acc, tracking_key|
    query_hash = Redis::HashKey.new(tracking_key)
    if query_hash.exists?
      acc.merge(tracking_key => query_hash[:query])
    else
      queries_set.delete(tracking_key)
      acc
    end
  end
end
update_queries() click to toggle source
# File lib/query_dam/concerns/trackable.rb, line 20
def update_queries
  queries.each do |tracking_key, query|
    result = self.class.connection.select_values(query).map(&:to_i)
    added = result - @_prior_results[tracking_key]
    removed = @_prior_results[tracking_key] - result

    additions_set, updates_set, removals_set =
      QueryDam.query_sets(tracking_key)

    updates_set.add(id) if result.include?(id)

    added.each do |record_id|
      if removals_set.member?(record_id)
        removals_set.delete(record_id)
      else
        additions_set.add(record_id)
      end
    end

    removed.each do |record_id|
      updates_set.delete(record_id)

      if additions_set.member?(record_id)
        additions_set.delete(record_id)
      else
        removals_set.add(record_id)
      end
    end

    [additions_set, updates_set, removals_set]
      .each { |set| set.expire(QueryDam.expiration) }
  end
end