class RSpec::Core::FilterableItemRepository::UpdateOptimized

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 example groups. @private

Attributes

items_and_filters[R]

Public Class Methods

new(applies_predicate) click to toggle source
# File lib/rspec/core/metadata_filter.rb, line 101
def initialize(applies_predicate)
  @applies_predicate = applies_predicate
  @items_and_filters = []
end

Public Instance Methods

append(item, metadata) click to toggle source
# File lib/rspec/core/metadata_filter.rb, line 106
def append(item, metadata)
  @items_and_filters << [item, metadata]
end
delete(item, metadata) click to toggle source
# File lib/rspec/core/metadata_filter.rb, line 114
def delete(item, metadata)
  @items_and_filters.delete [item, metadata]
end
items_for(request_meta) click to toggle source
# 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
prepend(item, metadata) click to toggle source
# File lib/rspec/core/metadata_filter.rb, line 110
def prepend(item, metadata)
  @items_and_filters.unshift [item, metadata]
end