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)
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
|