code: def values(self,
                 columns=None,
                 recurse=True,
                 flags=0,
                 mapper=None,
                 key='name',
                 **get_options):
          
          output = {}
          schema = self.schema()
  
          for column in columns or schema.columns(recurse=recurse, flags=flags).values():
              column = column if isinstance(column, orb.Column) else schema.column(column)
              try:
                  val_key = column if key == 'column' else getattr(column, key)()
              except AttributeError:
                  raise errors.OrbError(
                      'Invalid key used in data collection.  Must be name, field, or column.'
                  )
              else:
                  value = self.get(column, **get_options)
                  output[val_key] = mapper(value) if mapper else value
  
          return output
docs: Returns a dictionary grouping the columns and their
          current values.  If the inflated value is set to True,
          then you will receive any foreign keys as inflated classes (if you
          have any values that are already inflated in your class, then you
          will still get back the class and not the primary key value).  Setting
          the mapper option will map the value by calling the mapper method.
  
          :param      useFieldNames | <bool>
                      inflated | <bool>
                      mapper | <callable> || None
  
          :return     { <str> key: <variant>, .. }