Class: PeakFlowUtils::DeepMerger
- Inherits:
-
ApplicationService
- Object
- ServicePattern::Service
- ApplicationService
- PeakFlowUtils::DeepMerger
- Defined in:
- app/services/peak_flow_utils/deep_merger.rb
Instance Attribute Summary collapse
-
#hashes ⇒ Object
readonly
Returns the value of attribute hashes.
-
#object_mappings ⇒ Object
readonly
Returns the value of attribute object_mappings.
Instance Method Summary collapse
- #clone_something(object) ⇒ Object
-
#initialize(hashes:, object_mappings: {}) ⇒ DeepMerger
constructor
A new instance of DeepMerger.
- #merge_array(array, merged) ⇒ Object
- #merge_hash(hash, merged) ⇒ Object
- #merge_something(object, merged) ⇒ Object
- #perform ⇒ Object
Constructor Details
#initialize(hashes:, object_mappings: {}) ⇒ DeepMerger
Returns a new instance of DeepMerger.
4 5 6 7 |
# File 'app/services/peak_flow_utils/deep_merger.rb', line 4 def initialize(hashes:, object_mappings: {}) @hashes = hashes @object_mappings = object_mappings end |
Instance Attribute Details
#hashes ⇒ Object (readonly)
Returns the value of attribute hashes.
2 3 4 |
# File 'app/services/peak_flow_utils/deep_merger.rb', line 2 def hashes @hashes end |
#object_mappings ⇒ Object (readonly)
Returns the value of attribute object_mappings.
2 3 4 |
# File 'app/services/peak_flow_utils/deep_merger.rb', line 2 def object_mappings @object_mappings end |
Instance Method Details
#clone_something(object) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'app/services/peak_flow_utils/deep_merger.rb', line 19 def clone_something(object) if object.is_a?(Hash) new_hash = {} merge_hash(object, new_hash) new_hash elsif object.is_a?(Array) new_array = [] merge_array(object, new_array) new_array else object end end |
#merge_array(array, merged) ⇒ Object
43 44 45 46 47 |
# File 'app/services/peak_flow_utils/deep_merger.rb', line 43 def merge_array(array, merged) array.each do |value| merged << clone_something(value) end end |
#merge_hash(hash, merged) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'app/services/peak_flow_utils/deep_merger.rb', line 49 def merge_hash(hash, merged) hash.each do |key, value| if value.is_a?(Array) merged[key] = [] merge_array(value, merged[key]) elsif value.is_a?(Hash) merged[key] ||= {} merge_hash(value, merged[key]) else merged[key] = clone_something(value) end end end |
#merge_something(object, merged) ⇒ Object
33 34 35 36 37 38 39 40 41 |
# File 'app/services/peak_flow_utils/deep_merger.rb', line 33 def merge_something(object, merged) if object.is_a?(Array) merge_array(object, merged) elsif object.is_a?(Hash) merge_hash(object, merged) else raise "Unknown object: #{object.class.name}" end end |
#perform ⇒ Object
9 10 11 12 13 14 15 16 17 |
# File 'app/services/peak_flow_utils/deep_merger.rb', line 9 def perform merged = {} hashes.each do |hash| merge_hash(hash, merged) end succeed! merged end |