Class: Hash
- Inherits:
-
Object
- Object
- Hash
- Defined in:
- lib/flazm_ruby_helpers/data_structures.rb
Overview
Ruby hash extensions
Instance Method Summary collapse
-
#deep_merge(second) ⇒ Object
rubocop:disable Style/ClassAndModuleChildren.
- #flatten_paths(path_prefix = '') ⇒ Object
- #leaf_node? ⇒ Boolean
- #to_yaml_inline(pad_left_indents: 0, indent_size: 2) ⇒ Object
- #walk_keys(kproc) ⇒ Object
- #walk_values(vproc) ⇒ Object
Instance Method Details
#deep_merge(second) ⇒ Object
rubocop:disable Style/ClassAndModuleChildren
31 32 33 34 |
# File 'lib/flazm_ruby_helpers/data_structures.rb', line 31 def deep_merge(second) merger = proc { |_key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 } # rubocop:disable Style/CaseEquality, Metrics/LineLength merge(second, &merger) end |
#flatten_paths(path_prefix = '') ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/flazm_ruby_helpers/data_structures.rb', line 59 def flatten_paths(path_prefix = '') result = {} map do |key, value| if value.is_a?(Hash) result.merge!(value.flatten_paths("#{path_prefix}/#{key}")) else result.merge!("#{path_prefix}/#{key}" => value) end end result end |
#leaf_node? ⇒ Boolean
52 53 54 55 56 57 |
# File 'lib/flazm_ruby_helpers/data_structures.rb', line 52 def leaf_node? map do |_key, value| return false if value.is_a?(Hash) || value.is_a?(Array) end true end |
#to_yaml_inline(pad_left_indents: 0, indent_size: 2) ⇒ Object
71 72 73 74 75 76 77 |
# File 'lib/flazm_ruby_helpers/data_structures.rb', line 71 def to_yaml_inline(pad_left_indents: 0, indent_size: 2) indent_string = ' ' * indent_size pad_indent = indent_string * pad_left_indents result = JSON.parse(to_json).to_yaml(indentation: indent_size, line_width: -1).to_str.lines.to_a[1..-1].map \ { |line| pad_indent + line } result.join end |
#walk_keys(kproc) ⇒ Object
42 43 44 45 46 47 48 49 50 |
# File 'lib/flazm_ruby_helpers/data_structures.rb', line 42 def walk_keys(kproc) map do |key, value| if value.is_a?(Hash) || value.is_a?(Array) { kproc.call(key) => value.walk_keys(kproc) } else { kproc.call(key) => value } end end.reduce({}, :merge) end |
#walk_values(vproc) ⇒ Object
36 37 38 39 40 |
# File 'lib/flazm_ruby_helpers/data_structures.rb', line 36 def walk_values(vproc) map do |key, value| value.is_a?(Hash) || value.is_a?(Array) ? { key => value.walk_values(vproc) } : { key => vproc.call(value) } end.reduce({}, :merge) end |