Module: PwaManifestGenerator::Freezeable::ClassMethods

Defined in:
lib/pwa_manifest_generator/freezeable.rb

Instance Method Summary collapse

Instance Method Details

#freeze_config!(instance) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/pwa_manifest_generator/freezeable.rb', line 10

def freeze_config!(instance)
  PwaManifestGenerator::ManifestMap::KEYS.each do |key|
    var = "@#{key}"
    unless instance.instance_variable_defined?(var)
      instance.instance_variable_set(var, PwaManifestGenerator::ManifestMap.default_value_for(key))
    end
    instance.validate_key!(key) unless instance.send(key).nil?

    value = instance.instance_variable_get(var)
    # Only define singleton methods on this instance
    instance.define_singleton_method(key) { value }
      instance.define_singleton_method("#{key}=") do |_value|
      raise ArgumentError, 'Cannot modify frozen PWA configuration'
    end

    if instance.send(:"#{key}").respond_to?(:freeze_config!)
      instance.send(:"#{key}").freeze_config!
    end
  end

  instance.define_singleton_method(:instance_variable_set) do |_name, _value|
    raise ArgumentError, 'Cannot modify frozen PWA configuration'
  end
end