app/models/punch.rb in punching_bag-0.3.8 vs app/models/punch.rb in punching_bag-0.3.9
- old
+ new
@@ -97,9 +97,41 @@
return 0 if sums.empty? # catch divide by zero
sums.values.inject(:+).to_f / sums.length
end
+ def self.combine_by_day(punchable)
+ combine_by :day, punchable
+ end
+
+ def self.combine_by_monthday(punchable)
+ combine_by :month, punchable
+ end
+
+ def self.combine_by_year(punchable)
+ combine_by :year, punchable
+ end
+
+ def self.combine_by(timeframe, punchable)
+ combo = nil
+ punches = punchable.punches.by_timeframe(timeframe)
+
+ if punches.length > 1
+ timestamps = punches.map{|p| [p.average_time.to_i] * p.hits}.flatten
+
+ combo = Punch.new(punchable: punchable)
+ combo.starts_at = punches.map(&:starts_at).min
+ combo.ends_at = punches.map(&:ends_at).max
+ combo.average_time = Time.at(timestamps.sum / timestamps.length).to_datetime
+ combo.hits = punches.map(&:hits).sum
+ combo.save!
+
+ punches.delete_all
+ end
+
+ combo
+ end
+
private
def set_defaults
if date = (self.starts_at ||= DateTime.now)
self.ends_at ||= date