class RediSet::Constraint

Constants

UNION_EXPIRATION_PERIOD

Attributes

qualities[R]

Public Class Methods

new(qualities:) click to toggle source
# File lib/redi_set/constraint.rb, line 7
def initialize(qualities:)
  @qualities = qualities

  if qualities.length < 1
    raise ArgumentError, "A constraint must have at least one quality"
  elsif qualities.map(&:attribute).uniq.length != 1
    raise ArgumentError, "All qualities in a constraint must have matching attributes"
  end
end

Public Instance Methods

attribute() click to toggle source
# File lib/redi_set/constraint.rb, line 19
def attribute
  qualities.first.attribute
end
intersection_key() click to toggle source
# File lib/redi_set/constraint.rb, line 27
def intersection_key
  if requires_union?
    union_key
  else
    qualities.first.key
  end
end
requires_union?() click to toggle source
# File lib/redi_set/constraint.rb, line 23
def requires_union?
  qualities.length > 1
end
store_union(redis) click to toggle source
# File lib/redi_set/constraint.rb, line 35
def store_union(redis)
  redis.sunionstore union_key, qualities.map(&:key)
  redis.expire(union_key, UNION_EXPIRATION_PERIOD)
end

Private Instance Methods

union_key() click to toggle source
# File lib/redi_set/constraint.rb, line 42
def union_key
  @_key ||= "#{RediSet.prefix}.union:#{SecureRandom.uuid}"
end