# File lib/rbot/core/utils/filters.rb, line 63 def filter(*args) @filters ||= {} if Hash === args.last # the stream is a Hash, check if the previous element is not a Symbol if Symbol === args[-2] ds = DataStream.new(args.pop) else ds = DataStream.new(*args.slice!(-2, 2)) end else # the stream is just whatever else ds = DataStream.new(args.pop) end names = args.dup return ds if names.empty? # check if filters exist missing = names - @filters.keys raise "Missing filters: #{missing.join(', ')}" unless missing.empty? fs = @filters.values_at(*names) fs.inject(ds) { |mid, f| mid = f.call(mid) } end