Sha256: 42439ae485647972832fd374877ac93f13a421e91df07b6faefce35bfcd5a737

Contents?: true

Size: 1.71 KB

Versions: 5

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    module Capybara
      # Css selector parser.
      # @api private
      class CssAttributesParser
        def initialize(selector)
          @selector = selector
          @state = :initial
          @temp = ''
          @results = {}
          @bracket_count = 0
        end

        # @return [Array<String>]
        def parse # rubocop:disable Metrics/MethodLength
          @selector.each_char do |char|
            if char == '['
              on_bracket_start
            elsif char == ']'
              on_bracket_end
            elsif @state == :inside_attr
              @temp += char
            end
          end
          @results
        end

        private

        def on_bracket_start
          @bracket_count += 1
          if @state == :initial
            @state = :inside_attr
          else
            @temp += '['
          end
        end

        def on_bracket_end
          @bracket_count -= 1
          if @bracket_count.zero?
            @state = :initial
            key, value = @temp.split('=')
            @results[key] = normalize_value(value)
            @temp.clear
          else
            @temp += ']'
          end
        end

        # @param value [String]
        # @return [Boolean, String]
        # @example
        #   normalize_value('true') # => true
        #   normalize_value('false') # => false
        #   normalize_value(nil) # => nil
        #   normalize_value("foo") # => "'foo'"
        def normalize_value(value)
          case value
          when 'true' then true
          when 'false' then false
          when nil then nil
          else "'#{value.gsub(/"|'/, '')}'"
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 3 rubygems

Version Path
rubocop-capybara-2.22.1 lib/rubocop/cop/capybara/mixin/css_attributes_parser.rb
rubocop-capybara-2.22.0 lib/rubocop/cop/capybara/mixin/css_attributes_parser.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/rubocop-capybara-2.21.0/lib/rubocop/cop/capybara/mixin/css_attributes_parser.rb
katalyst-govuk-formbuilder-1.9.2 vendor/bundle/ruby/3.3.0/gems/rubocop-capybara-2.21.0/lib/rubocop/cop/capybara/mixin/css_attributes_parser.rb
rubocop-capybara-2.21.0 lib/rubocop/cop/capybara/mixin/css_attributes_parser.rb