···1414 {}
1515 end
16161717+ def [](key)
1818+ case key
1919+ when Symbol
2020+ when String
2121+ key = key.intern
2222+ else
2323+ raise TypeError.new("expected a string or symbol, got #{key.inspect.class}")
2424+ end
2525+2626+ prop = self.class.literal_properties[key] || raise(NameError.new("unknown attribute: #{key.inspect} for #{self.class}"))
2727+ __send__(prop.name)
2828+ end
2929+1730 alias to_hash to_h
18311932 def deconstruct
-13
lib/literal/struct.rb
···77 end
88 end
991010- def [](key)
1111- case key
1212- when Symbol
1313- when String
1414- key = key.intern
1515- else
1616- raise TypeError.new("expected a string or symbol, got #{key.inspect.class}")
1717- end
1818-1919- prop = self.class.literal_properties[key] || raise(NameError.new("unknown attribute: #{key.inspect} for #{self.class}"))
2020- __send__(prop.name)
2121- end
2222-2310 def []=(key, value)
2411 case key
2512 when Symbol
+20
test/data.test.rb
···96969797 assert_equal(person_a, person_b)
9898end
9999+100100+test "can be indexed" do
101101+ person = Person.new(name: "John")
102102+ assert_equal(person[:name], "John")
103103+end
104104+105105+test "indexed access supports string keys" do
106106+ person = Person.new(name: "John")
107107+ assert_equal(person["name"], "John")
108108+end
109109+110110+test "indexed access raises for unknown keys" do
111111+ person = Person.new(name: "John")
112112+ assert_raises(NameError) { person[:age] }
113113+end
114114+115115+test "indexed access raises for invalid key types" do
116116+ person = Person.new(name: "John")
117117+ assert_raises(TypeError) { person[0] }
118118+end