sim.rb

 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(/\ALPA:/)
 9		remaining_usage_kb Integer
10		remaining_days Integer
11		notes String
12	end
13
14	def self.extract(kwargs)
15		kwargs = kwargs&.transform_keys(&:to_sym) || {}
16		new(kwargs.slice(
17			:iccid, :lpa_code, :remaining_usage_kb, :remaining_days, :notes
18		))
19	end
20
21	def remaining_usage_mb
22		(remaining_usage_kb / 1024.0).round(2)
23	end
24end