Module: Seabright::Filters::ClassMethods

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

Instance Method Summary collapse

Instance Method Details

#filter_method(method, filter) ⇒ Object



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

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



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

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

#get_filter(filter) ⇒ Object



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

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
# 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|
					args = send(f,*args)
				end
			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_filters ⇒ Object



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

def method_filters
	@method_filters ||= {}
end

#set_filter(filter) ⇒ Object



38
39
40
41
# File 'lib/redis_object/ext/filters.rb', line 38

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