Sha256: ee06a684f6b9d4b7241548de5755df30f488389701fa670846201981f88bfbb5
Contents?: true
Size: 1.39 KB
Versions: 1
Compression:
Stored size: 1.39 KB
Contents
module ActsAsFilterable Filters = returning Hash.new([]) do |f| f[:digits] = lambda { |attr| attr.gsub!(/[^\d]*/, "") } f[:lowercase] = lambda { |attr| attr.downcase! } f[:uppercase] = lambda { |attr| attr.upcase! } f[:whitespace] = lambda { |attr| attr.gsub!(/\s+/, " "); attr.strip! } end.freeze module ActiveRecordExt module Base def self.included(klazz) klazz.extend ClassMethods klazz.before_validation :apply_filters end module ClassMethods def self.extended(klazz) ActsAsFilterable::Filters.each_key do |key| klazz.class_eval <<-MACROS, __FILE__, __LINE__ + 1 def self.filter_for_#{key}(*args) filtered_attributes[:#{key}] |= args unless args.empty? end MACROS end 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, attr, ActsAsFilterable::Filters[key] end end end private def apply_filter(record, attr, filter) filter.call(record[attr]) if record[attr].is_a?(String) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
acts_as_filterable-0.2.0 | lib/acts_as_filterable/base.rb |