Sha256: 7a3f39930384a6933e212eae0d5ea7fd4245ac3cdc7c8104d7b7fb9cb330e0e0

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

require "firestore"
require "tools/sync_helpers"

module Icarus
  module Mod
    module Tools
      # Sync methods
      class ProgSync
        include SyncHelpers

        def initialize
          @firestore = Firestore.new
        end

        def progs
          @firestore.progs
        end

        def proginfo_array
          @proginfo_array ||= @firestore.proginfo_list.map do |url|
            retrieve_from_url(url)[:programs].map { |prog| Proginfo.new(prog) if prog[:name] =~ /[a-z0-9]+/i }
          rescue Icarus::Mod::Tools::RequestFailed
            warn "Skipped; Failed to retrieve #{url}"
            next
          rescue JSON::ParserError => e
            warn "Skipped; Invalid JSON: #{e.full_message}"
            next
          end.flatten.compact
        end

        def find_prog(proginfo)
          @firestore.find_by_type(type: "progs", name: proginfo.name, author: proginfo.author)&.id
        end

        def find_proginfo(proginfo)
          @proginfo_array.find { |prog| prog.name == proginfo.name }
        end

        def update(proginfo)
          @firestore.update(:prog, proginfo, merge: false)
        end

        def delete(proginfo)
          @firestore.delete(:prog, proginfo)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
Icarus-Mod-Tools-1.8.0 lib/icarus/mod/tools/prog_sync.rb