Class: TypeStruct
- Inherits:
-
Object
- Object
- TypeStruct
- Defined in:
- lib/type_struct.rb,
lib/type_struct/version.rb
Defined Under Namespace
Classes: NoMemberError
Constant Summary collapse
- VERSION =
"0.1.0"
Class Method Summary collapse
Class Method Details
.new(**args) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/type_struct.rb', line 8 def new(**args) Class.new do attr_accessor *args.keys const_set :MEMBERS, args class << self def members const_get(:MEMBERS) end def type(k) members[k] end def valid?(k, v) type(k) === v end end def initialize(**arg) self.class.members.each do |k, _| self[k] = arg[k] end end def []=(k, v) raise TypeStruct::NoMemberError unless respond_to?(k) unless self.class.valid?(k, v) raise TypeError, "expect #{self.class.type(k)} got #{v.class}" end __send__("#{k}=", v) end def [](k) raise TypeStruct::NoMemberError unless respond_to?(k) __send__(k) end def inspect m = to_h.map do |k, v| "#{k}=#{v.inspect}" end "#<#{self.class.to_s} #{m.join(', ')}>" end def to_h m = {} self.class.members.each do |k, _| m[k] = self[k] end m end alias to_hash to_h end end |