class RailInspector::Configuring::Check::FrameworkDefaults

Attributes

Public Class Methods

# File tools/rail_inspector/lib/rail_inspector/configuring/check/framework_defaults.rb, line 11
def initialize(checker, defaults_by_version, documented_defaults)
  @checker = checker
  @defaults_by_version = defaults_by_version
  @documented_defaults = documented_defaults
end

Public Instance Methods

# File tools/rail_inspector/lib/rail_inspector/configuring/check/framework_defaults.rb, line 17
        def check
          expected_text = +""

          expected_text =
            @defaults_by_version.reverse_each.map { |version, defaults|
              expected_text = +"#### Default Values for Target Version #{version}\n"

              expected_text << "\n" unless defaults.empty?

              defaults.map { |config, value|
                full_config =
                  case config
                  when /^[A-Z]/
                    config
                  when /^self/
                    config.sub("self", "config")
                  else
                    "config.#{config}"
                  end

                "- [`#{full_config}`](##{full_config.tr("._", "-").downcase}): `#{value}`\n"
              }.sort.each { |t| expected_text << t }

              expected_text
            }.join("\n")

          config_diff =
            Tempfile.create("expected") do |doc|
              doc << expected_text
              doc.flush

              Tempfile.create("actual") do |code|
                code << @documented_defaults
                code.flush

                `git diff --color --no-index #{doc.path} #{code.path}`
              end
            end

          checker.errors << <<~MESSAGE unless config_diff.empty?
            #{checker.files.application_configuration}: Incorrect load_defaults docs
            --- Expected
            +++ Actual
            #{config_diff.split("\n")[5..].join("\n")}
          MESSAGE

          checker.doc.versioned_defaults = expected_text
        end