diff --git a/spec/support/deprecated_classes.rb b/spec/support/deprecated_classes.rb new file mode 100644 index 00000000000..80bb3bd811b --- /dev/null +++ b/spec/support/deprecated_classes.rb @@ -0,0 +1,23 @@ +class ActionView::Helpers::TagHelper::TagBuilder + def self.deprecated_classes + @deprecated_classes ||= begin + YAML.safe_load(File.read(File.expand_path('../../../.erb-lint.yml', __FILE__))). + dig('linters', 'DeprecatedClasses', 'rule_set'). + flat_map { |rule| rule['deprecated'] }. + map { |regex_str| Regexp.new "^#{regex_str}$" } + end + end + + def modified_tag_option(key, value, *rest) + original_result = original_tag_option(key, value, *rest) + return original_result unless key == :class + attribute, classes = original_result.split('=') + classes = classes.tr('"', '').split(/ +/) + regex = self.class.deprecated_classes.find { |r| classes.any? { |c| r =~ c } } + raise "CSS class '#{value}' matched regex for deprecated classes #{regex}" if regex + original_result + end + + alias_method :original_tag_option, :tag_option + alias_method :tag_option, :modified_tag_option +end