class Biz::Calculation::ForDuration
Constants
- UNITS
Attributes
scalar[R]
schedule[R]
Public Class Methods
new(schedule, scalar)
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 86 def initialize(schedule, scalar) @schedule = schedule @scalar = Integer(scalar) fail ArgumentError, 'negative scalar' if @scalar.negative? end
unit()
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 21 def self.unit name.split('::').last.downcase.to_sym end
units()
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 11 def self.units UNITS end
with_unit(schedule, scalar, unit)
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 15 def self.with_unit(schedule, scalar, unit) fail ArgumentError, 'unsupported unit' unless UNITS.include?(unit) public_send(unit, schedule, scalar) end
Private Class Methods
day_class()
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 48 def self.day_class Class.new(self) do def before(time) periods(:before, time).first.end_time end def after(time) periods(:after, time).first.start_time end private def periods(direction, time) schedule .periods .public_send( direction, advanced_time(direction, schedule.in_zone.local(time)) ) end def advanced_time(direction, time) schedule .in_zone .on_date( schedule .dates .days(scalar) .public_send(direction, time.to_date), DayTime.from_time(time) ) end end end
time_class()
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 25 def self.time_class Class.new(self) do def before(time) advanced_periods(:before, time).last.start_time end def after(time) advanced_periods(:after, time).last.end_time end private def advanced_periods(direction, time) schedule .periods .public_send(direction, time) .timeline .for(Duration.public_send(unit, scalar)) .to_a end end end
Public Instance Methods
advanced_periods(direction, time)
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 37 def advanced_periods(direction, time) schedule .periods .public_send(direction, time) .timeline .for(Duration.public_send(unit, scalar)) .to_a end
advanced_time(direction, time)
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 69 def advanced_time(direction, time) schedule .in_zone .on_date( schedule .dates .days(scalar) .public_send(direction, time.to_date), DayTime.from_time(time) ) end
after(time)
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 31 def after(time) advanced_periods(:after, time).last.end_time end
before(time)
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 27 def before(time) advanced_periods(:before, time).last.start_time end
periods(direction, time)
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 60 def periods(direction, time) schedule .periods .public_send( direction, advanced_time(direction, schedule.in_zone.local(time)) ) end
Private Instance Methods
unit()
click to toggle source
# File lib/biz/calculation/for_duration.rb, line 98 def unit self.class.unit end