# File lib/criteria.rb, line 58 def [](*args) if @field.is_a?(Criterion) field = @field[*args] args.shift else field = @field end chain = @chain.map { | link | if link.is_a?(Placeholder) args.shift elsif link.is_a?(Criterion) link[*args] else link end } # This is somewhat evil, but not as evil as doing it manually q = self.dup q.instance_eval { @field = field @chain = chain } return q end