Module: RuboCop::Cop::RSpec::CapybaraHelp
- Defined in:
- lib/rubocop/cop/rspec/mixin/capybara_help.rb
Overview
Help methods for capybara.
Class Method Summary collapse
- .include_option?(node, option) ⇒ Boolean
- .replaceable_element?(node, element, attrs) ⇒ Boolean
- .replaceable_pseudo_class?(pseudo_class, locator) ⇒ Boolean
- .replaceable_pseudo_class_not?(locator) ⇒ Boolean
- .replaceable_to_link?(node, attrs) ⇒ Boolean
- .specific_option?(node, locator, element) ⇒ Boolean
- .specific_pseudo_classes?(locator) ⇒ Boolean
Class Method Details
.include_option?(node, option) ⇒ Boolean
74 75 76 |
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 74 def include_option?(node, option) node.each_descendant(:sym).find { |opt| opt.value == option } end |
.replaceable_element?(node, element, attrs) ⇒ Boolean
57 58 59 60 61 62 |
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 57 def replaceable_element?(node, element, attrs) case element when 'link' then replaceable_to_link?(node, attrs) else true end end |
.replaceable_pseudo_class?(pseudo_class, locator) ⇒ Boolean
34 35 36 37 38 39 40 41 |
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 34 def replaceable_pseudo_class?(pseudo_class, locator) return false unless CssSelector.specific_pesudo_classes?(pseudo_class) case pseudo_class when 'not()' then replaceable_pseudo_class_not?(locator) else true end end |
.replaceable_pseudo_class_not?(locator) ⇒ Boolean
45 46 47 48 49 50 51 |
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 45 def replaceable_pseudo_class_not?(locator) locator.scan(/not\(.*?\)/).all? do |negation| CssSelector.attributes(negation).values.all? do |v| v.is_a?(TrueClass) || v.is_a?(FalseClass) end end end |
.replaceable_to_link?(node, attrs) ⇒ Boolean
67 68 69 |
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 67 def replaceable_to_link?(node, attrs) include_option?(node, :href) || attrs.include?('href') end |
.specific_option?(node, locator, element) ⇒ Boolean
14 15 16 17 18 19 20 21 |
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 14 def specific_option?(node, locator, element) attrs = CssSelector.attributes(locator).keys return false unless replaceable_element?(node, element, attrs) attrs.all? do |attr| CssSelector.(element, attr) end end |
.specific_pseudo_classes?(locator) ⇒ Boolean
25 26 27 28 29 |
# File 'lib/rubocop/cop/rspec/mixin/capybara_help.rb', line 25 def specific_pseudo_classes?(locator) CssSelector.pseudo_classes(locator).all? do |pseudo_class| replaceable_pseudo_class?(pseudo_class, locator) end end |