Module: UpdateSeverity
- Defined in:
- lib/spm_version_updates/update_severity.rb
Overview
Classifies semantic-version update deltas for reporting and fail thresholds.
Constant Summary collapse
- LEVELS =
["major", "minor", "patch"].freeze
- SEVERITY_RECORD_TYPES =
["", "version", "above_maximum"].freeze
- THRESHOLD_LEVELS =
{ "major" => ["major"], "minor" => ["major", "minor"], "patch" => ["major", "minor", "patch"] }.freeze
Class Method Summary collapse
- .apply(record) ⇒ Object
- .count_at_or_above(counts, threshold) ⇒ Object
- .counts(records) ⇒ Object
- .for_versions(current_version, available_version) ⇒ Object
- .numeric_delta(current, available) ⇒ Object
- .parse_version(value) ⇒ Object
- .parse_versions(current_version, available_version) ⇒ Object
- .threshold?(value) ⇒ Boolean
- .zero_counts ⇒ Object
Class Method Details
.apply(record) ⇒ Object
15 16 17 18 19 20 |
# File 'lib/spm_version_updates/update_severity.rb', line 15 def self.apply(record) return record unless SEVERITY_RECORD_TYPES.include?(record["type"].to_s) severity = for_versions(record["current_version"], record["available_version"]) severity ? record.merge("severity" => severity) : record end |
.count_at_or_above(counts, threshold) ⇒ Object
37 38 39 |
# File 'lib/spm_version_updates/update_severity.rb', line 37 def self.count_at_or_above(counts, threshold) Array(THRESHOLD_LEVELS[threshold]).sum { |severity| counts.fetch(severity, 0) } end |
.counts(records) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/spm_version_updates/update_severity.rb', line 30 def self.counts(records) records.each_with_object(zero_counts) { |record, result| severity = record["severity"] result[severity] += 1 if result.key?(severity) } end |
.for_versions(current_version, available_version) ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/spm_version_updates/update_severity.rb', line 22 def self.for_versions(current_version, available_version) versions = parse_versions(current_version, available_version) return nil unless versions current, available = versions available > current ? numeric_delta(current, available) : nil end |
.numeric_delta(current, available) ⇒ Object
61 62 63 64 65 66 |
# File 'lib/spm_version_updates/update_severity.rb', line 61 def self.numeric_delta(current, available) return "major" unless available.major == current.major return "minor" unless available.minor == current.minor "patch" end |
.parse_version(value) ⇒ Object
49 50 51 52 53 |
# File 'lib/spm_version_updates/update_severity.rb', line 49 def self.parse_version(value) SpmVersionUpdates::Semver.new(value.to_s) rescue ArgumentError nil end |
.parse_versions(current_version, available_version) ⇒ Object
55 56 57 58 59 |
# File 'lib/spm_version_updates/update_severity.rb', line 55 def self.parse_versions(current_version, available_version) current = parse_version(current_version) available = parse_version(available_version) current && available ? [current, available] : nil end |
.threshold?(value) ⇒ Boolean
41 42 43 |
# File 'lib/spm_version_updates/update_severity.rb', line 41 def self.threshold?(value) THRESHOLD_LEVELS.key?(value) end |
.zero_counts ⇒ Object
45 46 47 |
# File 'lib/spm_version_updates/update_severity.rb', line 45 def self.zero_counts LEVELS.to_h { |severity| [severity, 0] } end |