From b3a26ba7d32c923352889eb2ef35073a5e990651 Mon Sep 17 00:00:00 2001 From: Dzmitry Plashchynski Date: Sun, 1 Mar 2015 16:06:10 +0200 Subject: [PATCH] Add basic Period class --- Gemfile.lock | 3 +++ lib/periodicity.rb | 1 + lib/periodicity/extensions/active_job.rb | 3 ++- lib/periodicity/period.rb | 11 +++++++++++ periodicity.gemspec | 2 ++ spec/period_spec.rb | 18 ++++++++++++++++++ spec/spec_helper.rb | 2 ++ 7 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 lib/periodicity/period.rb create mode 100644 spec/period_spec.rb diff --git a/Gemfile.lock b/Gemfile.lock index 41b403f..389d25f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,6 +3,7 @@ PATH specs: periodicity (0.0.1) activejob + activesupport GEM remote: https://rubygems.org/ @@ -37,6 +38,7 @@ GEM rspec-support (~> 3.2.0) rspec-support (3.2.2) thread_safe (0.3.4) + timecop (0.7.3) tzinfo (1.2.2) thread_safe (~> 0.1) @@ -48,3 +50,4 @@ DEPENDENCIES periodicity! rake rspec (~> 3.0) + timecop diff --git a/lib/periodicity.rb b/lib/periodicity.rb index 1556fdd..d3aaf08 100644 --- a/lib/periodicity.rb +++ b/lib/periodicity.rb @@ -1,6 +1,7 @@ module Periodicity end +require "active_support/all" require "periodicity/version.rb" require "periodicity/period.rb" require "periodicity/rails.rb" diff --git a/lib/periodicity/extensions/active_job.rb b/lib/periodicity/extensions/active_job.rb index 2c01783..4e40a44 100644 --- a/lib/periodicity/extensions/active_job.rb +++ b/lib/periodicity/extensions/active_job.rb @@ -1,7 +1,8 @@ module Periodicity module Extensions class ActiveJob - def perform_every(period, *args) + def self.perform_every(period, *args) + @period = period end end end diff --git a/lib/periodicity/period.rb b/lib/periodicity/period.rb new file mode 100644 index 0000000..2e0aab7 --- /dev/null +++ b/lib/periodicity/period.rb @@ -0,0 +1,11 @@ +module Periodicity + class Period + def initialize(period) + @period = period + end + + def next + @period.from_now + end + end +end diff --git a/periodicity.gemspec b/periodicity.gemspec index 49a7a2b..568d11d 100644 --- a/periodicity.gemspec +++ b/periodicity.gemspec @@ -13,9 +13,11 @@ Gem::Specification.new do |s| s.rubyforge_project = "periodicity" s.add_runtime_dependency "activejob" + s.add_runtime_dependency "activesupport" s.add_development_dependency "rake" s.add_development_dependency "bundler", ">= 1.0.0" s.add_development_dependency "rspec", "~> 3.0" + s.add_development_dependency "timecop" s.files = `git ls-files`.split("\n") s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact diff --git a/spec/period_spec.rb b/spec/period_spec.rb new file mode 100644 index 0000000..4605f43 --- /dev/null +++ b/spec/period_spec.rb @@ -0,0 +1,18 @@ +require "spec_helper" + +describe Periodicity::Period do + around(:each) do |example| + Timecop.freeze do + example.run + end + end + + describe "#next" do + context "in daily basis" do + it "should return the time 2 days from now" do + @period = Periodicity::Period.new(2.day) + expect(@period.next).to be_eql(2.day.from_now) + end + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 5bfdf44..b088166 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,7 +1,9 @@ require 'bundler/setup' Bundler.setup +require 'timecop' require 'periodicity' + RSpec.configure do |config| end