class GemsComparator::GemInfo

Constants

GITHUB_URLS_PATH

Attributes

after[R]
before[R]
name[R]

Public Class Methods

new(name, before, after) click to toggle source
# File lib/gems_comparator/gem_info.rb, line 11
def initialize(name, before, after)
  @name = name
  @before = before
  @after = after
end

Public Instance Methods

compare_url() click to toggle source
# File lib/gems_comparator/gem_info.rb, line 17
def compare_url
  return unless github_url

  repo = GithubRepository.new(github_url)
  repo.compare(before, after)
rescue StandardError => e
  e.inspect
end
github_url() click to toggle source
# File lib/gems_comparator/gem_info.rb, line 26
def github_url
  return @github_url if instance_variable_defined?(:@github_url)

  @github_url = [
    source_code_uri,
    homepage,
    github_url_from_yaml
  ].map(&method(:normalized_github_url)).compact.first
end
homepage() click to toggle source
# File lib/gems_comparator/gem_info.rb, line 36
def homepage
  spec&.homepage
end
to_h() click to toggle source
# File lib/gems_comparator/gem_info.rb, line 40
def to_h
  attr_names = %i[name before after homepage github_url compare_url]
  attr_names.map { |m| [m, send(m)] }.to_h
end

Private Instance Methods

github_slugs() click to toggle source
# File lib/gems_comparator/gem_info.rb, line 55
def github_slugs
  @github_slugs ||= YAML.load_file(GITHUB_URLS_PATH)
end
github_url_from_yaml() click to toggle source
# File lib/gems_comparator/gem_info.rb, line 59
def github_url_from_yaml
  "https://github.com/#{github_slugs[name]}" if github_slugs.key?(name)
end
normalized_github_url(url) click to toggle source
# File lib/gems_comparator/gem_info.rb, line 47
def normalized_github_url(url)
  return unless url.include?('github.com')

  Octokit::Repository.from_url(url).url
rescue URI::InvalidURIError, Octokit::InvalidRepository, NoMethodError
  nil
end
source_code_uri() click to toggle source
# File lib/gems_comparator/gem_info.rb, line 75
def source_code_uri
  spec&.metadata&.fetch('source_code_uri', nil)
end
spec() click to toggle source
# File lib/gems_comparator/gem_info.rb, line 63
def spec
  @spec ||= Gem::Specification.load(spec_path)
end
spec_path() click to toggle source
# File lib/gems_comparator/gem_info.rb, line 67
def spec_path
  spec_paths = [
    "#{Bundler.specs_path}/#{name}-#{after}.gemspec",
    "#{Bundler.specs_path}/#{name}-#{before}.gemspec"
  ]
  spec_paths.find { |path| File.exist?(path) }
end