class TenYearsRails::GemInfo

Attributes

gem_specification[R]
name[R]
version[R]

Public Class Methods

all() click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 41
def self.all
  Gem::Specification.each.map do |gem_specification|
    new(gem_specification)
  end
end
new(gem_specification) click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 48
def initialize(gem_specification)
  @gem_specification = gem_specification
  @version = gem_specification.version
  @name = gem_specification.name
end

Public Instance Methods

age() click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 54
def age
  if respond_to?(:time_ago_in_words)
    "#{time_ago_in_words(created_at)} ago"
  else
    created_at.strftime("%b %e, %Y")
  end
end
compatible_with_rails?(rails_version: Gem::Version.new("5.0")) click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 97
def compatible_with_rails?(rails_version: Gem::Version.new("5.0"))
  unsatisfied_rails_dependencies(rails_version: rails_version).empty?
end
created_at() click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 66
def created_at
  @created_at ||= gem_specification.date
end
from_rails?() click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 109
def from_rails?
  rails_gems.include?(name)
end
latest_version() click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 86
def latest_version
  @latest_version ||= begin
    latest_gem_specification = Gem.latest_spec_for(name)
    if latest_gem_specification
      GemInfo.new(latest_gem_specification)
    else
      NullGemInfo.new
    end
  end
end
sourced_from_git?() click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 62
def sourced_from_git?
  !!gem_specification.git_version
end
state(rails_version) click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 74
def state(rails_version)
  if compatible_with_rails?(rails_version: rails_version)
    :compatible
  elsif latest_version.compatible_with_rails?(rails_version: rails_version)
    :latest_compatible
  elsif latest_version.version == "NOT FOUND"
    :no_new_version
  else
    :incompatible
  end
end
unsatisfied_rails_dependencies(rails_version:) click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 101
def unsatisfied_rails_dependencies(rails_version:)
  rails_dependencies = gem_specification.runtime_dependencies.select {|dependency| rails_gems.include?(dependency.name) }

  rails_dependencies.reject do |rails_dependency|
    rails_dependency.requirement.satisfied_by?(Gem::Version.new(rails_version))
  end
end
up_to_date?() click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 70
def up_to_date?
  version == latest_version.version
end

Private Instance Methods

rails_gems() click to toggle source
# File lib/ten_years_rails/gem_info.rb, line 113
        def rails_gems
  [
    "rails",
    "activemodel",
    "activerecord",
    "actionmailer",
    "actioncable",
    "actionpack",
    "actionview",
    "activejob",
    "activestorage",
    "activesupport",
    "railties",
  ]
end