Яuбy / Говнокод #13027 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
def set_path
      if name && (!path || path == "/")
        self.path = self.parent.present? ? "#{self.parent.path}/#{name}" : "/#{name}"
      elsif !new_record? && name && path && name_was != name
        parts = path.split("/")
        parts.pop
        self.path = [parts.join("/"), name].join("/")
      elsif !new_record? && name && self.parent_id_changed?
        self.path = self.parent.present? ? "#{self.parent.path}/#{name}" : "/#{name}"
      elsif new_record? && name && path
        self.path = [path, name].join("/")
      end

      if path && self.parent.blank?
        parts = path.split("/")

        self.name = parts.pop

        parent_path = parts.join("/")
        if parent_path.blank? || parent_path == "/"
          self.parent = nil
        else
          possible_parent = site.asset_folders.find_by_path(parent_path)
          self.parent = possible_parent.present? ? possible_parent : self.class.create(path: parent_path, site: site)
        end
      end
      true
     end

Как не нужно работать с путями в Rails-приложении. Это и еще примерно 500 строк было заменено на 11 строк кода, включая пустые.

Запостил: whitequark whitequark, (Updated )

Комментарии (20) RSS

  • Не верю. Покажите изначальные 500 строк и то, во что они превратились.
    Ответить
    • 500 строк я померял по диффу.

      Там была очень, очень плохая эмуляция древовидной файловой системы на Ruby — вся работа с путями выглядела вот так и работала иногда — плюс раздача статики, где каждый хит проходил через базу данных, которую я заменил на одну функцию, собирающую дерево из симлинков, и nginx.

      Из не попавшего в фрагмент: например, сломанная эмуляция транзакций при помощи поля в базе и исключений. При том, что можно было просто взять и написать транзакцию *facepalm
      Ответить
        • Сразу видно человека, которому не доставалось в наследство проектов от индусов. У меня вот тут тоже досталось... На простенький, в общем-то, функционал блогосоциалки наделано почти 600 таблиц в базе и 200 с хвостком контроллеров ("типа MVC" - там отдельная песня) в коде. *facepalm* Тут, конечно, для сравнения с автором в 11 таблиц не влезет... Но всё равно больше полусотни вряд-ли выйдет, если придумаем как это всё проверить и данные юзеров сохранить...
          Я это к чему - там тоже 1000-строковые модели легко (если поймёшь что они делать должны:)) сокращаются до 30-50 строк включая добавление DOC-комментов.
          Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8