Class: Hash
- Defined in:
- lib/lab42/core/open_object.rb,
lib/lab42/core/hash.rb
Overview
class OpenObject
Instance Method Summary collapse
- #fetch!(key, *defaults, &defblk) ⇒ Object
- #only(*args) ⇒ Object
- #reject_values(*behavior, &beh) ⇒ Object
- #replace_rec(*keys, limit: nil, limits: nil, &valblock) ⇒ Object
- #select_values(*behavior, &beh) ⇒ Object
- #to_open_object ⇒ Object
- #with_present(key, default: nil) ⇒ Object
- #without(*keys) ⇒ Object
Instance Method Details
#fetch!(key, *defaults, &defblk) ⇒ Object
4 5 6 7 8 9 10 |
# File 'lib/lab42/core/hash.rb', line 4 def fetch! key, *defaults, &defblk default_present = !(defaults.empty? && defblk.nil?) return fetch key unless default_present fetch key do self[ key ] = defblk ? defblk.() : defaults.first end end |
#only(*args) ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/lab42/core/hash.rb', line 17 def only *args args.inject Hash.new do | r, k | if has_key? k r.merge k => self[k] else r end end end |
#reject_values(*behavior, &beh) ⇒ Object
27 28 29 30 |
# File 'lib/lab42/core/hash.rb', line 27 def reject_values *behavior, &beh beh = Lab42::Meta::Behavior.behavior *behavior, &beh reject{ |_, v| beh.(v) } end |
#replace_rec(*keys, limit: nil, limits: nil, &valblock) ⇒ Object
12 13 14 15 |
# File 'lib/lab42/core/hash.rb', line 12 def replace_rec *keys, limit: nil, limits: nil, &valblock raise ArgumentError, "must not pass in limit: and limits: keyword parameters" if limit && limits return Lab42::Meta::Hash.hash_replace_rec self, keys, valblock, limit || limits end |
#select_values(*behavior, &beh) ⇒ Object
32 33 34 35 |
# File 'lib/lab42/core/hash.rb', line 32 def select_values *behavior, &beh beh = Lab42::Meta::Behavior.behavior *behavior, &beh select{ |_, v| beh.(v) } end |
#to_open_object ⇒ Object
57 58 59 |
# File 'lib/lab42/core/open_object.rb', line 57 def to_open_object OpenObject.new **self end |
#with_present(key, default: nil) ⇒ Object
37 38 39 40 41 42 43 |
# File 'lib/lab42/core/hash.rb', line 37 def with_present key, default: nil if has_key? key yield fetch(key), self else default end end |