class Sqreen::Rules::BindingAccessorMetrics

Publish metrics about data taken from the binding accessor

Constants

FAILING_CB
POST_CB
PRE_CB

Public Class Methods

new(klass, method, rule_hash) click to toggle source
Calls superclass method
# File lib/sqreen/rules/binding_accessor_metrics.rb, line 21
def initialize(klass, method, rule_hash)
  super(klass, method, rule_hash)
  @expr = {}
  build_expressions(rule_hash[Attrs::CALLBACKS])
end

Public Instance Methods

failing(exception, inst, args, _budget = nil, &_block) click to toggle source
# File lib/sqreen/rules/binding_accessor_metrics.rb, line 55
def failing(exception, inst, args, _budget = nil, &_block)
  return unless failing?

  add_metrics(FAILING_CB, inst, args, exception)
end
failing?() click to toggle source
# File lib/sqreen/rules/binding_accessor_metrics.rb, line 39
def failing?
  @expr[FAILING_CB]
end
post(rv, inst, args, _budget = nil, &_block) click to toggle source
# File lib/sqreen/rules/binding_accessor_metrics.rb, line 49
def post(rv, inst, args, _budget = nil, &_block)
  return unless post?

  add_metrics(POST_CB, inst, args, rv)
end
post?() click to toggle source
# File lib/sqreen/rules/binding_accessor_metrics.rb, line 35
def post?
  @expr[POST_CB]
end
pre(inst, args, _budget = nil, &_block) click to toggle source
# File lib/sqreen/rules/binding_accessor_metrics.rb, line 43
def pre(inst, args, _budget = nil, &_block)
  return unless pre?

  add_metrics(PRE_CB, inst, args)
end
pre?() click to toggle source
# File lib/sqreen/rules/binding_accessor_metrics.rb, line 31
def pre?
  @expr[PRE_CB]
end

Protected Instance Methods

add_metrics(name, inst, args, rv = nil) click to toggle source
# File lib/sqreen/rules/binding_accessor_metrics.rb, line 63
def add_metrics(name, inst, args, rv = nil)
  category, key, value, = @expr[name].map do |accessor|
    accessor.resolve(binding, framework, inst, args, @data, rv)
  end
  record_observation(category, key, value)
  advise_action(nil)
end
build_expressions(callbacks) click to toggle source
# File lib/sqreen/rules/binding_accessor_metrics.rb, line 71
def build_expressions(callbacks)
  raise NoExpressions, callbacks if callbacks.nil? || callbacks.empty?
  [PRE_CB, POST_CB, FAILING_CB].each do |c|
    next if callbacks[c].nil? || callbacks[c].size < 3
    @expr[c] = callbacks[c].map { |req| BindingAccessor.new(req, true) }
  end
  raise NoExpressions, callbacks if @expr.empty?
end