# 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