Module: Musa::Extension::DeepCopy

Defined in:
lib/musa-dsl/core-ext/deep-copy.rb

Overview

Module providing deep copy functionality for complex object graphs.

DeepCopy implements recursive copying of objects, handling circular references, instance variables, singleton class modules, and various Ruby data structures.

Features

  • Handles circular references via object registry
  • Preserves singleton class modules (dataset extensions)
  • Supports both :dup and :clone methods
  • Special handling for Arrays, Hashes, Ranges, Structs, Procs
  • Recursively copies instance variables
  • Optional freeze control for :clone method

Use Cases

  • Deep copying musical event structures with complex nesting
  • Duplicating series configurations without shared state
  • Preserving dataset module extensions during copy operations
  • Safe duplication of mutable default values

Based on https://github.com/adamluzsi/duplicate.rb/blob/master/lib/duplicate.rb

Modifications by Javier Sánchez Yeste

Examples:

Basic deep copy

using Musa::Extension::DeepCopy

original = { items: [1, 2, 3] }
copy = original.dup(deep: true)
copy[:items] << 4
original[:items]  # => [1, 2, 3] (unchanged)

Preserving modules

event = { pitch: 60 }.extend(Musa::Datasets::AbsI)
copy = event.dup(deep: true)
copy.is_a?(Musa::Datasets::AbsI)  # => true

See Also:

Defined Under Namespace

Modules: DeepCopy