Пожалуйста, помогите мне сделать этот код Rails более сухим.Я должен упустить что-то очень очевидное - PullRequest
0 голосов
/ 20 октября 2010

Этот код проверки рельсов такой уродливый, и должен быть лучший способ сделать это.

Вкратце, мой пользователь вводит данные из результатов испытаний.Каждый конкретный тест имеет 4 измерения.Обычно пользователь вводит все 5 тестов (20 измерений), но это не всегда требуется.Мне просто нужно проверить, что если тестировщик начал вводить данные для теста, он вводит все 4 измерения в этом тесте.

(Позже я сделаю класс проверки, но я использую это для начала)

Редактировать: чтобы уточнить, «тесты» - это измерения материалов (не связанные с программным обеспечением).тестеры записывают данные на бумаге, а потом вводят в это приложение

def must_input_full_test

  #test Top Section
  if top_section_1 || top_section_2 || top_section_3 || top_section_4
    found_at_least_one = true
    #at least one is present; now check if any are empty
    if top_section_1.nil?
      errors.add :top_section_1, "Must fill in four values for a test"
    end
    if top_section_2.nil?
      errors.add :top_section_2, "Must fill in four values for a test"
    end
    if top_section_3.nil?
      errors.add :top_section_3, "Must fill in four values for a test"
    end
    if top_section_4.nil?
      errors.add :top_section_4, "Must fill in four values for a test"
    end
  end

  #test Bottom Section
  if bottom_section_1 || bottom_section_2 || bottom_section_3 || bottom_section_4
    found_at_least_one = true
    #at least one is present; now check if any are empty
    if bottom_section_1.nil?
      errors.add :bottom_section_1, "Must fill in four values for a test"
    end
    if bottom_section_2.nil?
      errors.add :bottom_section_2, "Must fill in four values for a test"
    end
    if bottom_section_3.nil?
      errors.add :bottom_section_3, "Must fill in four values for a test"
    end
    if bottom_section_4.nil?
      errors.add :bottom_section_4, "Must fill in four values for a test"
    end
  end

  #test Bottom
  if bottom_1 || bottom_2 || bottom_3 || bottom_4
    found_at_least_one = true
    #at least one is present; now check if any are empty
    if bottom_1.nil?
      errors.add :bottom_1, "Must fill in four values for a test"
    end
    if bottom_2.nil?
      errors.add :bottom_2, "Must fill in four values for a test"
    end
    if bottom_3.nil?
      errors.add :bottom_3, "Must fill in four values for a test"
    end
    if bottom_4.nil?
      errors.add :bottom_4, "Must fill in four values for a test"
    end
  end

  #test Middle Section
  if middle_1 || middle_2 || middle_3 || middle_4
    found_at_least_one = true
    #at least one is present; now check if any are empty
    if middle_1.nil?
      errors.add :middle_1, "Must fill in four values for a test"
    end
    if middle_2.nil?
      errors.add :middle_2, "Must fill in four values for a test"
    end
    if middle_3.nil?
      errors.add :middle_3, "Must fill in four values for a test"
    end
    if middle_4.nil?
      errors.add :middle_4, "Must fill in four values for a test"
    end
  end

  #test Top
  if top_1 || top_2 || top_3 || top_4
    found_at_least_one = true
    #at least one is present; now check if any are empty
    if top_1.nil?
      errors.add :top_1, "Must fill in four values for a test"
    end
    if top_2.nil?
      errors.add :top_2, "Must fill in four values for a test"
    end
    if top_3.nil?
      errors.add :top_3, "Must fill in four values for a test"
    end
    if top_4.nil?
      errors.add :top_4, "Must fill in four values for a test"
    end
  end

  if !found_at_least_one
    errors.add :middle_1, "Must fill in at least some test data"
  end
end

1 Ответ

1 голос
/ 20 октября 2010

Можете ли вы изменить код, который вы тестируете? Было бы лучше иметь что-то вроде этого (в JSON):

{
  'top' : [section1, section2, section3, section4],
  'middle' : [section1, section2, section3, section4],
  'bottom' : [section1, section2, section3, section4]
}

Таким образом, у вас будет хеш с ключами :top, :middle и :bottom (или что вам нужно), и каждое значение этого хеша будет массивом с четырьмя значениями, которые соответствуют _1, _2, _3, _4 у вас есть в данный момент.

С такой структурой вы можете легко перебирать ее.


Редактировать: Поскольку вы не можете изменить свою модель, вам нужно согнуть свои тесты, чтобы они подходили. Используя описанную мною технику, вы можете создавать строки, которые соответствуют вашим различным атрибутам модели, а затем использовать read_attribute(attr_string), чтобы получить значение атрибута. Если у вас возникли проблемы с этим, я думаю, вам нужно задать новый вопрос.

...