- 1
- 2
# ugh
task = task.task.task
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−87
# ugh
task = task.task.task
http://programmingisterrible.com/post/50285403468/a-lifetime-of-terrible-code
−148
"class".class.class
Не говнокод, просто забавно
−85
def self.process(site, object = nil, &block)
dont_unblock = false
block_res = true
site.lock!
if site.assets_blocked?
dont_unblock = true
raise Asset::BlockedException
end
site.assets_blocked = true
site.save!
block_res = yield if block_given?
return false unless block_res
return object.save if object
true
ensure
site.update_attribute(:assets_blocked, false) unless dont_unblock
end
# во всех местах, где с ассетами делалось хоть что-нибудь, копипастился такой кусок:
result =
begin
@asset = @site.assets.new
@asset.process do
@asset.attached = params[:file]
@asset.folder_path = params[:path]
end
rescue Asset::BlockedException
render json: { errors: [I18n.t("layout.assets.errors.assets_blocked")] } and return
end
По мотивам http://govnokod.ru/13027: транзакции изобретены не нами, давайте сделаем их сами!
−89
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 строк кода, включая пустые.
−92
def register_valid_login
login = params[:login]
return register_error("Слишком длинный ник!") if (login.length > 16)
return register_error("Слишком короткий ник!") if (login.length < 3)
return register_error("Недопустимые символы в нике!") if !(/^[a-zA-Z\-_]+$/=~login)
return register_error("Можно использовать либо '-', либо '_' в нике!") if (login.count("-") > 0 && login.count("_") > 0)
return register_error("Ник должен состоять из трёх частей максимум!") if (login.count("-") > 2 || login.count("_") > 2)
login = [login] if (login.count("-") == 0 && login.count("_") == 0)
login = login.split("-") if login.count("-") > 0
login = login.split("_") if login.count("_") > 0
return register_error("Начало ника не может быть меньше трёх символов!") if (login[0].length < 1)
case login.count
when 2
return register_error("Если у вас ник вида Xxx_Yyy, то Yyy может состоять минимум из 3х букв") if (login[1].length < 3)
when 3
return register_error("Если у вас ник вида AAA_B_CCC, то B должна быть больше одной буквы") if (login[1].length < 1)
end
for i in 0..login.count-1
return register_error("Заглавная буква в середине " + (i+1).to_s + "-ой части ника") if !(/^[a-zA-Z]?[a-z]+$/=~login[i])
end
return true
end
Процедура проверки ника в ситеме регистрации одного игрового проекта.
−107
@tag.url = @tag.name.downcase.gsub('А','a').gsub('а','a').gsub('Б','b').gsub('б','b').gsub('В','v').gsub('в','v').gsub('Г','g').gsub('г','g').gsub('Д','d').gsub('д','d').gsub('Е','e').gsub('е','e').gsub('Ё','ye').gsub('ё','e').gsub('Ж','j').gsub('ж','j').gsub('З','z').gsub('з','z').gsub('И','i').gsub('и','i').gsub('Й','i').gsub('й','i').gsub('К','k').gsub('к','k').gsub('Л','l').gsub('л','l').gsub('М','m').gsub('м','m').gsub('Н','n').gsub('н','n').gsub('О','o').gsub('о','o').gsub('П','p').gsub('п','p').gsub('Р','r').gsub('р','r').gsub('С','s').gsub('с','s').gsub('Т','t').gsub('т','t').gsub('У','u').gsub('у','u').gsub('Ф','f').gsub('ф','f').gsub('Х','h').gsub('х','h').gsub('Ц','ts').gsub('ц','ts').gsub('Ч','ch').gsub('ч','ch').gsub('Ш','sh').gsub('ш','sh').gsub('Щ','sh').gsub('щ','sh').gsub('Ъ','').gsub('ъ','').gsub('Ы','y').gsub('ы','y').gsub('Ь','').gsub('ь','').gsub('Э','e').gsub('э','e').gsub('Ю','you').gsub('ю','you').gsub('Я','ya').gsub('я','ya').gsub('`','').gsub(' ','-')
Оригинальный подход к транслитерации
−109
#Кусок красивого кода контроллера сайта на Ruby On Rails
class QuestionsController < ApplicationController
#Извлекаем отвеченные вопросы методом говнокода
def answered
@subtitle = "Отвеченные"
#Нам нужны все-все-все вопросы и даже не отвеченные. Скрестим пальцы на случай если их будет много
@questions = Question.all
#Обязательно преобразуем все в массив, сделаем N+1 запрос и успешно отфильтруем вопросы без ответа
@questions.to_a.delete_if { |q| q.answer.nil? }
#Чуть не забыл, нам же нужно извлечь 10 вопросов для 2-й страницы, а не все что есть
paginate(@questions)
#PROFIT
render "index"
end
end
Ну в общем, код хорошо прокоментирован, думаю все и так ясно. =)
−153
class ProblemsController < ApplicationController
MAX_TAGS_PER_PROBLEM = 5
def self.MAX_TAGS_PER_PROBLEM
MAX_TAGS_PER_PROBLEM
end
end
−166
class User < ActiveRecord::Base
def full_name
user_info=User.find(self.id)
[user_info.name,user_info.surname].join(" ")
end
end
Получаем полное имя себя
−157
class SomeModel < ActiveRecord::Base
after_save :some_method
def some_method
self.save
end
end
Рекурсивная рекурсия рекурсивна.