# File lib/puppet/property.rb, line 291
291:     def set(value)
292:         # Set a name for looking up associated options like the event.
293:         name = self.class.value_name(value)
294: 
295:         call = self.class.value_option(name, :call) || :none
296: 
297:         if call == :instead
298:             event, tmp = call_valuemethod(name, value)
299:         elsif call == :none
300:             if @resource.provider
301:                 call_provider(value)
302:             else
303:                 # They haven't provided a block, and our parent does not have
304:                 # a provider, so we have no idea how to handle this.
305:                 self.fail "%s cannot handle values of type %s" % [self.class.name, value.inspect]
306:             end
307:         else
308:             # LAK:NOTE 20081031 This is a change in behaviour -- you could
309:             # previously specify :call => [;before|:after], which would call
310:             # the setter *in addition to* the block.  I'm convinced this
311:             # was never used, and it makes things unecessarily complicated.
312:             # If you want to specify a block and still call the setter, then
313:             # do so in the block.
314:             devfail "Cannot use obsolete :call value '%s' for property '%s'" % [call, self.class.name]
315:         end
316: 
317:         return event(name, event)
318:     end