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