module SpiritsHelper CHALDEAN_ORDER = %w[Saturn Jupiter Mars Sun Venus Mercury Moon].freeze def planetary_hour(date_time) day_start = date_time.beginning_of_day hour_duration = (date_time.end_of_day - day_start) / 12.0 hour_number = ((date_time - day_start) / hour_duration).floor weekday = date_time.strftime('%A') start_index = CHALDEAN_ORDER.index(planet_for_day(weekday)) planet_index = (start_index + hour_number) % 7 CHALDEAN_ORDER[planet_index] end def planet_for_day(weekday) case weekday when 'Sunday' 'Sun' when 'Monday' 'Moon' when 'Tuesday' 'Mars' when 'Wednesday' 'Mercury' when 'Thursday' 'Jupiter' when 'Friday' 'Venus' when 'Saturday' 'Saturn' end end end