Module: Tins::Subhash
- Included in:
- Hash
- Defined in:
- lib/tins/subhash.rb
Instance Method Summary collapse
-
#subhash(*patterns) ⇒ Object
Create a subhash from this hash, that only contains key-value pairs matching
patterns
and return it.
Instance Method Details
#subhash(*patterns) ⇒ Object
Create a subhash from this hash, that only contains key-value pairs matching patterns
and return it. patterns
can be for example /^foo/ to put ‘foobar’ and ‘foobaz’ or ‘foo’/:foo to put ‘foo’ into the subhash.
If a block is given this method yields to it after the first pattern matched with a 3-tuple of (key, value, match_data) using the return value of the block as the value of the result hash. match_data
is a MatchData instance if the matching pattern was a regular rexpression otherwise it is nil.
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 |
# File 'lib/tins/subhash.rb', line 12 def subhash(*patterns) patterns.map! do |pat| pat = pat.to_sym.to_s if pat.respond_to?(:to_sym) pat.respond_to?(:match) ? pat : pat.to_s end result = if default_proc self.class.new(&default_proc) else self.class.new(default) end if block_given? each do |k, v| patterns.each { |pat| if pat === k.to_s result[k] = yield(k, v, $~) break end } end else each do |k, v| result[k] = v if patterns.any? { |pat| pat === k.to_s } end end result end |