Class: WebShield::MemoryStore

Inherits:
Object
  • Object
show all
Defined in:
lib/web_shield/memory_store.rb

Instance Method Summary collapse

Constructor Details

#initializeMemoryStore

Returns a new instance of MemoryStore.



6
7
8
9
# File 'lib/web_shield/memory_store.rb', line 6

def initialize
  @data = {}
  @lock = Monitor.new
end

Instance Method Details

#clearObject



57
58
59
# File 'lib/web_shield/memory_store.rb', line 57

def clear
  @data.clear
end

#del_from_set(key, vals) ⇒ Object



39
40
41
42
43
44
45
46
47
# 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) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 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) ⇒ Object



30
31
32
33
34
35
36
37
# 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) ⇒ Object



49
50
51
# File 'lib/web_shield/memory_store.rb', line 49

def read_set(key)
  @data[key] || Set.new
end

#reset(key) ⇒ Object



53
54
55
# File 'lib/web_shield/memory_store.rb', line 53

def reset(key)
  @data.delete(key.to_sym)
end