software_detail_serializer.rb
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
class SoftwareDetailSerializer < Blueprinter::Base
|
||||
field(:software) { |sw, _| SoftwareSerializer.render_as_hash(sw) }
|
||||
field(:releases) { |_, opts| ReleaseSerializer.render_as_hash(opts[:releases]) }
|
||||
field(:latestRelease) { |_, opts| opts[:latest] ? ReleaseSerializer.render_as_hash(opts[:latest]) : nil }
|
||||
field(:webPlayableRelease) { |_, opts| opts[:web_playable] ? ReleaseSerializer.render_as_hash(opts[:web_playable]) : nil }
|
||||
end
|
||||
@@ -0,0 +1,15 @@
|
||||
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.html_folder_path.present? }
|
||||
|
||||
SoftwareDetailSerializer.render_as_hash(software,
|
||||
releases: sorted,
|
||||
latest: latest,
|
||||
web_playable: web_playable
|
||||
)
|
||||
end
|
||||
end
|
||||
@@ -1,4 +1,6 @@
|
||||
class SoftwareHighlightedService
|
||||
include SoftwareResponseBuilder
|
||||
|
||||
def index
|
||||
software = Software.includes(:external_links, :image)
|
||||
.where(highlighted: true)
|
||||
@@ -9,19 +11,4 @@ class SoftwareHighlightedService
|
||||
releases = Release.where(software_id: software.id).to_a
|
||||
build_response(software, releases)
|
||||
end
|
||||
|
||||
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.html_folder_path.present? }
|
||||
|
||||
{
|
||||
software: SoftwareSerializer.render_as_hash(software),
|
||||
releases: ReleaseSerializer.render_as_hash(sorted),
|
||||
latestRelease: latest ? ReleaseSerializer.render_as_hash(latest) : nil,
|
||||
webPlayableRelease: web_playable ? ReleaseSerializer.render_as_hash(web_playable) : nil
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,21 +1,8 @@
|
||||
class SoftwareService
|
||||
include SoftwareResponseBuilder
|
||||
|
||||
def index
|
||||
softwares = Software.includes(:releases, :external_links, :image).all
|
||||
{ softwares: softwares.map { |sw| build_response(sw, sw.releases.to_a) } }
|
||||
end
|
||||
|
||||
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.html_folder_path.present? }
|
||||
|
||||
{
|
||||
software: SoftwareSerializer.render_as_hash(software),
|
||||
releases: ReleaseSerializer.render_as_hash(sorted),
|
||||
latestRelease: latest ? ReleaseSerializer.render_as_hash(latest) : nil,
|
||||
webPlayableRelease: web_playable ? ReleaseSerializer.render_as_hash(web_playable) : nil
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user