module Filtered
Public Class Methods
Source
# File lib/rbbt/tsv/filter.rb, line 162 def self.extended(base) if not base.respond_to? :unfiltered_set class << base attr_accessor :filter_dir, :filters alias unfiltered_set []= alias []= filtered_set alias unfiltered_filename filename alias filename filtered_filename alias unfiltered_keys keys alias keys filtered_keys alias unfiltered_values values alias values filtered_values alias unfiltered_each each alias each filtered_each alias unfiltered_collect collect alias collect filtered_collect alias unfiltered_delete delete alias delete filtered_delete end end base.filters = [] end
}}} FILTER
Public Instance Methods
Source
# File lib/rbbt/tsv/filter.rb, line 268 def add_filter(match, value, persistence = nil) if persistence.nil? and filter_dir persistence = File.join(filter_dir, match.to_s + '.filter') end filter = Filter.new self, match, value, persistence filters.push filter end
Source
# File lib/rbbt/tsv/filter.rb, line 244 def filtered_collect(&block) if filters.empty? self.send(:unfiltered_collect, &block) else ids = filters.inject(nil){|list,filter| list = (list.nil? ? filter.ids.dup : Misc.intersect_sorted_arrays(list, filter.ids.dup))} new = TSV.setup({}, self.options) ids.zip(self.send(:values_at, *ids)).each do |id, values| new[id] = values end new.send :collect, &block end end
Source
# File lib/rbbt/tsv/filter.rb, line 259 def filtered_delete(key) if filters.empty? self.send(:unfiltered_delete, key) else reset_filters self.send :unfiltered_delete, key end end
Source
# File lib/rbbt/tsv/filter.rb, line 230 def filtered_each(&block) if filters.empty? self.send(:unfiltered_each, &block) else ids = filters.inject(nil){|list,filter| list.nil? ? filter.ids.dup : Misc.intersect_sorted_arrays(list, filter.ids.dup)} ids.each do |id| value = self[id] yield id, value if block_given? [id, value] end end end
Source
# File lib/rbbt/tsv/filter.rb, line 192 def filtered_filename if filters.empty? unfiltered_filename else unfiltered_filename + ":Filtered[#{filters.collect{|f| [f.match, Array === f.value ? Misc.digest(:values => f.value) : f.value] * "="} * ", "}]" end end
Source
# File lib/rbbt/tsv/filter.rb, line 211 def filtered_keys with_monitor(false) do if filters.empty? self.send(:unfiltered_keys) else filters.inject(nil){|list,filter| list.nil? ? filter.ids.dup : Misc.intersect_sorted_arrays(list, filter.ids.dup)} end end end
Source
# File lib/rbbt/tsv/filter.rb, line 200 def filtered_set(key, value, clean = false) if filters.empty? self.send(:unfiltered_set, key, value, clean) else filters.each do |filter| filter.add key if filter.match_entry key, value end self.send(:unfiltered_set, key, value, clean) end end
Source
# File lib/rbbt/tsv/filter.rb, line 221 def filtered_values if filters.empty? self.send(:unfiltered_values) else ids = filters.inject(nil){|list,filter| list.nil? ? filter.ids.dup : Misc.intersect_sorted_arrays(list, filter.ids.dup)} self.send :values_at, *ids end end
Source
# File lib/rbbt/tsv/filter.rb, line 277 def pop_filter filters.pop.add_unsaved if filters.any? end
Source
# File lib/rbbt/tsv/filter.rb, line 281 def size filters.empty? ? super : filters.collect{|f| f.ids.length }.min end
Calls superclass method