Sha256: 406add645d61a49e47bdd8da86603025818722d0ad68bbda4c0fb78953981e5e

Contents?: true

Size: 1.08 KB

Versions: 2

Compression:

Stored size: 1.08 KB

Contents

module ActsAsFilterable
  
  module ActiveRecordExt
    
    module Base
      
      def self.included(klazz)
        klazz.extend ClassMethods
        klazz.before_validation :apply_filters
      end
      
      private 
      
      module ClassMethods
        
        def filter_for_digits(*args)
          filtered_attributes[:digits] |= args unless args.empty?
        end
        
        def filters
          @filters ||= returning(Hash.new([])) do |f|
            f[:digits] = /[^\d]*/
          end.freeze
        end
        
        def filtered_attributes
          @filtered_attributes ||= Hash.new []
        end
        
      end
      
      protected
      
      def apply_filters
        self.class.filtered_attributes.each do |key, value|
          value.each do |attr|
           apply_filter self.class.filters[key], attr
          end
        end
      end
      
      private
      
      def apply_filter(filter, attr)
        if not send(attr).blank? and send(attr).is_a?(String)
          send(attr).gsub!(filter, "")
        end
      end
            
    end
  
  end
  
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rares-acts_as_filterable-0.1.3 lib/acts_as_filterable/base.rb
rares-acts_as_filterable-0.1.4 lib/acts_as_filterable/base.rb