# File lib/puppet/external/event-loop/better-definers.rb, line 228
228:     def guard_writers(*names, &predicate)
229:         for name in names.map { |x| x.to_sym } do
230:             define_hard_alias("__unguarded_#{name.writer}" => name.writer)
231:             define_method(name.writer) do |new_value|
232:                 case result = predicate.call
233:                 when :mutable, nil
234:                     __send__("__unguarded_#{name.writer}", new_value)
235:                 when :immutable
236:                     raise ImmutableAttributeError.new(name)
237:                 else
238:                     raise ImmutableAttributeError.new(name, result)
239:                 end
240:             end
241:         end
242:     end