DEV Community

Tomasz Wegrzanowski
Tomasz Wegrzanowski

Posted on

2 1

Open Source Adventures: Episode 38: Update script for Russian Losses App

I linked to the Russian Losses App many times in various internet arguments. It doesn't currently have a permanent URL for the latest version, and various versions just reflect state of the code at given point.

It makes sense to keep the code as is, but I still want each version to have the latest data. So I wrote this script:

#!/usr/bin/env ruby

require "pathname"

class UpdateCSV
  def initialize(archive_path)
    @archive_path = Pathname(archive_path)
  end

  def updated_equipment
    @updated_equipment ||= (@archive_path + "russia_losses_equipment.csv").read
  end

  def updated_personnel
    @updated_personnel ||= (@archive_path + "russia_losses_personnel.csv").read
  end

  def csv_files
    @csv_files ||= `git ls`.lines.map(&:chomp).grep(/\.csv\z/)
  end

  def call
    csv_files.each do |path|
      case path
      when /russia_losses_equipment/
        Pathname(path).write(updated_equipment)
      when /russia_losses_personnel/
        Pathname(path).write(updated_personnel)
      else
        puts "Unknown CSV file: #{path}"
      end
    end
  end
end

unless ARGV[0]
  STDERR.puts "Usage: #{$0} path_to_updated_archive"
  exit 1
end

UpdateCSV.new(ARGV[0]).call
Enter fullscreen mode Exit fullscreen mode

To run it, I grab updated version from Kaggle, unpack it, and then run the update script.

There's a lot of files it needs to update. The ones in docs are GitHub Pages compiled app:

docs/episode-29/tanks/russia_losses_equipment.csv
docs/episode-29/tanks/russia_losses_personnel.csv
docs/episode-30/russia_losses_equipment.982e4e03.csv
docs/episode-31/russia_losses_equipment.csv
docs/episode-31/russia_losses_personnel.csv
docs/episode-32/russia_losses_equipment.csv
docs/episode-32/russia_losses_personnel.csv
docs/episode-33/russia_losses_equipment.csv
docs/episode-33/russia_losses_personnel.csv
docs/episode-34/russia_losses_equipment.csv
docs/episode-34/russia_losses_personnel.csv
docs/episode-35/russia_losses_equipment.csv
docs/episode-35/russia_losses_personnel.csv
docs/episode-36/russia_losses_equipment.csv
docs/episode-36/russia_losses_personnel.csv
episode-29/tanks/russia_losses_equipment.csv
episode-29/tanks/russia_losses_personnel.csv
episode-30/src/russia_losses_equipment.csv
episode-30/src/russia_losses_personnel.csv
episode-31/public/russia_losses_equipment.csv
episode-31/public/russia_losses_personnel.csv
episode-32/public/russia_losses_equipment.csv
episode-32/public/russia_losses_personnel.csv
episode-33/public/russia_losses_equipment.csv
episode-33/public/russia_losses_personnel.csv
episode-34/public/russia_losses_equipment.csv
episode-34/public/russia_losses_personnel.csv
episode-35/public/russia_losses_equipment.csv
episode-35/public/russia_losses_personnel.csv
episode-36/public/russia_losses_equipment.csv
episode-36/public/russia_losses_personnel.csv
Enter fullscreen mode Exit fullscreen mode

Coming next

Over the next few episodes, I want to add a few new features to the Russian losses tracker.

Do your career a big favor. Join DEV. (The website you're on right now)

It takes one minute, it's free, and is worth it for your career.

Get started

Community matters

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay