teamcapybara--capybara/lib/capybara/selector/filters/locator_filter.rb

30 lines
722 B
Ruby

# frozen_string_literal: true
require 'capybara/selector/filters/base'
module Capybara
class Selector
module Filters
class LocatorFilter < NodeFilter
def initialize(block, **options)
super(nil, nil, block, **options)
end
def matches?(node, value, context = nil, exact:)
apply(node, value, true, context, exact: exact, format: context&.default_format)
rescue Capybara::ElementNotFound
false
end
private
def apply(subject, value, skip_value, ctx, **options)
return skip_value if skip?(value)
filter_context(ctx).instance_exec(subject, value, **options, &@block)
end
end
end
end
end