def run(self):
        '''
        This method iterates over the docopt's arguments and matches them against
        the parameters list. All leftover values are used to resolve the action to
        run, and it will run the action, or run the fallback() method if no action
        is found.
        '''
        self.init()

        args = []
        missed = []

        # go through setters
        for arg, value in self.args.items():
            if arg in self._parameter_dict:
                self._parameter_dict[arg](self, value)
                #log.debug('calling setter: {} → {}'.format(arg, value))
            elif arg.startswith('--') or arg.startswith('<'):
                arg_renamed = arg.lstrip('-<').rstrip('>').replace('-', '_')
                if not hasattr(self, arg_renamed):
                    setattr(self, arg_renamed, value)
                    #log.debug('auto-setting:   self.{} → {}'.format(arg_renamed, value))
            else:
                #log.debug('keeping: {} → {}'.format(arg, value))
                if self.args[arg]:
                    args.append(arg)

        if frozenset(args) in self._action_dict:
            #log.debug('running action: {}'.format(self._action_dict[frozenset(args)]))
            return self._action_dict[frozenset(args)](self)
        else:
            return self.fallback()
This method iterates over the docopt's arguments and matches them against
        the parameters list. All leftover values are used to resolve the action to
        run, and it will run the action, or run the fallback() method if no action
        is found.