Class: ProjectDependency
- Inherits:
-
Object
- Object
- ProjectDependency
- Includes:
- ActionView::Helpers::TextHelper
- Defined in:
- app/models/project_dependency.rb
Instance Attribute Summary collapse
-
#key_dependency ⇒ Object
(also: #dependency)
readonly
Returns the value of attribute key_dependency.
-
#project ⇒ Object
readonly
Returns the value of attribute project.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(*args) ⇒ ProjectDependency
constructor
A new instance of ProjectDependency.
- #maintenance_light ⇒ Object
- #maintenance_light_for_latest_release ⇒ Object
- #maintenance_light_for_target_versions ⇒ Object
- #minor_version ⇒ Object
- #minor_versions ⇒ Object
- #nil? ⇒ Boolean
- #patches ⇒ Object
- #releases_since_version ⇒ Object
- #up_to_date? ⇒ Boolean
- #valid? ⇒ Boolean
Constructor Details
#initialize(*args) ⇒ ProjectDependency
Returns a new instance of ProjectDependency.
5 6 7 8 |
# File 'app/models/project_dependency.rb', line 5 def initialize(*args) @project, @key_dependency, @version = args @version = project.dependency_version(key_dependency.slug) if args.length < 3 end |
Instance Attribute Details
#key_dependency ⇒ Object (readonly) Also known as: dependency
Returns the value of attribute key_dependency.
17 18 19 |
# File 'app/models/project_dependency.rb', line 17 def key_dependency @key_dependency end |
#project ⇒ Object (readonly)
Returns the value of attribute project.
17 18 19 |
# File 'app/models/project_dependency.rb', line 17 def project @project end |
#version ⇒ Object (readonly)
Returns the value of attribute version.
17 18 19 |
# File 'app/models/project_dependency.rb', line 17 def version @version end |
Class Method Details
.for(project) ⇒ Object
10 11 12 13 |
# File 'app/models/project_dependency.rb', line 10 def self.for(project) project = ProjectDependencies.new(project) KeyDependency.all.map { |dependency| self.new(project, dependency) }.select(&:valid?) end |
Instance Method Details
#maintenance_light ⇒ Object
61 62 63 64 65 |
# File 'app/models/project_dependency.rb', line 61 def maintenance_light return nil if nil? return maintenance_light_for_target_versions if target_versions.any? maintenance_light_for_latest_release end |
#maintenance_light_for_latest_release ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'app/models/project_dependency.rb', line 81 def maintenance_light_for_latest_release if releases_since_version > 2 MaintenanceLight.new self, "red", "#{releases_since_version} versions out-of-date" elsif releases_since_version == 2 MaintenanceLight.new self, "orange", "#{releases_since_version} versions out-of-date" elsif releases_since_version == 1 MaintenanceLight.new self, "yellow", "1 version out-of-date" elsif version < latest_version MaintenanceLight.new self, "spring-green", "#{pluralize(patches.index(version.to_s), "patches")} out-of-date" else MaintenanceLight.new self, "green", "up-to-date" end end |
#maintenance_light_for_target_versions ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'app/models/project_dependency.rb', line 67 def maintenance_light_for_target_versions return MaintenanceLight.new(self, "green", "Nice! #{project.name} is running the latest version of #{dependency.name}.") if up_to_date? target_versions.each do |target_version| next unless minor_version_of(target_version) == minor_version patches_behind = patchlevel_of(target_version) - patchlevel_of(version) return MaintenanceLight.new(self, "spring-green", "#{project.name} is running a safe version of #{dependency.name}.") if patches_behind <= 0 return MaintenanceLight.new(self, "yellow", "#{project.name} is running a version of #{dependency.name} only #{pluralize(patches_behind, "patch")} behind #{target_version}. It should be a painless upgrade.") end MaintenanceLight.new(self, "red", "#{project.name} is running an older version of #{dependency.name}. Watch for breaking changes!") end |
#minor_version ⇒ Object
22 23 24 |
# File 'app/models/project_dependency.rb', line 22 def minor_version @minor_version ||= minor_version_of(version) end |
#minor_versions ⇒ Object
46 47 48 |
# File 'app/models/project_dependency.rb', line 46 def minor_versions @minor_versions ||= versions.map(&method(:minor_version_of)).uniq end |
#nil? ⇒ Boolean
32 33 34 |
# File 'app/models/project_dependency.rb', line 32 def nil? version.nil? end |
#patches ⇒ Object
50 51 52 53 54 55 56 57 |
# File 'app/models/project_dependency.rb', line 50 def patches @patches ||= begin stringified_versions = versions.map(&:to_s) current_minor_version = stringified_versions.first[/\d+\.\d+/] rx = /^#{current_minor_version}\.\d+$/ stringified_versions.select { |version| version =~ rx } end end |
#releases_since_version ⇒ Object
42 43 44 |
# File 'app/models/project_dependency.rb', line 42 def releases_since_version @releases_since_version ||= minor_versions.index(minor_version) end |
#up_to_date? ⇒ Boolean
36 37 38 |
# File 'app/models/project_dependency.rb', line 36 def up_to_date? @up_to_date ||= (version == target_versions.first) end |
#valid? ⇒ Boolean
28 29 30 |
# File 'app/models/project_dependency.rb', line 28 def valid? version && versions.any? end |