lib/blackcal/range/time_range.rb in blackcal-0.2.0 vs lib/blackcal/range/time_range.rb in blackcal-0.3.0

- old
+ new

@@ -1,13 +1,17 @@ # frozen_string_literal: true module Blackcal # Time range class TimeRange + include Enumerable + attr_reader :start, :finish # Initialize time range + # @param [Time, nil] start_time + # @param [Time, nil] finish_time optional def initialize(start_time, finish_time = nil) @start = start_time @finish = finish_time end @@ -20,8 +24,26 @@ return true if finish < timestamp return true if start > timestamp false + end + + # Returns range as array + # @param resolution [Symbol] :hour our :min + # @return [Array<Array<Integer>>] times + def to_a(resolution: :hour) + resolution_multiplier = resolution == :hour ? 60 * 60 : 60 + time_units = ((start - finish) / resolution_multiplier).abs.to_i + + time_units.times.map do |time_unit| + start + (time_unit * resolution_multiplier) + end + end + + # Iterate over range + # @param resolution [Symbol] :hour our :min + def each(resolution: :hour, &block) + to_a(resolution: resolution).each(&block) end end end