Class: RepositoryUpdateRules

Inherits:
Object
  • Object
show all
Defined in:
lib/spm_version_updates/repository_update_rules.rb

Overview

Loads and evaluates per-repository semantic update suppression rules.

Constant Summary collapse

SEMANTIC_TYPES =
["version", "above_maximum"].freeze
SEVERITY_RANK =
{
  "patch" => 0,
  "minor" => 1,
  "major" => 2
}.freeze
YAML_KEYS =
{
  repositories: "repositories",
  url: "url",
  ignore_until: "ignore-until",
  allowed_updates: "allowed-updates"
}.freeze
VALID_YAML_KEYS =
{
  root: [YAML_KEYS.fetch(:repositories)],
  entry: YAML_KEYS.values_at(:url, :ignore_until, :allowed_updates)
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rules_by_repo) ⇒ RepositoryUpdateRules

Returns a new instance of RepositoryUpdateRules.



195
196
197
# File 'lib/spm_version_updates/repository_update_rules.rb', line 195

def initialize(rules_by_repo)
  @rules_by_repo = rules_by_repo
end

Class Method Details

.emptyObject



57
58
59
# File 'lib/spm_version_updates/repository_update_rules.rb', line 57

def self.empty
  new({})
end

.from_hash(config = {}, source: "repo rules", **keyword_config) ⇒ Object

Raises:

  • (ArgumentError)


69
70
71
72
73
74
75
# File 'lib/spm_version_updates/repository_update_rules.rb', line 69

def self.from_hash(config = {}, source: "repo rules", **keyword_config)
  effective_config = keyword_config.empty? ? config : keyword_config
  effective_config ||= {}
  raise(ArgumentError, "#{source} must contain a YAML mapping") unless effective_config.kind_of?(Hash)

  new(parse_repositories(repositories_from(effective_config, source), source))
end

.load_file(path) ⇒ Object



61
62
63
64
65
66
67
# File 'lib/spm_version_updates/repository_update_rules.rb', line 61

def self.load_file(path)
  path = validated_file_path(path)
  yaml_config = YAML.safe_load_file(path, permitted_classes: [], permitted_symbols: [], aliases: false) || {}
  from_hash(yaml_config, source: path)
rescue Psych::Exception => error
  raise(ArgumentError, "repo-rules YAML is invalid in #{path}: #{error.message}")
end

.record_value(record, key) ⇒ Object



172
173
174
# File 'lib/spm_version_updates/repository_update_rules.rb', line 172

def self.record_value(record, key)
  record[key] || record[key.to_sym]
end

.semver(value) ⇒ Object



77
78
79
80
81
# File 'lib/spm_version_updates/repository_update_rules.rb', line 77

def self.semver(value)
  SpmVersionUpdates::Semver.new(value.to_s)
rescue ArgumentError
  nil
end

Instance Method Details

#empty?Boolean

Returns:

  • (Boolean)


199
200
201
# File 'lib/spm_version_updates/repository_update_rules.rb', line 199

def empty?
  @rules_by_repo.empty?
end

#suppressed?(record) ⇒ Boolean

Returns:

  • (Boolean)


203
204
205
206
207
208
# File 'lib/spm_version_updates/repository_update_rules.rb', line 203

def suppressed?(record)
  return false unless semantic_record?(record)

  rule = @rules_by_repo[normalized_record_url(record)]
  rule ? rule.suppressed?(record) : false
end