summaryrefslogtreecommitdiff
path: root/lib/mime/types/container.rb
blob: abccc2ee8996fedfbc6c88c59a60cfbc577d1179 (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
# frozen_string_literal: true

require 'set'

# MIME::Types requires a container Hash with a default values for keys
# resulting in an empty Set, but this cannot be dumped through Marshal because
# of the presence of that default Proc. This class exists solely to satisfy
# that need.
class MIME::Types::Container < Hash # :nodoc:
  def initialize
    super
    self.default_proc = ->(h, k) { h[k] = Set.new }
  end

  def marshal_dump
    {}.merge(self)
  end

  def marshal_load(hash)
    self.default_proc = ->(h, k) { h[k] = Set.new }
    merge!(hash)
  end

  def encode_with(coder)
    each { |k, v| coder[k] = v.to_a }
  end

  def init_with(coder)
    self.default_proc = ->(h, k) { h[k] = Set.new }
    coder.map.each { |k, v| self[k] = Set[*v] }
  end
end