Skip to content

Commit 4962f2f

Browse files
authored
Merge pull request #411 from lahlidahlia/main
Check that the card is NSG before serving xlarge images
2 parents 6023cf1 + f29bd90 commit 4962f2f

File tree

5 files changed

+76
-10
lines changed

5 files changed

+76
-10
lines changed

app/models/printing.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ def latest_printing_id
4343
nil
4444
end
4545

46+
def xlarge_image?
47+
# The excluded sets were designed by FFG despite being released by NSG. We do not want to distribute high quality
48+
# versions of them.
49+
released_by == 'null_signal_games' &&
50+
!%w[
51+
system_core_2019
52+
magnum_opus_reprint
53+
salvaged_memories
54+
system_update_2021
55+
].include?(card_set_id)
56+
end
57+
4658
def restrictions
4759
{
4860
banned: restrictions_banned,

app/resources/card_resource.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,10 @@ class CardResource < ApplicationResource # rubocop:disable Metrics/ClassLength
7474

7575
unless @object.num_extra_faces.zero?
7676
@object.face_indices.each do |index|
77-
f = { index:, images: images(@object.latest_printing_id, face_index: index) }
77+
f = { index:,
78+
images: images(@object.latest_printing_id,
79+
@object.printings.order(:date_release).reverse_order.first.xlarge_image?,
80+
face_index: index) }
7881
f[:base_link] = @object.faces_base_link[index] if @object.faces_base_link[index]
7982
f[:display_subtypes] = @object.faces_display_subtypes[index] if @object.faces_display_subtypes[index]
8083
f[:card_subtype_ids] = @object.faces_card_subtype_ids[index].compact if @object.faces_card_subtype_ids[index]
@@ -93,7 +96,8 @@ class CardResource < ApplicationResource # rubocop:disable Metrics/ClassLength
9396
attribute :restrictions, :hash
9497
attribute :latest_printing_id, :string
9598
attribute :latest_printing_images, :hash do
96-
images(@object.latest_printing_id, has_narrative_image: @object.narrative_text.present?)
99+
images(@object.latest_printing_id, @object.printings.order(:date_release).reverse_order.first.xlarge_image?,
100+
has_narrative_image: @object.narrative_text.present?)
97101
end
98102

99103
filter :card_cycle_id, :string do
@@ -163,16 +167,16 @@ class CardResource < ApplicationResource # rubocop:disable Metrics/ClassLength
163167

164168
private
165169

166-
def images(id, has_narrative_image: false, face_index: nil)
170+
def images(id, has_xlarge_image, has_narrative_image: false, face_index: nil)
167171
url_prefix = Rails.configuration.x.printing_images.nrdb_classic_prefix
168172
face_suffix = "-#{face_index}" unless face_index.nil?
169173
image_sizes = {
170174
'tiny' => "#{url_prefix}/tiny/#{id}#{face_suffix}.jpg",
171175
'small' => "#{url_prefix}/small/#{id}#{face_suffix}.jpg",
172176
'medium' => "#{url_prefix}/medium/#{id}#{face_suffix}.jpg",
173-
'large' => "#{url_prefix}/large/#{id}#{face_suffix}.jpg",
174-
'xlarge' => "#{url_prefix}/xlarge/#{id}#{face_suffix}.webp"
177+
'large' => "#{url_prefix}/large/#{id}#{face_suffix}.jpg"
175178
}
179+
image_sizes[:xlarge] = "#{url_prefix}/xlarge/#{id}#{face_suffix}.webp" if has_xlarge_image
176180

177181
image_sizes['narrative'] = "#{url_prefix}/xlarge/#{id}#{face_suffix}-narrative.webp" if has_narrative_image
178182

app/resources/printing_resource.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class PrintingResource < ApplicationResource # rubocop:disable Metrics/ClassLeng
8585
attribute :pronunciation_ipa, :string
8686

8787
attribute :images, :hash do
88-
images(@object.id, has_narrative_image: @object.narrative_text.present?)
88+
images(@object.id, @object.xlarge_image?, has_narrative_image: @object.narrative_text.present?)
8989
end
9090
attribute :card_abilities, :hash
9191
attribute :latest_printing_id, :string
@@ -99,7 +99,7 @@ class PrintingResource < ApplicationResource # rubocop:disable Metrics/ClassLeng
9999

100100
unless @object.num_extra_faces.zero?
101101
@object.face_indices.each do |index|
102-
f = { index:, images: images(@object.id, face_index: index) }
102+
f = { index:, images: images(@object.id, @object.xlarge_image?, face_index: index) }
103103
f[:base_link] = @object.faces_base_link[index] if @object.faces_base_link[index]
104104
f[:copy_quantity] = @object.faces_copy_quantity[index] if @object.faces_copy_quantity[index]
105105
f[:flavor] = @object.faces_flavor[index] if @object.faces_flavor[index]
@@ -179,16 +179,16 @@ class PrintingResource < ApplicationResource # rubocop:disable Metrics/ClassLeng
179179

180180
private
181181

182-
def images(id, has_narrative_image: false, face_index: nil)
182+
def images(id, has_xlarge_image, has_narrative_image: false, face_index: nil)
183183
url_prefix = Rails.configuration.x.printing_images.nrdb_classic_prefix
184184
face_suffix = "-#{face_index}" unless face_index.nil?
185185
image_sizes = {
186186
'tiny' => "#{url_prefix}/tiny/#{id}#{face_suffix}.jpg",
187187
'small' => "#{url_prefix}/small/#{id}#{face_suffix}.jpg",
188188
'medium' => "#{url_prefix}/medium/#{id}#{face_suffix}.jpg",
189-
'large' => "#{url_prefix}/large/#{id}#{face_suffix}.jpg",
190-
'xlarge' => "#{url_prefix}/xlarge/#{id}#{face_suffix}.webp"
189+
'large' => "#{url_prefix}/large/#{id}#{face_suffix}.jpg"
191190
}
191+
image_sizes[:xlarge] = "#{url_prefix}/xlarge/#{id}#{face_suffix}.webp" if has_xlarge_image
192192

193193
image_sizes['narrative'] = "#{url_prefix}/xlarge/#{id}#{face_suffix}-narrative.webp" if has_narrative_image
194194

spec/resources/card_resource_reads_spec.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,31 @@
7272
end
7373
end
7474

75+
describe 'has xlarge image' do
76+
let!(:card) { Card.find('hoshiko_shiro_untold_protagonist') }
77+
78+
it 'has xlarge image' do
79+
params[:filter] = { id: { eq: card.id } }
80+
render
81+
82+
data = jsonapi_data[0]
83+
expect(data.latest_printing_images[:nrdb_classic][:xlarge]).to eq("https://card-images.netrunnerdb.com/v2/xlarge/#{card.latest_printing_id}.webp")
84+
expect(data.faces[0][:images][:nrdb_classic][:xlarge]).to eq("https://card-images.netrunnerdb.com/v2/xlarge/#{card.latest_printing_id}-0.webp")
85+
end
86+
end
87+
88+
describe 'no xlarge image' do
89+
let!(:card) { Card.find('adonis_campaign') }
90+
91+
it 'no xlarge image' do
92+
params[:filter] = { id: { eq: card.id } }
93+
render
94+
95+
data = jsonapi_data[0]
96+
expect(data.latest_printing_images[:nrdb_classic][:xlarge]).to be_falsy
97+
end
98+
end
99+
75100
describe 'filtering' do
76101
let!(:card) { Card.find('pennyshaver') }
77102

spec/resources/printing_resource_reads_spec.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,31 @@
8787
end
8888
end
8989

90+
describe 'has xlarge image' do
91+
let!(:printing) { Printing.find('01072') } # Hoshiko
92+
93+
it 'has xlarge image' do
94+
params[:filter] = { id: { eq: printing.id } }
95+
render
96+
97+
data = jsonapi_data[0]
98+
expect(data.images[:nrdb_classic][:xlarge]).to eq("https://card-images.netrunnerdb.com/v2/xlarge/#{printing.id}.webp")
99+
expect(data.faces[0][:images][:nrdb_classic][:xlarge]).to eq("https://card-images.netrunnerdb.com/v2/xlarge/#{printing.id}-0.webp")
100+
end
101+
end
102+
103+
describe 'no xlarge image' do
104+
let!(:printing) { Printing.find('01056') } # Adonis Campaign
105+
106+
it 'no xlarge image' do
107+
params[:filter] = { id: { eq: printing.id } }
108+
render
109+
110+
data = jsonapi_data[0]
111+
expect(data.images[:nrdb_classic][:xlarge]).to be_falsy
112+
end
113+
end
114+
90115
describe 'filtering' do
91116
let!(:printing) { Printing.find('21180') }
92117

0 commit comments

Comments
 (0)