1. Ruby / Говнокод #13929

    −147

    1. 1
    "class".class.class

    Не говнокод, просто забавно

    __proto__, 12 Октября 2013

    Комментарии (21)
  2. Ruby / Говнокод #13029

    −85

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    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: транзакции изобретены не нами, давайте сделаем их сами!

    whitequark, 21 Мая 2013

    Комментарии (1)
  3. Ruby / Говнокод #13027

    −89

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 20 Мая 2013

    Комментарии (11)
  4. Ruby / Говнокод #12681

    −92

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    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

    Процедура проверки ника в ситеме регистрации одного игрового проекта.

    DropWorld, 03 Марта 2013

    Комментарии (31)
  5. Ruby / Говнокод #12521

    −107

    1. 1
    @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(' ','-')

    Оригинальный подход к транслитерации

    heckfy, 31 Января 2013

    Комментарии (2)
  6. Ruby / Говнокод #12087

    −109

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    #Кусок красивого кода контроллера сайта на 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

    Ну в общем, код хорошо прокоментирован, думаю все и так ясно. =)

    SunnyMagadan, 09 Ноября 2012

    Комментарии (5)
  7. Ruby / Говнокод #11974

    −154

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    class ProblemsController < ApplicationController
    
      MAX_TAGS_PER_PROBLEM = 5
    
      def self.MAX_TAGS_PER_PROBLEM
        MAX_TAGS_PER_PROBLEM
      end
    end

    antono, 22 Октября 2012

    Комментарии (7)
  8. Ruby / Говнокод #11763

    −166

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    class User < ActiveRecord::Base
        
      def full_name
      	user_info=User.find(self.id)
      	[user_info.name,user_info.surname].join(" ")
      end
    end

    Получаем полное имя себя

    1101_debian, 13 Сентября 2012

    Комментарии (8)
  9. Ruby / Говнокод #11684

    −157

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    class SomeModel < ActiveRecord::Base
      after_save :some_method
    
      def some_method
        self.save
      end
    
    end

    Рекурсивная рекурсия рекурсивна.

    mr.The, 31 Августа 2012

    Комментарии (2)
  10. Ruby / Говнокод #11643

    −160

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    <div class="comment-content">
      		<% if comment.body.include?('[/quote]') %>
      			<% @text = Array.new %>
      			<% summ = '' %>
      			<% @text = simple_format(comment.body).split(' ') %>
      			<% namecheck = false %>
      			<% contentcheck = false %>
      			<% quotestart = false %>
      			<% donothing = true %>
      			<% quotecount = 0 %>
      			<% count_quotes = 0 %>
      			<% @text.each do |t| %>
      				<% if t.include?('[/quote]') %>
      					<% count_quotes ||= 0 %>
      					<% count_quotes += 1 %>
      				<% end %>
      			<% end %>
      			<% @text.each do |t| %>
      				<% if t.include?('[/quote]') %>
      					<% contentcheck = false %>
      					<% namecheck = false %>
      					<% t = t.gsub('[/quote]', '</div></div>') %>
      				<% elsif t.include?('[quote=') %>
      					<% namecheck = true %>
      					<% donothing = false %>
      					<% t = t.gsub('[quote=', '') %>
      				<% elsif t.include?(']') %>
      					<% t = t.gsub(']', '') %>
      				<% end %>
      				<% if donothing == false %>
      					<% if contentcheck == true and namecheck == true and t != '' and t != '<p>' and t != '</p>' %>
      						<% t = '<div class=quotecontent>' + '<div class=quotestart>' + '<div class=quotename>' + 'Цитата - ' + t + '</div>' %>
      						<% contentcheck = true %>
      						<% namecheck = false %>
      					<% elsif contentcheck == true and t != '' and t != '<p>' and t != '</p>' %>
      						<% t = '<div class=quotecontent>' + t %>
      						<% contentcheck = false %>
      					<% elsif namecheck == true and t != '' and t != '<p>' and t != '</p>' %>
      						<% t = '<div class=quotestart>' + '<div class=quotename>' + 'Цитата - ' + t + '</div>' %>
      						<% namecheck = false %>
      						<% contentcheck = true %>
      					<% end %>
      				<% end %>
      				<% summ = summ + t + ' ' %>
      			<% end %>
      		<% else %>
      			<% summ = comment.body %>
      		<% end %>
        	<%=raw simple_format(summ) %>
        </div>

    Вьюха списка комментариев. Когда это попало к верстальщику - он был мягко говоря шокирован.

    ruby-code, 24 Августа 2012

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