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 |