Skip to content

Instantly share code, notes, and snippets.

@dsjoerg
Created December 8, 2015 17:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dsjoerg/60a89b4dbb31ee4ec475 to your computer and use it in GitHub Desktop.
Save dsjoerg/60a89b4dbb31ee4ec475 to your computer and use it in GitHub Desktop.
curfew_computation.rb
# returns value in decimal hours (e.g. 23.5 = 11:30pm)
def self.compute_curfew(user, verbose = false)
targetHoursSleep = 7.5
targetMinutesSleep = targetHoursSleep * 60
minutesSleptType = ObservationType.find_by!(name: "minutes_slept_jawbone")
curfewType = ObservationType.find_by!(name: "curfew")
lastSleepObservation = DailyObservation.retrieve(minutesSleptType, { beforeDate: Date.today, user: user }).last
recentMinutesSlept = DailyObservation.recentValue(minutesSleptType, { includeToday: false, user: user } )
recentHoursSlept = recentMinutesSlept / 60.0
deficitMinutesSleep = targetMinutesSleep - recentMinutesSlept
recentCurfewHours = DailyObservation.recentValue(curfewType, { includeToday: false, user: user } )
newCurfewHours = recentCurfewHours - (deficitMinutesSleep / 60.0)
if (verbose)
puts """
last: #{TimeUtils.minutes_to_display(lastSleepObservation[:obs_value])} (on #{lastSleepObservation[:obs_date]})
recent sleep: #{TimeUtils.hours_to_display(recentHoursSlept, false)}
target sleep: #{TimeUtils.hours_to_display(targetHoursSleep, false)}
recent curfew: #{TimeUtils.hours_to_display(recentCurfewHours, true)}
new curfew: #{TimeUtils.hours_to_display(newCurfewHours, true)}
"""
end
newCurfewHours
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment