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

    −165

    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
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    def check_dates
        if !start_on.nil? && !end_on.nil? && start_on > end_on
          errors.add(:base, 'The first month cannot be after the last month.')
          return false
        end
        is_admin_user = User.has_level?('admin')
        if confirmed_at.nil? && !start_on.nil? && !is_admin_edit? && !is_admin_edit_revision?
          d = Date.current_date
          if is_newsletter?
            if !is_admin_user && (d.year > start_on.year || (d.year == start_on.year && d.month > start_on.month))
              errors.add(:base, 'The first month has already passed.')
              return false
            end
            if !office_id.nil?
              office = Office.find_by_id(office_id)
              deadline = office.deadline(start_on.year, start_on.month)
              if !is_admin_user && d > (deadline + Order::PastDeadlineLimit)
                errors.add(:base, "The #{office.name} office deadline for this month has already passed.")
                return false
              end
              if is_design_only?
                original = get_original_order
                if start_on < original.start_on
                  errors.add(:base, 'The first month cannot be before the first month of the original order.')
                  return false
                end
                if start_on > original.end_on
                  errors.add(:base, 'The first month cannot be after the last month of the original order.')
                  return false
                end
              end
    
              validate_adjusted_order
            end
          else
            if new_record? && !is_admin_user
              if d.year > start_on.year
                errors.add(:base, 'The year has already passed.')
                return false
              end
            end
            if !is_admin_user && !ads.empty? && 1 == ads.map(&:neighborhood_id).uniq.size
              if directory && directory.finalized? && d > (directory.finalized_on + Order::PastDeadlineLimit)
                errors.add(:base, 'The directory has already been finalized.')
                return false
              end
            end
          end
        end
        if is_admin_edit?
          original = get_original_order
          if months < original.publication_month_with_receipt_span
            errors.add(:base, 'The order already has more paid months than the new contract length.')
          end
        end
      end

    Запостил: sumskyi, 17 Июля 2013

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

    • условные выражения и методе по сути, проверяют все что можно проверить. Распилить бы этот метод на кусочки по-датовых проверок!
      Ответить
    • тот, ко писал этот код не понял сути ruby
      Ответить
    • особенно умиляет !end_on.nil? вместо end_on
      Ответить
      • это не тождественные выражения. есть же еще false
        Ответить
    • А меня умиляет is_admin_edit? вместо admin_edit? (в этом ведь смысл вопроса?).
      Ответить

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