lib/foodcritic/rules/fc024.rb
rule "FC024", "Consider adding platform equivalents" do tags %w{portability} RHEL = %w{centos redhat scientific oracle}.freeze recipe do |ast, filename| next if Pathname.new(filename).basename.to_s == "metadata.rb" metadata_path = Pathname.new( File.join(File.dirname(filename), "..", "metadata.rb") ).cleanpath md_platforms = if File.exist?(metadata_path) supported_platforms(read_ast( metadata_path )).map { |p| p[:platform] } else [] end md_platforms = RHEL if md_platforms.empty? ['//method_add_arg[fcall/ident/@value="platform?"]/ arg_paren/args_add_block', "//when"].map do |expr| ast.xpath(expr).map do |whn| platforms = whn.xpath('args_add/ descendant::tstring_content').map do |p| p["value"] end.sort unless platforms.size == 1 || (md_platforms & platforms).empty? whn unless (platforms & RHEL).empty? || ((md_platforms & RHEL) - (platforms & RHEL)).empty? end end.compact end.flatten end end