123456789_123456789_123456789_123456789_123456789_

Module: PowerAssert

Constant Summary

Class Attribute Summary

Class Method Summary

Class Attribute Details

.app_context?Boolean (readonly)

[ GitHub ]

  
# File 'lib/power_assert.rb', line 52

def app_context?
  top_frame = caller_locations.drop_while {|i| i.path.start_with?(POWER_ASSERT_LIB_DIR) }.first
  top_frame and ! internal_file?(top_frame.path)
end

Class Method Details

.app_caller_locations

[ GitHub ]

  
# File 'lib/power_assert.rb', line 48

def app_caller_locations
  caller_locations.drop_while {|i| internal_file?(i.path) }.take_while {|i| ! internal_file?(i.path) }
end

.clear_global_method_cache (private)

[ GitHub ]

  
# File 'lib/power_assert.rb', line 82

def clear_global_method_cache
  CLEAR_CACHE_ISEQ.eval
end

.configuration

[ GitHub ]

  
# File 'lib/power_assert/configuration.rb', line 3

def configuration
  @configuration ||= Configuration[false, true, false, :p]
end

.configure {|configuration| ... }

Yields:

[ GitHub ]

  
# File 'lib/power_assert/configuration.rb', line 7

def configure
  yield configuration
end

.internal_file?(file) ⇒ Boolean (private)

[ GitHub ]

  
# File 'lib/power_assert.rb', line 59

def internal_file?(file)
  setup_internal_lib_dir(Byebug, :attach, 2) if defined?(Byebug)
  setup_internal_lib_dir(PryByebug, :start_with_pry_byebug, 2, Pry) if defined?(PryByebug)
  INTERNAL_LIB_DIRS.find do |_, dir|
    file.start_with?(dir)
  end
end

.lib_dir(obj, mid, depth) (private)

[ GitHub ]

  
# File 'lib/power_assert.rb', line 74

def lib_dir(obj, mid, depth)
  File.expand_path('../' * depth, obj.method(mid).source_location[0])
end

.setup_internal_lib_dir(lib, mid, depth, lib_obj = lib) (private)

[ GitHub ]

  
# File 'lib/power_assert.rb', line 67

def setup_internal_lib_dir(lib, mid, depth, lib_obj = lib)
  unless INTERNAL_LIB_DIRS.key?(lib)
    INTERNAL_LIB_DIRS[lib] = lib_dir(lib_obj, mid, depth)
  end
rescue NameError
end

.start(assertion_proc_or_source, assertion_method: nil, source_binding: TOPLEVEL_BINDING) {|BlockContext.new(assertion_proc_or_source, assertion_method, source_binding)| ... }

Yields:

  • (BlockContext.new(assertion_proc_or_source, assertion_method, source_binding))
[ GitHub ]

  
# File 'lib/power_assert.rb', line 30

def start(assertion_proc_or_source, assertion_method: nil, source_binding: TOPLEVEL_BINDING)
  if respond_to?(:clear_global_method_cache, true)
    clear_global_method_cache
  end
  yield BlockContext.new(assertion_proc_or_source, assertion_method, source_binding)
end

.trace(frame)

[ GitHub ]

  
# File 'lib/power_assert.rb', line 37

def trace(frame)
  begin
    raise 'Byebug is not started yet' unless Byebug.started?
  rescue NameError
    raise "PowerAssert.#{__method__} requires Byebug"
  end
  ctx = TraceContext.new(frame._binding)
  ctx.enable
  ctx
end