add bevy and phaser engine support

This commit is contained in:
2026-07-31 18:36:12 +02:00
parent e37e3760ac
commit a275b5e72a
8 changed files with 76 additions and 6 deletions
+2 -2
View File
@@ -37,7 +37,7 @@ ActiveAdmin.register Software do
filter :name
filter :title
filter :author
filter :platform, as: :select, collection: %w[tic80 ebitengine love c64 godot]
filter :platform, as: :select, collection: %w[tic80 ebitengine love c64 godot bevy phaser]
filter :status, as: :select, collection: %w[development demo released archived]
filter :highlighted
@@ -93,7 +93,7 @@ ActiveAdmin.register Software do
f.input :name
f.input :title
f.input :author
f.input :platform, as: :select, collection: %w[tic80 ebitengine love c64 godot]
f.input :platform, as: :select, collection: %w[tic80 ebitengine love c64 godot bevy phaser]
f.input :status, as: :select, collection: %w[development demo released archived]
f.input :highlighted
f.input :license
@@ -37,7 +37,7 @@ class Api::SoftwareController < ApiController
property :desc, String, desc: "Short description"
property :story, String, desc: "Long description / story"
property :license, String, desc: "License type"
property :platform, String, desc: "Platform (tic80, love, ebitengine, c64, godot)"
property :platform, String, desc: "Platform (tic80, love, ebitengine, c64, godot, bevy, phaser)"
property :status, String, desc: "Status (active, inactive)"
property :highlighted, :boolean, desc: "Currently highlighted"
property :imageUrl, String, desc: "Default image URL"
@@ -13,7 +13,7 @@ class Api::SoftwareHighlightedController < ApiController
property :desc, String, desc: "Short description"
property :story, String, desc: "Long description / story"
property :license, String, desc: "License type"
property :platform, String, desc: "Platform (tic80, love, ebitengine, c64, godot)"
property :platform, String, desc: "Platform (tic80, love, ebitengine, c64, godot, bevy, phaser)"
property :status, String, desc: "Status"
property :highlighted, :boolean, desc: "Highlighted flag"
property :imageUrl, String, desc: "Default image URL"
@@ -6,7 +6,7 @@ class UpdateController < ApiController
api :GET, "/update", "Update software version in database"
param :secret, String, required: true, desc: "Authorization secret"
param :platform, String, required: false, desc: "Platform (tic80, love, ebitengine, c64, godot)"
param :platform, String, required: false, desc: "Platform (tic80, love, ebitengine, c64, godot, bevy, phaser)"
param :name, String, required: false, desc: "Software name"
param :version, String, required: true, desc: "Version string"
returns code: 200, desc: "Plain text 'Updated'"
@@ -0,0 +1,22 @@
module SoftwareUpdater
class BevyService < BaseService
def update(name, version)
versioned = "#{name}-#{version}"
extract_zip_to_dir("#{versioned}.html.zip", versioned)
metadata = parse_json_metadata(full_path("#{versioned}.metadata.json"))
site_url = metadata.delete(:site)
ActiveRecord::Base.transaction do
software = update_or_create_software(metadata.merge(platform: "bevy"))
upsert_external_link(software.id, "Source Code", site_url) if site_url.present?
create_release_if_not_exists(
software_id: software.id,
version: version,
html_folder_path: full_path(versioned)
)
end
end
end
end
@@ -0,0 +1,22 @@
module SoftwareUpdater
class PhaserService < BaseService
def update(name, version)
versioned = "#{name}-#{version}"
extract_zip_to_dir("#{versioned}.html.zip", versioned)
metadata = parse_json_metadata(full_path("#{versioned}.metadata.json"))
site_url = metadata.delete(:site)
ActiveRecord::Base.transaction do
software = update_or_create_software(metadata.merge(platform: "phaser"))
upsert_external_link(software.id, "Source Code", site_url) if site_url.present?
create_release_if_not_exists(
software_id: software.id,
version: version,
html_folder_path: full_path(versioned)
)
end
end
end
end
+3 -1
View File
@@ -4,7 +4,9 @@ class UpdateService
"ebitengine" => "SoftwareUpdater::EbitengineService",
"love" => "SoftwareUpdater::LoveService",
"c64" => "SoftwareUpdater::C64Service",
"godot" => "SoftwareUpdater::GodotService"
"godot" => "SoftwareUpdater::GodotService",
"bevy" => "SoftwareUpdater::BevyService",
"phaser" => "SoftwareUpdater::PhaserService"
}.freeze
def update(input)
@@ -31,5 +31,29 @@ RSpec.describe UpdateService do
expect(mock_service).to have_received(:update).with("game", "1.0")
end
it "routes bevy platform to BevyService" do
input = UpdateInputDto.new(platform: "bevy", name: "game", version: "1.0")
mock_service = instance_double(SoftwareUpdater::BevyService)
allow(SoftwareUpdater::BevyService).to receive(:new).and_return(mock_service)
allow(mock_service).to receive(:update)
described_class.new.update(input)
expect(mock_service).to have_received(:update).with("game", "1.0")
end
it "routes phaser platform to PhaserService" do
input = UpdateInputDto.new(platform: "phaser", name: "game", version: "1.0")
mock_service = instance_double(SoftwareUpdater::PhaserService)
allow(SoftwareUpdater::PhaserService).to receive(:new).and_return(mock_service)
allow(mock_service).to receive(:update)
described_class.new.update(input)
expect(mock_service).to have_received(:update).with("game", "1.0")
end
end
end