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
patternsand 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 |