code: def as_dict(self):
          
          #TODO/FIXME: add selected information
          if self.hidden:
              rdict = {}
          else:
              def_selected = self.selected()
              comps = [
                  {
                      'name': comp.name,
                      'default': comp.name in self.defaults,
                      'options': comp.get_ordered_options() if isinstance(comp, Optionable) else None
                  }
                  for comp in self
              ]
              rdict = {
                  'name': self.name,
                  'required': self.required,
                  'multiple': self.multiple,
                  'args': self.in_name,
                  'returns': self.out_name,
                  'components': comps
              }
          return rdict
docs: returns a dictionary representation of the block and of all
          component options