Class: Semverve::RailsConfigMetadata

Inherits:
Object
  • Object
show all
Defined in:
lib/semverve/rails_config_metadata.rb

Overview

Finds and updates Rails-native config version literals.

Constant Summary collapse

DEFAULT_FILE_PATTERNS =

Default Rails config file patterns that can expose an app version.

Returns:

  • (Array<String>)
[
  "config/application.rb",
  "config/environments/*.rb",
  "config/initializers/**/*.rb"
].freeze
VERSION_PATTERN =

Rails config version assignments that are safe to rewrite.

Returns:

  • (Regexp)
/^\s*(?:Rails\.application\.)?config\.x\.version\s*=\s*(?<quote>["'])(?<version>\d+\.\d+\.\d+)\k<quote>/

Instance Method Summary collapse

Constructor Details

#initialize(configuration, current_version) ⇒ Semverve::RailsConfigMetadata

Initializes Rails config metadata scanning.

Parameters:



39
40
41
42
# File 'lib/semverve/rails_config_metadata.rb', line 39

def initialize(configuration, current_version)
  @configuration = configuration
  @current_version = current_version
end

Instance Method Details

#findingsArray<Semverve::Finding>

Rails config metadata findings.

Returns:



48
49
50
# File 'lib/semverve/rails_config_metadata.rb', line 48

def findings
  files.flat_map { |path| findings_for_file(path) }
end

#fixSemverve::FixResult

Replaces safe stale Rails config version literals with the current version.

Returns:



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/semverve/rails_config_metadata.rb', line 56

def fix
  changed_files = []
  replacement_count = 0

  files.each do |path|
    content = File.read(path)
    fixed, count = fixed_content(content)

    next if count.zero?

    File.write(path, fixed)
    changed_files << relative_path(path)
    replacement_count += count
  end

  Semverve::FixResult.new(changed_files: changed_files, replacement_count: replacement_count)
end