Class: Capybara::Selector::FilterSet

Inherits:
Object
  • Object
show all
Defined in:
lib/capybara/selector/filter_set.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, &block) ⇒ FilterSet

Returns a new instance of FilterSet.



10
11
12
13
14
15
16
# File 'lib/capybara/selector/filter_set.rb', line 10

def initialize(name, &block)
  @name = name
  @node_filters = {}
  @expression_filters = {}
  @descriptions = Hash.new { |h, k| h[k] = [] }
  instance_eval(&block)
end

Instance Attribute Details

#expression_filtersObject (readonly)

Returns the value of attribute expression_filters.



8
9
10
# File 'lib/capybara/selector/filter_set.rb', line 8

def expression_filters
  @expression_filters
end

#node_filtersObject (readonly)

Returns the value of attribute node_filters.



8
9
10
# File 'lib/capybara/selector/filter_set.rb', line 8

def node_filters
  @node_filters
end

Class Method Details

.add(name, &block) ⇒ Object



71
72
73
# File 'lib/capybara/selector/filter_set.rb', line 71

def add(name, &block)
  all[name.to_sym] = FilterSet.new(name.to_sym, &block)
end

.allObject



67
68
69
# File 'lib/capybara/selector/filter_set.rb', line 67

def all
  @filter_sets ||= {} # rubocop:disable Naming/MemoizedInstanceVariableName
end

.remove(name) ⇒ Object



75
76
77
# File 'lib/capybara/selector/filter_set.rb', line 75

def remove(name)
  all.delete(name.to_sym)
end

Instance Method Details

#describe(what = nil, &block) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/capybara/selector/filter_set.rb', line 27

def describe(what = nil, &block)
  case what
  when nil
    undeclared_descriptions.push block
  when :node_filters
    node_filter_descriptions.push block
  when :expression_filters
    expression_filter_descriptions.push block
  else
    raise ArgumentError, 'Unknown description type'
  end
end

#description(node_filters: true, expression_filters: true, **options) ⇒ Object



40
41
42
43
44
45
46
47
# File 'lib/capybara/selector/filter_set.rb', line 40

def description(node_filters: true, expression_filters: true, **options)
  opts = options_with_defaults(options)
  d = +''
  d += undeclared_descriptions.map { |desc| desc.call(opts).to_s }.join
  d += expression_filter_descriptions.map { |desc| desc.call(opts).to_s }.join if expression_filters
  d += node_filter_descriptions.map { |desc| desc.call(opts).to_s }.join if node_filters
  d
end

#descriptionsObject



49
50
51
52
# File 'lib/capybara/selector/filter_set.rb', line 49

def descriptions
  warn 'DEPRECATED: FilterSet#descriptions is deprecated without replacement'
  [undeclared_descriptions, node_filter_descriptions, expression_filter_descriptions].flatten
end

#expression_filter(name, *types_and_options, &block) ⇒ Object



23
24
25
# File 'lib/capybara/selector/filter_set.rb', line 23

def expression_filter(name, *types_and_options, &block)
  add_filter(name, Filters::ExpressionFilter, *types_and_options, &block)
end

#import(name, filters = nil) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/capybara/selector/filter_set.rb', line 54

def import(name, filters = nil)
  f_set = self.class.all[name]
  filter_selector = filters.nil? ? ->(*) { true } : ->(n, _) { filters.include? n }

  expression_filters.merge!(f_set.expression_filters.select(&filter_selector))
  node_filters.merge!(f_set.node_filters.select(&filter_selector))

  f_set.undeclared_descriptions.each { |desc| describe(&desc) }
  f_set.expression_filter_descriptions.each { |desc| describe(:expression_filters, &desc) }
  f_set.node_filter_descriptions.each { |desc| describe(:node_filters, &desc) }
end

#node_filter(name, *types_and_options, &block) ⇒ Object Also known as: filter



18
19
20
# File 'lib/capybara/selector/filter_set.rb', line 18

def node_filter(name, *types_and_options, &block)
  add_filter(name, Filters::NodeFilter, *types_and_options, &block)
end