         noPath = "the path name must be a valid string"
         assert _.isString(username), noUsername
         assert _.isString(repository), noRepository
-        assert _.isString(path), noPath
-        @emit "github", arguments...
-        (@$github ?= []).push
+        assert path and _.isString(path), noPath
+        @emit.call this, "github", arguments...
+        return (@$github ?= []).push
             repository: repository
             username: username
             path: path

        return @$outputs if arguments.length is 0
        noOutputs = "The outputs is not a string"
        assert _.isString(outputs), noOutputs
        @emit "outputs", arguments...
        @$outputs = outputs.toString()

    # Either get or set the description of the method that is being

    # Each failure consists of the expected code and reason for fail
    failure: (code, reasoning) ->
        return @$failure if arguments.length is 0
        noCode = "The supplied code is not a number"
        noReasoning = "the reasoning is not a string"
        assert _.isString(reasoning), noReasoning
        assert  code and _.isNumber(code), noCode
        @emit.call this, "failure", arguments...
        return (@$failure ?= []).push
            reasoning: reasoning
            code: code

