2015-01-05 4 views
0

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

Мой первоначальный код:

def some_url 
    if Rails.env == "development" 
     url = "http://12.12.12.12/something/#{self.id}" 
    else 
     url = "https://www.#{ENV['DOMAIN']}/something/#{self.id}?trk=0&updated_at=#{self.updated_at}" 
    end 
end 

не нравится if Rails.env == "development" часть, и я пытаюсь извлечь этот URL в переменной окружения. Моя первая попытка была сделать это:

def some_url 
    "#{ENV['DOMAIN']}/something/#{self.id}/#{ENV['URL_PARAMS']}" 
end 

Все хорошо, пока я не до конца с updated_at. Мне нужно это для каждой среды, кроме разработки. Таким образом, я не могу добавить его как переменную среды, поскольку он является динамическим. Добавление его условно не имеет смысла, поскольку оно не делает ничего лучше, чем у меня уже есть. Любые мысли о том, как справиться с этим?

ответ

0

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

def some_url(params = {}) 
    base_url = "#{ENV['DOMAIN']}/something/#{self.id}/#{ENV['URL_PARAMS']}" 

    params.merge!(updated_at: self.updated_at) unless Rails.env.development? 

    base_url << "?#{params.to_query}" unless params.blank? 
end 
+0

Мне нравится этот подход. Я вижу, что нет никакого способа обойти условное, поэтому я считаю, что это самый чистый/лучший вариант. Спасибо за помощь. –

0

Я думаю, вам нужно условное место. Единственный способ, которым я могу думать без чтобы использовать регулярные выражения, чтобы соответствовать «updated_at =» с переменной ENV и под это для «updated_at = # {} self.updated_at»

Как так:

def some_url 
    "#{ENV['DOMAIN']}/something/#{self.id}/#{ENV['URL_PARAMS'].sub('updated_at=', "updated_at=#{self.updated_at}")}" 
end 
+0

Это хороший вариант, но я не уверен, что хочу сделать регулярное выражение, но мне все равно нравится идея. Спасибо за помощь. –

+0

Да, я думаю, что другое решение - путь чище –