Sha256: c64cefcacb75de4d502f69309b939b9d9c86f2aaf466f766f0504424dc64e6db
Contents?: true
Size: 1.73 KB
Versions: 5
Compression:
Stored size: 1.73 KB
Contents
# the events method is a developer's tool for visualizing the event order for a given card. # For example, from a console you might run # # puts mycard.events :update # # to see the order of events that will be executed on mycard. # The indention and arrows (^v) indicate event dependencies. # # Note: as of yet, the functionality is a bit rough. It does not display events # that are called directly from within other events (like :stored), and certain event # requirements (like the presence of a "current_act") may prevent events from showing # up in the tree. def events action @action = action events = [ events_tree(:validation), events_tree(:save) ] @action = nil puts_events events end #private def puts_events events, prefix='', depth=0 r = '' depth += 1 events.each do |e| space = ' ' * (depth * 2) #FIXME - this is not right. before and around callbacks are processed in declaration order regardless of kind. # not all befores then all arounds if e[:before] r += puts_events( e[:before], space+'v ', depth) end if e[:around] r += puts_events( e[:around], space+'vv ', depth ) end output = "#{prefix}#{e[:name]}" #warn output r+= "#{output}\n" if e[:after] r += puts_events( e[:after ].reverse, space+'^ ', depth ) end end r end def events_tree filt hash = {:name => filt } if respond_to? "_#{filt}_callbacks" send( "_#{filt}_callbacks" ).each do |callback| next unless callback.applies? self hash[callback.kind] ||= [] hash[callback.kind] << events_tree( callback.filter ) end end hash end class ::ActiveSupport::Callbacks::Callback def applies? object conditions_lambdas.all? { |c| c.call(object, nil) } end end
Version data entries
5 entries across 5 versions & 1 rubygems