Sha256: 49c86e989f042d15a2fd58e0e32232d74595bccfebd91df511c89d1bc7e62a5f

Contents?: true

Size: 1.6 KB

Versions: 15

Compression:

Stored size: 1.6 KB

Contents

module Seabright
	module Filters
		
		module ClassMethods
			
			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
			
			def set_filter(filter)
				filter_method(:set,filter)
				filter_method(:setnx,filter)
			end
			
			def get_filter(filter)
				filter_method(:get,filter)
			end
			
			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
			
			def method_filters
				@method_filters ||= {}
			end
			
			def filters_for(method)
				method_filters[method.to_sym]
			end
			
		end
		
		def self.included(base)
			base.extend(ClassMethods)
		end
		
	end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
redis_object-1.5.1 lib/redis_object/ext/filters.rb
redis_object-1.5.0 lib/redis_object/ext/filters.rb
redis_object-1.4.9 lib/redis_object/ext/filters.rb
redis_object-1.4.8 lib/redis_object/ext/filters.rb
redis_object-1.4.7 lib/redis_object/ext/filters.rb
redis_object-1.4.6 lib/redis_object/ext/filters.rb
redis_object-1.4.5 lib/redis_object/ext/filters.rb
redis_object-1.4.3 lib/redis_object/ext/filters.rb
redis_object-1.4.2 lib/redis_object/ext/filters.rb
redis_object-1.4.1 lib/redis_object/ext/filters.rb
redis_object-1.4.0 lib/redis_object/ext/filters.rb
redis_object-1.3.9 lib/redis_object/ext/filters.rb
redis_object-1.3.8 lib/redis_object/ext/filters.rb
redis_object-1.3.7 lib/redis_object/ext/filters.rb
redis_object-1.3.6 lib/redis_object/ext/filters.rb