class WebShield::MemoryStore

Public Class Methods

new() click to toggle source
# File lib/web_shield/memory_store.rb, line 6
def initialize
  @data = {}
  @lock = Monitor.new
end

Public Instance Methods

clear() click to toggle source
# File lib/web_shield/memory_store.rb, line 57
def clear
  @data.clear
end
del_from_set(key, vals) click to toggle source
# File lib/web_shield/memory_store.rb, line 39
def del_from_set(key, vals)
  key_data = @data[key]
  return false unless key_data && key_data.is_a?(Set)
  values = vals.is_a?(Array) ? vals.map(&:to_s) : [vals.to_s]
  @lock.synchronize do
    key_data.delete_if {|val| values.include?(val) }
  end
  true
end
incr(key, period = 0) click to toggle source
# File lib/web_shield/memory_store.rb, line 11
def incr(key, period = 0)
  key = key.to_sym
  current_period = period > 0 ? (Time.now.to_i / period) : 0

  @lock.synchronize do
    if @data[key]
      if @data[key][1] == current_period
        @data[key][0] += 1
      else
        @data[key][1] = current_period
        @data[key][0] = 1
      end
    else
      @data[key] = [1, current_period]
      1
    end
  end
end
push_to_set(key, vals) click to toggle source
# File lib/web_shield/memory_store.rb, line 30
def push_to_set(key, vals)
  values = vals.is_a?(Array) ? vals.map(&:to_s) : [vals.to_s]
  @lock.synchronize do
    @data[key] ||= Set.new
    @data[key].merge(values)
  end
  true
end
read_set(key) click to toggle source
# File lib/web_shield/memory_store.rb, line 49
def read_set(key)
  @data[key] || Set.new
end
reset(key) click to toggle source
# File lib/web_shield/memory_store.rb, line 53
def reset(key)
  @data.delete(key.to_sym)
end