class Filtered::Filter
{{{ FILTER
Attributes
Public Class Methods
Source
# File lib/rbbt/tsv/filter.rb, line 25 def initialize(data, match, value, persistence = nil) @data = data @match = match @value = value @unsaved = [] case when Hash === persistence @persistence = persistence when String === persistence @persistence = Persist.open_tokyocabinet(persistence, false, :list) @persistence = TSV.setup(@persistence) @persistence.read end @list = nil case when @match == :key @value = Set.new(@value) class << self self end.class_eval <<-EOC def match_entry(key, entry) key == @value or (Set === @value and @value.include? key) end EOC when @match.match(/field:(.*)/) @fieldnum = data.identify_field $1 class << self self end.class_eval <<-EOC def match_entry(key, entry) value = entry[@fieldnum] value == @value or (Array === value and value.include? @value) end EOC else raise "Unknown match: #{ @match }" end end
Public Instance Methods
Source
# File lib/rbbt/tsv/filter.rb, line 113 def add_unsaved save(Misc.merge_sorted_arrays(unsaved.sort, saved || [])) if unsaved.any? unsaved.clear end
Source
# File lib/rbbt/tsv/filter.rb, line 133 def clean add_unsaved if persistence and persistence.include? self.key persistence.write_and_close do persistence.delete self.key end #restore = ! persistence.write? #persistence.write unless persistence.write? #persistence.delete self.key #persistence.read if restore else @list = nil end end
Source
# File lib/rbbt/tsv/filter.rb, line 118 def ids add_unsaved list = saved if list.nil? update list = saved end list end
Source
# File lib/rbbt/tsv/filter.rb, line 66 def key case when String === value value else Marshal.dump(value) end end
Source
# File lib/rbbt/tsv/filter.rb, line 148 def reset add_unsaved if persistence persistence.write_and_close do persistence.clear end else @list = nil end end
Source
# File lib/rbbt/tsv/filter.rb, line 75 def save(ids) if persistence persistence.write_and_close do persistence[self.key] = ids end else if @list.nil? @list = ids else @list.replace ids end end end
Source
# File lib/rbbt/tsv/filter.rb, line 101 def saved if persistence.nil? return nil if list.nil? list else return nil if not persistence.include?(self.key) persistence.write_and_close do persistence[self.key] end end end
Source
# File lib/rbbt/tsv/filter.rb, line 89 def update ids = [] data.with_unnamed do data.unfiltered_each do |key, entry| ids << key if match_entry(key, entry) end end save(ids.sort) end