web payable and asset view
This commit is contained in:
@@ -3,7 +3,7 @@ ActiveAdmin.register Software do
|
||||
:license, :platform, :status, :highlighted,
|
||||
software_images_attributes: [ :id, :image_id, :is_default, :position, :file_upload, :_destroy ],
|
||||
external_links_attributes: [ :id, :label, :url, :_destroy ],
|
||||
releases_attributes: [ :id, :version, :web_playable, :_destroy,
|
||||
releases_attributes: [ :id, :version, :_destroy,
|
||||
{ release_assets_attributes: [ :id, :kind, :path, :_destroy ] } ]
|
||||
|
||||
menu priority: 2, label: "🎮 Softwares"
|
||||
@@ -127,7 +127,6 @@ ActiveAdmin.register Software do
|
||||
f.inputs "Releases" do
|
||||
f.has_many :releases, allow_destroy: true, new_record: true do |r|
|
||||
r.input :version
|
||||
r.input :web_playable
|
||||
r.has_many :release_assets, allow_destroy: true, new_record: true do |ra|
|
||||
ra.input :kind, as: :select, collection: ReleaseAsset::KINDS, include_blank: false
|
||||
ra.input :path
|
||||
|
||||
@@ -18,13 +18,13 @@ class Release < ApplicationRecord
|
||||
return unless software&.platform == "c64"
|
||||
|
||||
has_html = release_assets.reject(&:marked_for_destruction?).any? { |a| a.kind == "html" }
|
||||
if has_html || web_playable?
|
||||
if has_html
|
||||
errors.add(:base, "C64 releases cannot be web playable (download only)")
|
||||
end
|
||||
end
|
||||
|
||||
def self.ransackable_attributes(auth_object = nil)
|
||||
%w[created_at deleted_at id software_id updated_at version web_playable]
|
||||
%w[created_at deleted_at id software_id updated_at version]
|
||||
end
|
||||
|
||||
def self.ransackable_associations(auth_object = nil)
|
||||
|
||||
@@ -2,9 +2,10 @@ module SoftwareResponseBuilder
|
||||
private
|
||||
|
||||
def build_response(software, releases)
|
||||
sorted = releases.sort_by { |r| r.created_at || Time.at(0) }.reverse
|
||||
latest = sorted.reject { |r| r.version.to_s.start_with?("dev-") }.first
|
||||
web_playable = sorted.find { |r| r.release_assets.any? { |a| a.kind == "html" } }
|
||||
sorted = releases.sort_by { |r| r.created_at || Time.at(0) }.reverse
|
||||
latest = sorted.reject { |r| r.version.to_s.start_with?("dev-") }.first
|
||||
# web-playable, ha az utolsó (stabil) release-nek van webes assetje
|
||||
web_playable = latest if latest&.release_assets&.any? { |a| a.kind == "html" }
|
||||
total_downloads = releases.sum { |r| r.association(:downloads).loaded? ? r.downloads.size : 0 }
|
||||
|
||||
SoftwareDetailSerializer.render_as_hash(software,
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class RemoveWebPlayableFromReleases < ActiveRecord::Migration[8.1]
|
||||
def change
|
||||
remove_column :releases, :web_playable, :boolean, default: false
|
||||
end
|
||||
end
|
||||
@@ -10,7 +10,7 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[8.1].define(version: 2026_08_02_000002) do
|
||||
ActiveRecord::Schema[8.1].define(version: 2026_08_02_000003) do
|
||||
create_table "admin_users", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
|
||||
t.datetime "created_at", null: false
|
||||
t.string "email", default: "", null: false
|
||||
@@ -188,7 +188,6 @@ ActiveRecord::Schema[8.1].define(version: 2026_08_02_000002) do
|
||||
t.bigint "software_id", unsigned: true
|
||||
t.datetime "updated_at", precision: 3
|
||||
t.string "version", limit: 64
|
||||
t.boolean "web_playable", default: false
|
||||
t.index ["deleted_at"], name: "idx_releases_deleted_at"
|
||||
t.index ["software_id"], name: "idx_releases_software_id"
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user