calog/vendor/mruby/mrbgems/mruby-struct/mrblib/struct.rb
2026-07-04 20:25:00 -05:00

69 lines
1.3 KiB
Ruby
Vendored

##
# Struct
#
# ISO 15.2.18
class Struct
include Enumerable
##
# Calls the given block for each element of `self`
# and pass the respective element.
#
# ISO 15.2.18.4.4
def each(&block)
self.class.members.each {|field|
block.call(self[field])
}
self
end
##
# Calls the given block for each element of `self`
# and pass the name and value of the respective
# element.
#
# ISO 15.2.18.4.5
def each_pair(&block)
self.class.members.each {|field|
block.call(field.to_sym, self[field])
}
self
end
##
# Calls the given block for each element of `self`
# and returns an array with all elements of which
# block is not false.
#
# ISO 15.2.18.4.7
def select(&block)
ary = []
self.class.members.each {|field|
val = self[field]
ary.push(val) if block.call(val)
}
ary
end
##
# 15.2.18.4.11(x)
#
alias to_s inspect
##
# call-seq:
# hsh.dig(key,...) -> object
#
# Extracts the nested value specified by the sequence of *key*
# objects by calling `dig` at each step, returning `nil` if any
# intermediate step is `nil`.
#
def dig(idx,*args)
n = self[idx]
if args.size > 0
n&.dig(*args)
else
n
end
end
end