diff --git a/lib/periodicity/extensions/active_job.rb b/lib/periodicity/extensions/active_job.rb index 4e40a44..5def355 100644 --- a/lib/periodicity/extensions/active_job.rb +++ b/lib/periodicity/extensions/active_job.rb @@ -2,7 +2,7 @@ module Periodicity module Extensions class ActiveJob def self.perform_every(period, *args) - @period = period + @period = Period.new(period, *args) end end end diff --git a/lib/periodicity/period.rb b/lib/periodicity/period.rb index 2e0aab7..8b5fbc3 100644 --- a/lib/periodicity/period.rb +++ b/lib/periodicity/period.rb @@ -1,11 +1,24 @@ module Periodicity class Period - def initialize(period) + def initialize(period, at: nil) @period = period + @at_hour, @at_min = parse_at(at) if at end def next - @period.from_now + @period.from_now.change({hour: @at_hour, min: @at_min}.compact) + end + + def parse_at(at) + case at + when String + time = Time.parse(at) + return time.hour, time.min + when Hash + return at[:hour], at[:min] + else + raise "Unknown 'at' format" + end end end end diff --git a/spec/period_spec.rb b/spec/period_spec.rb index 4605f43..4d2265d 100644 --- a/spec/period_spec.rb +++ b/spec/period_spec.rb @@ -13,6 +13,23 @@ describe Periodicity::Period do @period = Periodicity::Period.new(2.day) expect(@period.next).to be_eql(2.day.from_now) end + + it "should set time to 'at' time as a string" do + @period = Periodicity::Period.new(2.day, at: "15:20") + expect(@period.next).to be_eql(2.day.from_now.change(hour: 15, min: 20)) + end + + it "should set time to 'at' time as a hash" do + at = {hour: 18, min: 45} + @period = Periodicity::Period.new(2.day, at: at) + expect(@period.next).to be_eql(2.day.from_now.change(at)) + end + + it "should raise error when 'at' is wrong" do + expect { + @period = Periodicity::Period.new(2.day, at: 1) + }.to raise_error("Unknown 'at' format") + end end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b088166..2c822b8 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -4,6 +4,5 @@ Bundler.setup require 'timecop' require 'periodicity' - RSpec.configure do |config| end