def prompt(self, error=''):
        """
        Prompts the user to set the value for this item.
        
        :return     <bool> | success
        """
        if self.hidden:
            return True

        cmd = [self.label]

        if self.default is not None:
            cmd.append('(default: {0})'.format(self.default))
        elif not self.required:
            cmd.append('(default: )')

        if self.type == 'bool':
            cmd.append('(y/n)')

        if self.choices:
            print 'Choices:'
            for choice in self.choices:
                print choice
        if error:
            print error

        value = raw_input(' '.join(cmd) + ':')
        if value == '':
            value = self.default

        if self.type == 'bool':
            if value == 'y':
                value = True
            elif value == 'n':
                value = False
            else:
                value = self.default

        if value is None and self.required:
            return self.prompt('{0} is required.')

        if self.regex and not re.match(self.regex, value):
            error = '{0} must match {1}'.format(self.name, self.regex)
            return self.prompt(error)

        self.value = value
        return True