1# frozen_string_literal: true
2
3require "value_semantics/monkey_patched"
4
5class SIM
6 value_semantics do
7 iccid(/\A\d+\Z/)
8 lpa_code Either(/\ALPA:/, nil), default: nil
9 remaining_usage_kb Integer
10 remaining_days Integer
11 notes String
12 nickname Either(String, nil), default: nil
13 end
14
15 def self.extract(kwargs)
16 kwargs = kwargs&.transform_keys(&:to_sym) || {}
17 new(kwargs.slice(
18 :iccid, :lpa_code, :remaining_usage_kb, :remaining_days, :notes
19 ))
20 end
21
22 def remaining_usage_mb
23 (remaining_usage_kb / 1024.0).round(2)
24 end
25
26 def to_s
27 if nickname
28 "#{nickname} (#{iccid}) : #{remaining_usage_mb} MB"
29 else
30 "#{iccid} : #{remaining_usage_mb} MB"
31 end
32 end
33end