Class: RepositoryUpdateRules
- Inherits:
-
Object
- Object
- RepositoryUpdateRules
- 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
- .empty ⇒ Object
- .from_hash(config = {}, source: "repo rules", **keyword_config) ⇒ Object
- .load_file(path) ⇒ Object
- .record_value(record, key) ⇒ Object
- .semver(value) ⇒ Object
Instance Method Summary collapse
- #empty? ⇒ Boolean
-
#initialize(rules_by_repo) ⇒ RepositoryUpdateRules
constructor
A new instance of RepositoryUpdateRules.
- #suppressed?(record) ⇒ Boolean
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
.empty ⇒ Object
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
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.}") 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
199 200 201 |
# File 'lib/spm_version_updates/repository_update_rules.rb', line 199 def empty? @rules_by_repo.empty? end |
#suppressed?(record) ⇒ 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 |