class Gamerom::RepoAdapters::Romnation

Romnation - An adapter for the ROMNation repository website

Constants

PLATFORM

Public Class Methods

extract_games(platform) { |extract_games_from_section_pages(platform, section, pages), index| ... } click to toggle source
# File lib/gamerom/repo_adapters/romnation.rb, line 58
def self.extract_games(platform)
  sections.each_with_index do |section, index|
    pages = extract_pages(platform, section)
    yield extract_games_from_section_pages(platform, section, pages), index
  end
end
extract_games_from_section_pages(platform, section, pages) click to toggle source
# File lib/gamerom/repo_adapters/romnation.rb, line 72
def self.extract_games_from_section_pages(platform, section, pages)
  pages.reduce([]) do |section_games, p|
    page = nokogiri_get("https://www.romnation.net/srv/roms/#{platform}/#{section}/page-#{p}_sort-title.html")
    games_links = page.css('table.listings td.title a')
    section_games.append(*games_links.map { |game_link| game(game_link) })
  end
end
extract_pages(platform, section) click to toggle source
# File lib/gamerom/repo_adapters/romnation.rb, line 65
def self.extract_pages(platform, section)
  page = nokogiri_get("https://www.romnation.net/srv/roms/#{platform}/#{section}/sort-title.html")
  pages = ['1']
  pages = page.css('.pagination').first.css('a').map(&:text).map(&:strip).reject(&:empty?) unless page.css('.pagination').empty?
  pages
end
game(game_link) click to toggle source
# File lib/gamerom/repo_adapters/romnation.rb, line 80
def self.game(game_link)
  game_info = GameInfo.new(game_link.text)
  {
    id: game_link['href'].split('/')[3].to_i,
    name: game_link.text,
    region: game_info.region,
    tags: game_info.tags,
  }
end
install(game) { |filename| ... } click to toggle source
# File lib/gamerom/repo_adapters/romnation.rb, line 90
def self.install(game)
  agent = Mechanize.new
  agent.pluggable_parser.default = Mechanize::Download
  agent.user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
  page = agent.get("https://www.romnation.net/download/rom/#{game.id}")

  response = nil
  agent.progressbar do
    response = page.link_with(text: 'Download This Rom').click
  end

  return unless response.code.to_i == 200

  filename = CGI.unescape(response.filename.split('_host=').first)
  FileUtils.mkdir_p(game.filepath)
  response.save!("#{game.filepath}/#{filename}")
  yield [filename]
end
platforms() click to toggle source
# File lib/gamerom/repo_adapters/romnation.rb, line 50
def self.platforms
  PLATFORM
end
sections() click to toggle source
# File lib/gamerom/repo_adapters/romnation.rb, line 54
def self.sections
  ('a'..'z').to_a.unshift('0')
end