I've created a helper method that is essentially used to get the default state of an select:
<%= select_tag "question_main_frequency",
options_for_frequency_state(frequency_segment(question)), { class: 'form-control' } %>
The helper method I've created to get the default state looks like this:
def frequency_segment(question)
return false if question.id.nil?
question = Question.find(question.id)
if question.weekly?
'weekly'
elsif question.odd_weeks? || question.even_weeks?
'Biweekly'
elsif question.start_of_month? || question.end_of_month?
'Monthly'
elsif question.start_of_quarter? || question.end_of_quarter?
'Quarterly'
end
end
The reason why I need this is because that form populates a new select form with the methods you see in the helper. So if they select 'biweekly' then question.odd_weeks
and question.even_weeks
appear as two options.
and you don't have to be a genius to see that this isn't exactly beautiful. It's also causing:
Perceived complexity for frequency_segment is too high. [10/7]
Method has too many lines. [11/10]
Cyclomatic complexity for frequency_segment is too high.[9/6]
on rubocop. The thing is I'm not entirely sure how to refactor this. The Question methods are enum, set up like this:
class Question < ActiveRecord::Base
enum frequency: { weekly: 0, odd_weeks: 1, even_weeks: 2,
start_of_month: 3, end_of_month: 4,
start_of_quarter: 5, end_of_quarter: 6 }
any ideas on how I can refactor this?