This implementation is simple, and is optimized for frequent updates but rare queries. `append` and `prepend` do no extra processing, and no internal memoization is done, since this is not optimized for queries.
This is ideal for use by a example or example group, which may be updated multiple times with globally configured hooks, etc, but will not be queried frequently by other examples or examle groups. @private
# File lib/rspec/core/metadata_filter.rb, line 105 def initialize(applies_predicate) @applies_predicate = applies_predicate @items_and_filters = [] end
# File lib/rspec/core/metadata_filter.rb, line 110 def append(item, metadata) @items_and_filters << [item, metadata] end
# File lib/rspec/core/metadata_filter.rb, line 118 def items_for(request_meta) @items_and_filters.each_with_object([]) do |(item, item_meta), to_return| to_return << item if item_meta.empty? || MetadataFilter.apply?(@applies_predicate, item_meta, request_meta) end end
# File lib/rspec/core/metadata_filter.rb, line 114 def prepend(item, metadata) @items_and_filters.unshift [item, metadata] end