Sha256: 0d8a343690e1f611a7b4d4c50f759fd9a63a1bda295811a192493d93ed68891a
Contents?: true
Size: 1.33 KB
Versions: 2
Compression:
Stored size: 1.33 KB
Contents
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com # All files in this distribution are subject to the terms of the MIT license. module Ramaze class Struct < ::Struct # Makes it possible to access the keys directly by their name, not only # their index. The original Struct#values_at tries to call #to_int on the # arguments. # in Ruby < 1.9 this would lead to a quite unintuitive IndexError, while # in 1.9 it will say outright that it cannot convert Symbol into Integer. # I think this is neither useful nor expected, so we extend # Struct#values_at to recognize valid members of the Struct passed into # the method and return their values in the same order, just like # Hash#values_at. # # Example: # Point = Struct.new(:x, :y) # point = Point.new(15, 10) # # # Old behaviour: # point.values_at(0, 1) # # => [15, 10] # point.values_at(0..1) # # => [15, 10] # point.values_at(:y, :x) # # => IndexError: offset 20697 too large for struct(size:2) # # # Added new behaviour: # point.values_at(:y, :x) # # => [10, 15] def values_at(*keys) keys.map do |key| case key when String, Symbol self[key] else return super end end end end # Struct end # Ramaze
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ramaze-2012.04.14 | lib/ramaze/snippets/ramaze/struct.rb |
ramaze-2012.03.07 | lib/ramaze/snippets/ramaze/struct.rb |