class GemsBond::Fetchers::RubyGems

Fetches data from RubyGems

Public Class Methods

new(name) click to toggle source

Initializes an instance @param name [String] name of the gem @return [GemsBond::Fetchers::RubyGems]

Calls superclass method GemsBond::Fetchers::Fetcher::new
# File lib/gems_bond/fetchers/ruby_gems.rb, line 14
def initialize(name)
  super(name)
  @name = name
end

Public Instance Methods

days_since_last_version() click to toggle source

Returns number of days since last version @return [Integer]

# File lib/gems_bond/fetchers/ruby_gems.rb, line 75
def days_since_last_version
  return unless last_version_date

  Integer(Date.today - last_version_date)
end
downloads_count() click to toggle source

Returns number of downloads @return [Integer]

# File lib/gems_bond/fetchers/ruby_gems.rb, line 38
def downloads_count
  Gems.total_downloads(@name)[:total_downloads]
end
info() click to toggle source

Returns gem description @return [String]

# File lib/gems_bond/fetchers/ruby_gems.rb, line 32
def info
  @info["info"]
end
last_version() click to toggle source

Returns last version number @return [String]

# File lib/gems_bond/fetchers/ruby_gems.rb, line 63
def last_version
  versions&.first&.dig(:number)
end
last_version_date() click to toggle source

Returns last version date @return [Date]

# File lib/gems_bond/fetchers/ruby_gems.rb, line 69
def last_version_date
  versions&.first&.dig(:created_at)
end
source_code_uri() click to toggle source

Returns source code URI @return [String]

# File lib/gems_bond/fetchers/ruby_gems.rb, line 44
def source_code_uri
  @info["source_code_uri"]
end
start() click to toggle source

Starts the service @return [Boolean] @note rescue connection errors with nil

Calls superclass method GemsBond::Fetchers::Fetcher#start
# File lib/gems_bond/fetchers/ruby_gems.rb, line 22
def start
  super
  # ensure gem exists (otherwise it raises Gems error)
  @info = Gems.info(@name)
rescue Gems::NotFound
  stop
end
versions() click to toggle source

Returns versions data (number, date and if it is a prerelease) @return [Array<Hash>] @note each hash structure: { number: String, created_at: Date, prerelease: Boolean }

# File lib/gems_bond/fetchers/ruby_gems.rb, line 51
def versions
  Gems.versions(@name).map do |version|
    {
      number: version["number"],
      created_at: Date.parse(version["created_at"]),
      prerelease: version["prerelease"]
    }
  end
end