class Outdated::RubyGems::Gem

Attributes

specs[R]

Public Class Methods

from_response(name, response) click to toggle source
# File lib/outdated/ruby_gems/gem.rb, line 4
def self.from_response(name, response)
  return new if response.code == 404

  body = response.body
  specs = JSON.parse(body).map { |spec| Outdated::RubyGems::Spec.from_response_object(name, spec) }
  new(specs)
end
new(specs = []) click to toggle source
# File lib/outdated/ruby_gems/gem.rb, line 14
def initialize(specs = [])
  @specs = specs

  raise ArgumentError, "conflicting spec names" unless specs.uniq(&:name).count < 2
end

Public Instance Methods

empty?() click to toggle source
# File lib/outdated/ruby_gems/gem.rb, line 24
def empty?
  specs.empty?
end
first() click to toggle source
# File lib/outdated/ruby_gems/gem.rb, line 32
def first
  specs.first
end
get(version) click to toggle source
# File lib/outdated/ruby_gems/gem.rb, line 36
def get(version)
  specs.find { |spec| spec.version == version }
end
name() click to toggle source
# File lib/outdated/ruby_gems/gem.rb, line 20
def name
  specs.first.name
end
recommend(currently_used_spec, cut_off) click to toggle source
# File lib/outdated/ruby_gems/gem.rb, line 40
def recommend(currently_used_spec, cut_off)
  recommended_spec = specs.find do |spec|
    semver = spec.version.to_s.split(/\./).map(&:to_i)
    currently_used_semver = currently_used_spec.version.to_s.split(/\./).map(&:to_i)
    prerelease = spec.prerelease
    too_new = cut_off < spec.created_at
    minor_or_major_upgrade =
      semver[0] > currently_used_semver[0] || semver[1] > currently_used_semver[1]

    !prerelease && !too_new && !minor_or_major_upgrade
  end

  code =
    if recommended_spec.nil?
      Outdated::IMMATURE
    elsif recommended_spec > currently_used_spec
      Outdated::OUTDATED
    elsif recommended_spec < currently_used_spec
      Outdated::IMMATURE
    end

  [recommended_spec, code]
end
size() click to toggle source
# File lib/outdated/ruby_gems/gem.rb, line 28
def size
  specs.size
end