Skip to content

Commit affb852

Browse files
committed
Automatically remove nil values in metadata
1 parent e988523 commit affb852

4 files changed

Lines changed: 45 additions & 11 deletions

File tree

lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_send_app_size_metrics.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def self.run(params)
2727
plist['variants'].each do |_key, variant|
2828
variant_descriptors = variant['variantDescriptors'] || [{ 'device' => 'Universal' }]
2929
variant_descriptors.each do |desc|
30-
variant_metadata = { device: desc['device'], 'OS Version': desc['os-version'] }.compact
30+
variant_metadata = { device: desc['device'], 'OS Version': desc['os-version'] }
3131
payload.add_metric(name: 'Download Size', value: variant['sizeCompressedApp'], meta: variant_metadata)
3232
payload.add_metric(name: 'Install Size', value: variant['sizeUncompressedApp'], meta: variant_metadata)
3333
end

lib/fastlane/plugin/wpmreleasetoolkit/models/app_size_metrics_payload.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def initialize(group_meta = {})
1717
# @param [Hash] hash The metadata common to all the metrics to set on the whole payload. Can be any arbitrary set of key/value pairs
1818
#
1919
def meta=(hash)
20-
@meta = (hash || {}).map { |key, value| { name: key.to_s, value: value } }
20+
@meta = (hash.compact || {}).map { |key, value| { name: key.to_s, value: value } }
2121
end
2222

2323
# Adds a single metric to the group of metrics
@@ -28,7 +28,8 @@ def meta=(hash)
2828
#
2929
def add_metric(name:, value:, meta: nil)
3030
metric = { name: name, value: value }
31-
metric[:meta] = meta.map { |meta_key, meta_value| { name: meta_key.to_s, value: meta_value } } unless meta.nil?
31+
meta = (meta || {}).compact # Remove nil values if any
32+
metric[:meta] = meta.map { |meta_key, meta_value| { name: meta_key.to_s, value: meta_value } } unless meta.empty?
3233
@metrics.append(metric)
3334
end
3435

spec/app_size_metrics_payload_spec.rb

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,45 @@
3939
}
4040
expect(payload.to_h).to eq(expected_hash)
4141
end
42+
43+
it 'removes `nil` values in metadata' do
44+
payload = described_class.new({
45+
'Group Metadata 1': 'Group Value 1',
46+
'Group Metadata 2': nil,
47+
'Group Metadata 3': 'Group Value 3'
48+
})
49+
payload.add_metric(name: 'Metric 1', value: 12_345, meta: { m1a: 'Metric 1 Metadata A', m1c: nil, m1c: 'Metric 1 Metadata C' })
50+
payload.add_metric(name: 'Metric 2', value: 67_890, meta: { m2a: nil })
51+
payload.add_metric(name: 'Metric 3', value: 13_579, meta: { m3a: 'Metric 3 Metadata A', m3b: 'Metric 3 Metadata B' })
52+
53+
expected_hash = {
54+
meta: [
55+
{ name: 'Group Metadata 1', value: 'Group Value 1' },
56+
{ name: 'Group Metadata 3', value: 'Group Value 3' },
57+
],
58+
metrics: [
59+
{
60+
name: 'Metric 1',
61+
value: 12_345,
62+
meta: [
63+
{ name: 'm1a', value: 'Metric 1 Metadata A' },
64+
{ name: 'm1c', value: 'Metric 1 Metadata C' },
65+
]
66+
},
67+
{
68+
name: 'Metric 2',
69+
value: 67_890
70+
},
71+
{
72+
name: 'Metric 3',
73+
value: 13_579,
74+
meta: [
75+
{ name: 'm3a', value: 'Metric 3 Metadata A' },
76+
{ name: 'm3b', value: 'Metric 3 Metadata B' },
77+
]
78+
},
79+
]
80+
}
81+
expect(payload.to_h).to eq(expected_hash)
82+
end
4283
end

spec/test-data/app_size_metrics/app-size-metrics-payload.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5905,10 +5905,6 @@
59055905
{
59065906
"name": "device",
59075907
"value": "Universal"
5908-
},
5909-
{
5910-
"name": "OS Version",
5911-
"value": null
59125908
}
59135909
]
59145910
},
@@ -5919,10 +5915,6 @@
59195915
{
59205916
"name": "device",
59215917
"value": "Universal"
5922-
},
5923-
{
5924-
"name": "OS Version",
5925-
"value": null
59265918
}
59275919
]
59285920
}

0 commit comments

Comments
 (0)