Module: Seabright::Filters::ClassMethods

Defined in:
lib/redis_object/ext/filters.rb

Instance Method Summary collapse

Instance Method Details

#filter_method(method, filter) ⇒ Object



51
52
53
54
55
# File 'lib/redis_object/ext/filters.rb', line 51

def filter_method(method, filter)
  method_filters[method.to_sym] ||= []
  method_filters[method.to_sym] << filter.to_sym unless method_filters[method.to_sym].include?(filter.to_sym)
  intercept_for_filters!
end

#filters_for(method) ⇒ Object



61
62
63
# File 'lib/redis_object/ext/filters.rb', line 61

def filters_for(method)
  method_filters[method.to_sym]
end

#get_filter(filter) ⇒ Object



47
48
49
# File 'lib/redis_object/ext/filters.rb', line 47

def get_filter(filter)
  filter_method(:get,filter)
end

#intercept_for_filters!Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/redis_object/ext/filters.rb', line 6

def intercept_for_filters!
  return if @intercept_for_filters
  self.class_eval do
    
    def filtered_method_call(method,*args)
      if filters = self.class.filters_for(method)
        filters.each do |f|
          next unless args.is_a?(Array) and !args[0].nil?
          args = send(f,*args)
        end
      end
      unless args.is_a?(Array)
        args = [nil,nil]
      end
      send("unfiltered_#{method.to_s}".to_sym,*args)
    end
    
    alias_method :unfiltered_get, :get unless method_defined?(:unfiltered_get)
    def get(k)
      filtered_method_call(:get,k)
    end
    
    alias_method :unfiltered_set, :set unless method_defined?(:unfiltered_set)
    def set(k,v)
      filtered_method_call(:set,k,v)
    end
    
    alias_method :unfiltered_setnx, :setnx unless method_defined?(:unfiltered_setnx)
    def setnx(k,v)
      filtered_method_call(:setnx,k,v)
    end
    
  end
  @intercept_for_filters = true
end

#method_filtersObject



57
58
59
# File 'lib/redis_object/ext/filters.rb', line 57

def method_filters
  @method_filters ||= {}
end

#set_filter(filter) ⇒ Object



42
43
44
45
# File 'lib/redis_object/ext/filters.rb', line 42

def set_filter(filter)
  filter_method(:set,filter)
  filter_method(:setnx,filter)
end