class Chronometer::DSL

Attributes

events[R]
tracepoints[R]

Public Class Methods

new() click to toggle source
# File lib/chronometer/dsl.rb, line 7
def initialize
  @events = []
  @tracepoints = []
end

Public Instance Methods

for_class(cls) { || ... } click to toggle source
# File lib/chronometer/dsl.rb, line 12
def for_class(cls)
  @cls && raise('already in for_class')
  @cls = cls

  yield
ensure
  @cls = nil
end
for_singleton_class(cls, &blk) click to toggle source
# File lib/chronometer/dsl.rb, line 21
def for_singleton_class(cls, &blk)
  for_class(cls.singleton_class, &blk)
end
method(method_name, **opts) click to toggle source
# File lib/chronometer/dsl.rb, line 25
def method(method_name, **opts)
  opts[:name] ||= @cls.singleton_class? ? "#{ObjectSpace.each_object(@cls).to_a.last}.#{method_name}" : "#{@cls}##{method_name}"
  opts.delete(:method) && raise('Cannot specify :method')
  opts[:method] = method_name
  opts[:event_type] ||= :X
  opts[:cls] = @cls || raise('must be in for_class block')
  events << Event.new(opts)
end
methods(*method_names, **opts) click to toggle source
# File lib/chronometer/dsl.rb, line 34
def methods(*method_names, **opts)
  method_names.flatten.each do |method_name|
    method method_name, **opts
  end
end
tracepoint(event_name, &blk) click to toggle source
# File lib/chronometer/dsl.rb, line 40
def tracepoint(event_name, &blk)
  @cls && raise('in for_class block')

  tracepoints << [event_name, blk]
end