summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/safe_yaml-1.0.5/lib/safe_yaml/deep.rb
blob: 6a5e037fbb550b7ee04165124d1b5787d3106e08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module SafeYAML
  class Deep
    def self.freeze(object)
      object.each do |*entry|
        value = entry.last
        case value
        when String, Regexp
          value.freeze
        when Enumerable
          Deep.freeze(value)
        end
      end

      return object.freeze
    end

    def self.copy(object)
      duplicate = object.dup rescue object

      case object
      when Array
        (0...duplicate.count).each do |i|
          duplicate[i] = Deep.copy(duplicate[i])
        end
      when Hash
        duplicate.keys.each do |key|
          duplicate[key] = Deep.copy(duplicate[key])
        end
      end

      duplicate
    end
  end
end