docs: def parse(self):
          """Parse this Berksfile into a dict."""
          self.flush()
          self.seek(0)
          data = utils.ruby_lines(self.readlines())
          data = [tuple(j.strip() for j in line.split(None, 1))
                  for line in data]
          datamap = {}
          for line in data:
              if len(line) == 1:
                  datamap[line[0]] = True
              elif len(line) == 2:
                  key, value = line
                  if key == 'cookbook':
                      datamap.setdefault('cookbook', {})
                      value = [utils.ruby_strip(v) for v in value.split(',')]
                      lib, detail = value[0], value[1:]
                      datamap['cookbook'].setdefault(lib, {})
                      # if there is additional dependency data but its
                      # not the ruby hash, its the version constraint
                      if detail and not any("".join(detail).startswith(o)
                                            for o in self.berks_options):
                          constraint, detail = detail[0], detail[1:]
                          datamap['cookbook'][lib]['constraint'] = constraint
                      if detail:
                          for deet in detail:
                              opt, val = [
                                  utils.ruby_strip(i)
                                  for i in deet.split(':', 1)
                              ]
                              if not any(opt == o for o in self.berks_options):
                                  raise ValueError(
                                      "Cookbook detail '%s' does not specify "
                                      "one of '%s'" % (opt, self.berks_options))
                              else:
                                  datamap['cookbook'][lib][opt.strip(':')] = (
                                      utils.ruby_strip(val))
                  elif key == 'source':
                      datamap.setdefault(key, [])
                      datamap[key].append(utils.ruby_strip(value))
                  elif key:
                      datamap[key] = utils.ruby_strip(value)
          self.seek(0)
          return datamap