lib/thermometer/evaluate.rb in thermometer-0.0.2 vs lib/thermometer/evaluate.rb in thermometer-0.0.3

- old
+ new

@@ -1,21 +1,25 @@ module Thermometer module Evaluate module CalcsForTime - def time_diff_for(date, increment=:days, reference=DateTime.now) - now = Time.at(reference) + def time_diff_for(date, opts={}) # increment: :days, reference: DateTime.now) + defaults = {:increment => :days} + opts = defaults.merge(opts) + now = Time.at(opts[:reference]) diff = (now - date).to_i - (diff.to_f/1.send(increment)).send(increment) + (diff.to_f/1.send(opts[:increment])).send(opts[:increment]) end ## # @sample is an array of timestamps # @reference is a point in time to evaluate the time_diff - def average(sample, increment=:days, reference=DateTime.now) - (sample.map { |s| time_diff_for(s,increment,reference) }. - inject{ |d,e| d+ e}.to_f / sample.size.send(increment)).send(increment) + def average(sample, opts={} ) #increment: :days, reference: DateTime.now) + defaults = {:increment => :days} + opts = defaults.merge(opts) + (sample.map { |s| time_diff_for(s,:increment => opts[:increment],:reference => opts[:reference]) }. + inject{ |d,e| d+ e}.to_f / sample.size.send(opts[:increment])).send(opts[:increment]) end def min end @@ -26,16 +30,17 @@ end module Temperatures include Thermometer::Evaluate::CalcsForTime - def has_temperature(options={}) + date_reference = options[:date_reference].nil? ? DateTime.now : options[:date_reference] sample = sample_records options + if sample.size > 1 - evaluate_level(average(sample)) + evaluate_level(average(sample, :reference => date_reference)) elsif sample.size == 1 - evaluate_level(time_diff_for(sample.first)) + evaluate_level(time_diff_for(sample.first, :reference => date_reference)) else :none end end