Sha256: 05ca8f64d28fb1e30ff11619cff36b1310522af2fc919a7e807e8d57e58c94f8

Contents?: true

Size: 1.37 KB

Versions: 3

Compression:

Stored size: 1.37 KB

Contents

# Copyright (c) 2010-2013 Pluron, Inc.

#Use this to raise internal error with a given message.
#This works for all modes - production, development, etc.
def internal_error(message = 'internal error')
    raise message
end

#Raises internal error when expression evaluates to nil or false
#Use this to check various preconditions, for example
# def do_smth(x)
#   assure(x.is_a? String)
# end
#You can provide optional message to be printed in the exception output.
def assure(expression, message = nil)
    return if expression
    file, method, line = get_caller_location_for_assure

    #Try to find expression in assert
    expression = File.readlines(file)[line.to_i-1].
        gsub(/^.*assure\s*\(\s*/, '').gsub(/\s*\)\s*$/, '')

    #cleanup path - remove rails root and "./"
    if defined? Rails
        file = file.gsub(Rails.root.to_s+'/', '')
    else
        file = file.gsub(Dir.pwd, '')
    end
    file = file.gsub(/^\.\//, '') 
    raise internal_error("#{file}:#{line}: #{method}: Assertion \"#{expression}\" failed#{message ? "\n#{message}" : ""}")
end

def get_caller_location_for_assure(options = {:depth => 2})
    caller_method = caller(options[:depth])[0]
    #Sample output is:
    #   test/unit/assure_test.rb:9:in `test_assure
    #   test.rb:3
    caller_method =~ /([^:]+):([0-9]+)(:in `(.+)')*/
    file = $1
    line = $2
    method = $4
    [file, method, line]
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
assure-1.0.1 lib/assure.rb
assure-1.0 lib/assure.rb
assure-0.1.2 lib/assure.rb