Sha256: 155250109318da8787003ed06356f05c46fb0a7108f0a45b97f65d7467afb7c7

Contents?: true

Size: 1.34 KB

Versions: 8

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

require "firestore"
require "tools/sync/helpers"

module Icarus
  module Mod
    module Tools
      module Sync
        # Sync methods
        class Mods
          include Helpers

          def initialize(client: nil)
            @firestore = client || Firestore.new
          end

          def mods
            @firestore.mods
          end

          def info_array
            @info_array ||= @firestore.modinfo.map do |url|
              retrieve_from_url(url)[:mods].map { |mod| Icarus::Mod::Tools::Modinfo.new(mod) if mod[:name] =~ /[a-z0-9]+/i }
            rescue Icarus::Mod::Tools::Sync::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(modinfo)
            @firestore.find_by_type(type: "mods", name: modinfo.name, author: modinfo.author)&.id
          end

          def find_info(modinfo)
            @info_array.find { |mod| mod.name == modinfo.name }
          end

          def update(modinfo)
            @firestore.update(:mod, modinfo, merge: false)
          end

          def delete(modinfo)
            @firestore.delete(:mod, modinfo)
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
Icarus-Mod-Tools-2.1.2 lib/icarus/mod/tools/sync/mods.rb
Icarus-Mod-Tools-2.1.1 lib/icarus/mod/tools/sync/mods.rb
Icarus-Mod-Tools-2.1.0 lib/icarus/mod/tools/sync/mods.rb
Icarus-Mod-Tools-2.0.4 lib/icarus/mod/tools/sync/mods.rb
Icarus-Mod-Tools-2.0.3 lib/icarus/mod/tools/sync/mods.rb
Icarus-Mod-Tools-2.0.1 lib/icarus/mod/tools/sync/mods.rb
Icarus-Mod-Tools-2.0 lib/icarus/mod/tools/sync/mods.rb
Icarus-Mod-Tools-1.9.0 lib/icarus/mod/tools/sync/mods.rb