Как я могу реорганизовать этот фрагмент кода Ruby для удаления дублирования? - PullRequest
1 голос
/ 19 декабря 2008

У меня нет проблем как таковых, но я новичок в Ruby. У меня есть 3 повторяемых фрагмента кода в одном методе, и я хотел бы знать, как настоящий Rubyist, во-первых, удалит дублирование и, во-вторых, сделает его более пригодным для повторного использования.

Вот код вопроса:

file = File.new( destination)
doc = REXML::Document.new file

doc.elements.each("configuration/continuity2/plans") do |element| 
  element.attributes["storebasedir"]  =  "#{TEST_OUTPUT_DIRECTORY}"
end

doc.elements.each("configuration/add").each do |database|
  database.raw_attributes = database.attributes.merge("connectionstring" => "#{TEST_CONNECTION_STRING}")
end

doc.elements.each("configuration/connectionStrings/plans") do |connectionString|
  connectionString.raw_attributes = connectionString.attributes.merge("connectionString" => "#{TEST_CONNECTION_STRING}")
end   

Любой совет приветствуется.

Ответы [ 3 ]

3 голосов
/ 19 декабря 2008

Последние два блока можно заменить на

["add", "connectionStrings/plans"].each do |elt_name|
  doc.elements.each("configuration/#{elt_name}").do |elt|
    elt.raw_attributes = elt.attributes.merge("connectionString" => "#{TEST_CONNECTION_STRING}")
  end
end

Я предполагаю, что различие в регистре между "connectionstring" и "connectionString" было случайным. Если это так, то это как раз иллюстрирует преимущество устранения дублирования.

Также вы можете заменить "#{TEST_CONNECTION_STRING}" на TEST_CONNECTION_STRING.

2 голосов
/ 19 декабря 2008

Я не вижу дублирования. Коллекции, которые вы перебираете и существенно различаются, и операции, которые вы выполняете для каждого элемента, также сильно отличаются. Я согласен с Оливье в том, что любая попытка удалить дублирование приведет к более сложному коду.

2 голосов
/ 19 декабря 2008

Вы можете попытаться добавить метод, который будет настолько универсальным, насколько это возможно, чтобы избежать этого, но они для меня существенно различаются ... Вы рискуете иметь сложный код, просто чтобы обернуть эти строки в один метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...