Runtime assertions for Ruby literal.fun
ruby
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add `Literal::Data#[]`

Closes #325

+33 -13
+13
lib/literal/data_structure.rb
··· 14 14 {} 15 15 end 16 16 17 + def [](key) 18 + case key 19 + when Symbol 20 + when String 21 + key = key.intern 22 + else 23 + raise TypeError.new("expected a string or symbol, got #{key.inspect.class}") 24 + end 25 + 26 + prop = self.class.literal_properties[key] || raise(NameError.new("unknown attribute: #{key.inspect} for #{self.class}")) 27 + __send__(prop.name) 28 + end 29 + 17 30 alias to_hash to_h 18 31 19 32 def deconstruct
-13
lib/literal/struct.rb
··· 7 7 end 8 8 end 9 9 10 - def [](key) 11 - case key 12 - when Symbol 13 - when String 14 - key = key.intern 15 - else 16 - raise TypeError.new("expected a string or symbol, got #{key.inspect.class}") 17 - end 18 - 19 - prop = self.class.literal_properties[key] || raise(NameError.new("unknown attribute: #{key.inspect} for #{self.class}")) 20 - __send__(prop.name) 21 - end 22 - 23 10 def []=(key, value) 24 11 case key 25 12 when Symbol
+20
test/data.test.rb
··· 96 96 97 97 assert_equal(person_a, person_b) 98 98 end 99 + 100 + test "can be indexed" do 101 + person = Person.new(name: "John") 102 + assert_equal(person[:name], "John") 103 + end 104 + 105 + test "indexed access supports string keys" do 106 + person = Person.new(name: "John") 107 + assert_equal(person["name"], "John") 108 + end 109 + 110 + test "indexed access raises for unknown keys" do 111 + person = Person.new(name: "John") 112 + assert_raises(NameError) { person[:age] } 113 + end 114 + 115 + test "indexed access raises for invalid key types" do 116 + person = Person.new(name: "John") 117 + assert_raises(TypeError) { person[0] } 118 + end