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