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