Sha256: 4fbaf6fff059f65cca4c2b51e49ab76ca3e839c82088601c20cc4ae4516df3c0
Contents?: true
Size: 1.54 KB
Versions: 1
Compression:
Stored size: 1.54 KB
Contents
# frozen_string_literal: true require_relative "conversion_error" module ERBLint module Linters module ArgumentMappers # Maps element attributes to system arguments. class SystemArguments STRING_PARAMETERS = %w[aria- data-].freeze TEST_SELECTOR_REGEX = /test_selector\((?<selector>.+)\)$/.freeze attr_reader :attribute def initialize(attribute) @attribute = attribute end def to_args if attribute.erb? _, _, code_node = *attribute.node raise ConversionError, "Cannot convert erb block" if code_node.nil? code = code_node.loc.source.strip m = code.match(TEST_SELECTOR_REGEX) raise ConversionError, "Cannot convert erb block" if m.blank? { test_selector: m[:selector].tr("'", '"') } elsif attr_name == "data-test-selector" { test_selector: attribute.value.to_json } elsif attr_name.start_with?(*STRING_PARAMETERS) raise ConversionError, "Cannot convert attribute \"#{attr_name}\" because its value contains an erb block" if attribute.value_node&.children&.any? { |n| n.try(:type) == :erb } # if attribute has no value_node, it means it is a boolean attribute. { "\"#{attr_name}\"" => attribute.value_node ? attribute.value.to_json : true } else raise ConversionError, "Cannot convert attribute \"#{attr_name}\"" end end def attr_name attribute.name end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
primer_view_components-0.0.45 | lib/primer/view_components/linters/argument_mappers/system_arguments.rb |