Sha256: 6bfbf0a3029f835b2855fdddec10f12439bee6c460c252a8131676616f4dfb78

Contents?: true

Size: 1.89 KB

Versions: 3

Compression:

Stored size: 1.89 KB

Contents

module Assert
  module Helpers

    # when Assert is required it will automatically require in two helper files
    # if they exist:
    # * "./test/helper.rb - package-specific helpers
    # * ~/.assert.rb - user-specific helpers (options, view, etc...)
    # the user-specific helper file will always be required in after the
    # package-specific one

    class << self

      # assume the test dir path is ./test and look for helpers in ./test/helper.rb
      PACKAGE_TEST_DIR = "test"
      PACKAGE_HELPER_FILE = "helper"
      TEST_REGEX = /^#{PACKAGE_TEST_DIR}$|^#{PACKAGE_TEST_DIR}\/|\/#{PACKAGE_TEST_DIR}\/|\/#{PACKAGE_TEST_DIR}$/

      USER_TEST_HELPER = "~/.assert/options"

      def load(caller_info)
        if (crp = caller_root_path(caller_info))
          require_package_test_helper(crp)
        end
        require_user_test_helper
      end

      private

      def require_user_test_helper
        begin
          require File.expand_path(USER_TEST_HELPER)
        rescue LoadError => err
          # do nothing
        end
      end

      # require the package's test/helper file if it exists
      def require_package_test_helper(root_path)
        begin
          require package_helper_file(root_path)
        rescue LoadError => err
          warn err.message
        end
      end

      def package_helper_file(root_path)
        File.join(root_path, PACKAGE_TEST_DIR, PACKAGE_HELPER_FILE+'.rb')
      end

      # this method inspects the caller info and finds the caller's root path
      # this expects the caller's root path to be the parent dir of the first
      # parent dir of caller named TEST_DIR
      def caller_root_path(caller_info)
        caller_dirname = File.expand_path(File.dirname(caller_info[0]))
        test_dir_pos = caller_dirname.index(TEST_REGEX)
        if test_dir_pos && (test_dir_pos > 0)
          caller_dirname[0..(test_dir_pos-1)]
        end
      end
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
assert-0.4.0 lib/assert/setup/helpers.rb
assert-0.3.0 lib/assert/setup/helpers.rb
assert-0.2.1 lib/assert/setup/helpers.rb