class Sqreen::CBTree
Public Class Methods
new()
click to toggle source
Callbacks tree: class methods position
# File lib/sqreen/cb_tree.rb, line 16 def initialize @by_class = {} end
Public Instance Methods
add(cb)
click to toggle source
# File lib/sqreen/cb_tree.rb, line 20 def add(cb) @by_class[cb.klass] = {} unless @by_class[cb.klass] cb_klass = @by_class[cb.klass] cb_klass[cb.method] ||= [nil, nil, nil] methods = cb_klass[cb.method] if cb.pre? methods[0] ||= [] add_to_array(methods[0], cb) end if cb.post? methods[1] ||= [] add_to_array(methods[1], cb) end if cb.failing? # rubocop:disable Style/GuardClause methods[2] ||= [] add_to_array(methods[2], cb) end end
each() { |cb| ... }
click to toggle source
# File lib/sqreen/cb_tree.rb, line 81 def each @by_class.each_value do |values| values.each_value do |cbs| cbs.each do |cb_ary| next unless cb_ary cb_ary.each do |cb| yield cb end end end end end
get(klass, method)
click to toggle source
# File lib/sqreen/cb_tree.rb, line 61 def get(klass, method) k = @by_class[klass] unless k Sqreen.log.debug { format('Error: no cb registered for class %s (%s)', klass.inspect, klass.class) } Sqreen.log.debug { inspect } return [nil, nil, nil] end cbs = k[method] unless cbs Sqreen.log.debug { format('Error: no cbs registered for method %s.%s', klass, method) } Sqreen.log.debug { inspect } return [nil, nil, nil] end cbs rescue StandardError => e Sqreen.log.warn "we catched an exception getting cbs: #{e.inspect}" Sqreen::RemoteException.record(e) [nil, nil, nil] end
remove(cb)
click to toggle source
# File lib/sqreen/cb_tree.rb, line 42 def remove(cb) by_meth = @by_class[cb.klass] return unless by_meth types = by_meth[cb.method] if cb.pre? && types[0] types[0].delete(cb) types[0] = nil if types[0].empty? end if cb.post? && types[1] types[1].delete(cb) types[1] = nil if types[1].empty? end if cb.failing? && types[2] # rubocop:disable Style/GuardClause types[2].delete(cb) types[2] = nil if types[2].empty? end end
Private Instance Methods
add_to_array(arr, cb)
click to toggle source
# File lib/sqreen/cb_tree.rb, line 96 def add_to_array(arr, cb) # find last element with prio equal or smaller; insert after pos = arr.size arr.reverse_each do |arr_cb| break if arr_cb.priority <= cb.priority pos -= 1 end arr.insert(pos, cb) end