periods 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/periods/classes.rb +1 -0
- data/lib/periods/constants.rb +1 -0
- data/lib/periods/modules/halfyear.rb +8 -15
- data/lib/periods/modules/halfyearly_period.rb +7 -11
- data/lib/periods/modules/month.rb +4 -13
- data/lib/periods/modules/monthly_period.rb +7 -11
- data/lib/periods/modules/null_period.rb +59 -0
- data/lib/periods/modules/quarter.rb +3 -14
- data/lib/periods/modules/quarterly_period.rb +6 -11
- data/lib/periods/modules/single_date_initialize.rb +55 -0
- data/lib/periods/modules/year.rb +16 -16
- data/lib/periods/modules/yearly_period.rb +7 -11
- data/lib/periods/modules.rb +1 -0
- data/lib/periods/null_period.rb +9 -0
- data/lib/periods/version.rb +1 -1
- data/spec/initialized_by_single_date.rb +40 -0
- data/spec/lib/halfyear_spec.rb +13 -0
- data/spec/lib/halfyearly_period_spec.rb +3 -8
- data/spec/lib/month_spec.rb +3 -8
- data/spec/lib/monthly_period_spec.rb +36 -4
- data/spec/lib/null_period_spec.rb +82 -0
- data/spec/lib/quarter_spec.rb +3 -8
- data/spec/lib/quarterly_period_spec.rb +3 -8
- data/spec/lib/year_spec.rb +23 -8
- data/spec/lib/yearly_period_spec.rb +3 -8
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be562d9701b30b7afcfc6dac163ad6e9a7cad181
|
4
|
+
data.tar.gz: a57326343a2442706f503dfe46776e5c084fc876
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d03693f89c82cca815bb05ec1c4a3a03d0250c196a757c6b658dad0c41c47b9aa7d21ab4abb192c562d10f5908da4e1a2b210dfca53832e5a8afb005c6f8b90
|
7
|
+
data.tar.gz: 8464da097b035ad3ea932e43450efab9edeefbdf4eac9938652910e8e202e54e7a8a712ad263f38ce80615d0086a67572cf93524ce2f1eb741ad92282dcbad72
|
data/README.md
CHANGED
@@ -164,6 +164,7 @@ A year starts at first day of a month and ends one year later:
|
|
164
164
|
year.next # => 01.02.2016 - 31.01.2017
|
165
165
|
year.previous # => 01.02.2014 - 31.01.2015
|
166
166
|
year.months # => [Month.for('01.02.2015'), ..., Month.for('01.01.2016')]
|
167
|
+
year.quarters # => [Quarter.for('01.02.2015'), ..., Quarter.for('01.11.2015')]
|
167
168
|
|
168
169
|
### If constants already exist
|
169
170
|
|
@@ -197,6 +198,7 @@ Write your own classes:
|
|
197
198
|
* Use Time not Date
|
198
199
|
* Optimize README
|
199
200
|
* Comment Code
|
201
|
+
* Provide helper methods Month('25.06.2015'), Quarter(), ...
|
200
202
|
|
201
203
|
## Contributing
|
202
204
|
|
data/lib/periods/classes.rb
CHANGED
data/lib/periods/constants.rb
CHANGED
@@ -8,26 +8,11 @@ module Periods
|
|
8
8
|
base.class_eval do
|
9
9
|
include Periods::Modules::HalfyearlyPeriod
|
10
10
|
include InstanceMethods
|
11
|
-
extend ClassMethods
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
module ClassMethods
|
16
|
-
##
|
17
|
-
# '25.06.2015' => 01.06.2015 - '30.11.2015'
|
18
|
-
#
|
19
|
-
def for(date)
|
20
|
-
new(date)
|
21
11
|
end
|
22
12
|
end
|
23
13
|
|
24
14
|
module InstanceMethods
|
25
15
|
|
26
|
-
def initialize(date)
|
27
|
-
date = Date.parse(date.to_s)
|
28
|
-
super(beginning_of_month(date), end_of_month(beginning_of_month(date).next_month(6).prev_day))
|
29
|
-
end
|
30
|
-
|
31
16
|
def months
|
32
17
|
months = [Periods::Month.for(start_date)]
|
33
18
|
1.upto(5) do |idx|
|
@@ -36,7 +21,15 @@ module Periods
|
|
36
21
|
months
|
37
22
|
end
|
38
23
|
|
24
|
+
def quarters
|
25
|
+
[Periods::Quarter.for(start_date), Periods::Quarter.for(start_date.next_month(3))]
|
26
|
+
end
|
27
|
+
|
39
28
|
private
|
29
|
+
def init_with_date(date)
|
30
|
+
init_with_dates(
|
31
|
+
beginning_of_month(date), end_of_month(beginning_of_month(date).next_month(6).prev_day))
|
32
|
+
end
|
40
33
|
|
41
34
|
def beginning_of_month(date)
|
42
35
|
Periods::DateCalculator.new(date).beginning_of_month
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'periods/modules/period'
|
2
|
+
require 'periods/modules/single_date_initialize'
|
2
3
|
|
3
4
|
module Periods
|
4
5
|
module Modules
|
@@ -7,18 +8,8 @@ module Periods
|
|
7
8
|
def self.included(base)
|
8
9
|
base.class_eval do
|
9
10
|
include Periods::Modules::Period
|
11
|
+
include SingleDateInitialize
|
10
12
|
include InstanceMethods
|
11
|
-
extend ClassMethods
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
module ClassMethods
|
16
|
-
##
|
17
|
-
# '25.06.2015' => 25.06.2015 - '24.12.2015'
|
18
|
-
#
|
19
|
-
def for(date)
|
20
|
-
date = Date.parse(date.to_s)
|
21
|
-
new(date, date.next_month(6).prev_day)
|
22
13
|
end
|
23
14
|
end
|
24
15
|
|
@@ -35,6 +26,11 @@ module Periods
|
|
35
26
|
(self.next.start_date - start_date).to_i
|
36
27
|
end
|
37
28
|
|
29
|
+
private
|
30
|
+
def init_with_date(date)
|
31
|
+
init_with_dates(date, date.next_month(6).prev_day)
|
32
|
+
end
|
33
|
+
|
38
34
|
end
|
39
35
|
end
|
40
36
|
end
|
@@ -9,24 +9,11 @@ module Periods
|
|
9
9
|
base.class_eval do
|
10
10
|
include Periods::Modules::MonthlyPeriod
|
11
11
|
include InstanceMethods
|
12
|
-
extend ClassMethods
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
module ClassMethods
|
17
|
-
def for(date)
|
18
|
-
new(date)
|
19
12
|
end
|
20
13
|
end
|
21
14
|
|
22
15
|
module InstanceMethods
|
23
16
|
|
24
|
-
def initialize(date)
|
25
|
-
date = Date.parse(date.to_s)
|
26
|
-
@start_date = beginning_of_month(date)
|
27
|
-
@end_date = end_of_month(date)
|
28
|
-
end
|
29
|
-
|
30
17
|
def month
|
31
18
|
start_date.month
|
32
19
|
end
|
@@ -47,6 +34,10 @@ module Periods
|
|
47
34
|
|
48
35
|
private
|
49
36
|
|
37
|
+
def init_with_date(date)
|
38
|
+
init_with_dates(beginning_of_month(date), end_of_month(date))
|
39
|
+
end
|
40
|
+
|
50
41
|
def beginning_of_month(date)
|
51
42
|
Periods::DateCalculator.new(date).beginning_of_month
|
52
43
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'periods/modules/period'
|
2
|
+
require 'periods/modules/single_date_initialize'
|
2
3
|
|
3
4
|
module Periods
|
4
5
|
module Modules
|
@@ -7,18 +8,8 @@ module Periods
|
|
7
8
|
def self.included(base)
|
8
9
|
base.class_eval do
|
9
10
|
include Periods::Modules::Period
|
11
|
+
include SingleDateInitialize
|
10
12
|
include InstanceMethods
|
11
|
-
extend ClassMethods
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
module ClassMethods
|
16
|
-
##
|
17
|
-
# '25.06.2015' => 25.06.2015 - '24.07.2015'
|
18
|
-
#
|
19
|
-
def for(date)
|
20
|
-
date = Date.parse(date.to_s)
|
21
|
-
new(date, date.next_month.prev_day)
|
22
13
|
end
|
23
14
|
end
|
24
15
|
|
@@ -37,6 +28,11 @@ module Periods
|
|
37
28
|
self.class.for(start_date.prev_month)
|
38
29
|
end
|
39
30
|
|
31
|
+
private
|
32
|
+
def init_with_date(date)
|
33
|
+
init_with_dates(date, date.next_month.prev_day)
|
34
|
+
end
|
35
|
+
|
40
36
|
end
|
41
37
|
end
|
42
38
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Periods
|
2
|
+
module Modules
|
3
|
+
module NullPeriod
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.class_eval do
|
7
|
+
include Comparable
|
8
|
+
include InstanceMethods
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module InstanceMethods
|
13
|
+
|
14
|
+
attr_reader :start_date
|
15
|
+
attr_reader :end_date
|
16
|
+
|
17
|
+
def initialize(*args)
|
18
|
+
end
|
19
|
+
|
20
|
+
def ==(period)
|
21
|
+
self.class == period.class
|
22
|
+
end
|
23
|
+
|
24
|
+
def <=>(period)
|
25
|
+
0
|
26
|
+
end
|
27
|
+
|
28
|
+
def next
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
def previous
|
33
|
+
self
|
34
|
+
end
|
35
|
+
|
36
|
+
def days
|
37
|
+
0
|
38
|
+
end
|
39
|
+
|
40
|
+
def start_year
|
41
|
+
0
|
42
|
+
end
|
43
|
+
|
44
|
+
def end_year
|
45
|
+
0
|
46
|
+
end
|
47
|
+
|
48
|
+
def include?(period)
|
49
|
+
false
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_s
|
53
|
+
"#{self.class.name}"
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -8,27 +8,13 @@ module Periods
|
|
8
8
|
|
9
9
|
def self.included(base)
|
10
10
|
base.class_eval do
|
11
|
-
include Periods::Modules::Period
|
12
11
|
include Periods::Modules::QuarterlyPeriod
|
13
12
|
include InstanceMethods
|
14
|
-
extend ClassMethods
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
module ClassMethods
|
19
|
-
def for(date)
|
20
|
-
new(date)
|
21
13
|
end
|
22
14
|
end
|
23
15
|
|
24
16
|
module InstanceMethods
|
25
17
|
|
26
|
-
def initialize(date)
|
27
|
-
date = Date.parse(date.to_s)
|
28
|
-
@start_date = beginning_of_month(date)
|
29
|
-
@end_date = end_of_month(@start_date.next_month(2))
|
30
|
-
end
|
31
|
-
|
32
18
|
def months
|
33
19
|
[ Periods::Month.for(start_date),
|
34
20
|
Periods::Month.for(start_date.next_month),
|
@@ -36,6 +22,9 @@ module Periods
|
|
36
22
|
end
|
37
23
|
|
38
24
|
private
|
25
|
+
def init_with_date(date)
|
26
|
+
init_with_dates(beginning_of_month(date), end_of_month(date.next_month(2)))
|
27
|
+
end
|
39
28
|
|
40
29
|
def beginning_of_month(date)
|
41
30
|
Periods::DateCalculator.new(date).beginning_of_month
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'periods/date_calculator'
|
2
2
|
require 'periods/modules/period'
|
3
|
+
require 'periods/modules/single_date_initialize'
|
3
4
|
|
4
5
|
module Periods
|
5
6
|
module Modules
|
@@ -8,18 +9,8 @@ module Periods
|
|
8
9
|
def self.included(base)
|
9
10
|
base.class_eval do
|
10
11
|
include Periods::Modules::Period
|
12
|
+
include SingleDateInitialize
|
11
13
|
include InstanceMethods
|
12
|
-
extend ClassMethods
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
module ClassMethods
|
17
|
-
##
|
18
|
-
# '25.06.2015' => 25.06.2015 - '24.07.2015'
|
19
|
-
#
|
20
|
-
def for(date)
|
21
|
-
date = Date.parse(date.to_s)
|
22
|
-
new(date, date.next_month(3).prev_day)
|
23
14
|
end
|
24
15
|
end
|
25
16
|
|
@@ -38,6 +29,10 @@ module Periods
|
|
38
29
|
self.class.for(start_date.prev_month(3))
|
39
30
|
end
|
40
31
|
|
32
|
+
private
|
33
|
+
def init_with_date(date)
|
34
|
+
init_with_dates(date, date.next_month(3).prev_day)
|
35
|
+
end
|
41
36
|
end
|
42
37
|
end
|
43
38
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Periods
|
2
|
+
module Modules
|
3
|
+
module SingleDateInitialize
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.class_eval do
|
7
|
+
extend ClassMethods
|
8
|
+
include InstanceMethods
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
def for(date)
|
14
|
+
new(date)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module InstanceMethods
|
19
|
+
##
|
20
|
+
# Initialize a new period based on a single given date.
|
21
|
+
#
|
22
|
+
# @example
|
23
|
+
#
|
24
|
+
# period = <Class>.new(Date.new(2015,6,25))
|
25
|
+
# period = <Class>.new('25.06.2015')
|
26
|
+
# period = <Class>.new(<Class>.new('25.06.2015')
|
27
|
+
#
|
28
|
+
def initialize(date)
|
29
|
+
if date.is_a?(self.class)
|
30
|
+
init_with_dates(date.start_date, date.end_date)
|
31
|
+
elsif date.is_a?(Date)
|
32
|
+
init_with_date(date)
|
33
|
+
elsif date.is_a?(String)
|
34
|
+
init_with_date(Date.parse(date.to_s))
|
35
|
+
elsif date.is_a?(Time)
|
36
|
+
init_with_date(Date.parse(date.to_s))
|
37
|
+
else
|
38
|
+
raise ArgumentError, "#{self.class} cannot be initialized with #{date.class}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
protected
|
43
|
+
def init_with_date(date)
|
44
|
+
raise "Please implement."
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
def init_with_dates(start_date, end_date)
|
49
|
+
@start_date = start_date
|
50
|
+
@end_date = end_date
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/periods/modules/year.rb
CHANGED
@@ -9,26 +9,10 @@ module Periods
|
|
9
9
|
base.class_eval do
|
10
10
|
include Periods::Modules::YearlyPeriod
|
11
11
|
include InstanceMethods
|
12
|
-
extend ClassMethods
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
module ClassMethods
|
17
|
-
##
|
18
|
-
# '25.06.2015' => 01.06.2015 - '30.05.2016'
|
19
|
-
#
|
20
|
-
def for(date)
|
21
|
-
new(date)
|
22
12
|
end
|
23
13
|
end
|
24
14
|
|
25
15
|
module InstanceMethods
|
26
|
-
|
27
|
-
def initialize(date)
|
28
|
-
date = Date.parse(date.to_s)
|
29
|
-
super(beginning_of_month(date), end_of_month(beginning_of_month(date).next_year.prev_day))
|
30
|
-
end
|
31
|
-
|
32
16
|
##
|
33
17
|
# 01.06.2015 => 01.06.2016
|
34
18
|
#
|
@@ -55,7 +39,23 @@ module Periods
|
|
55
39
|
months
|
56
40
|
end
|
57
41
|
|
42
|
+
def quarters
|
43
|
+
quarters = [Periods::Quarter.for(start_date)]
|
44
|
+
1.upto(3) do |idx|
|
45
|
+
quarters << Periods::Quarter.for(start_date.next_month(idx*3))
|
46
|
+
end
|
47
|
+
quarters
|
48
|
+
end
|
49
|
+
|
50
|
+
def halfyears
|
51
|
+
[Periods::Halfyear.for(start_date), Periods::Halfyear.for(start_date.next_month(6))]
|
52
|
+
end
|
53
|
+
|
58
54
|
private
|
55
|
+
def init_with_date(date)
|
56
|
+
init_with_dates(
|
57
|
+
beginning_of_month(date), end_of_month(beginning_of_month(date).next_year.prev_day))
|
58
|
+
end
|
59
59
|
|
60
60
|
def beginning_of_month(date)
|
61
61
|
Periods::DateCalculator.new(date).beginning_of_month
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'periods/modules/period'
|
2
|
+
require 'periods/modules/single_date_initialize'
|
2
3
|
|
3
4
|
module Periods
|
4
5
|
module Modules
|
@@ -7,18 +8,8 @@ module Periods
|
|
7
8
|
def self.included(base)
|
8
9
|
base.class_eval do
|
9
10
|
include Periods::Modules::Period
|
11
|
+
include SingleDateInitialize
|
10
12
|
include InstanceMethods
|
11
|
-
extend ClassMethods
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
module ClassMethods
|
16
|
-
##
|
17
|
-
# '25.06.2015' => 25.06.2015 - '24.06.2016'
|
18
|
-
#
|
19
|
-
def for(date)
|
20
|
-
date = Date.parse(date.to_s)
|
21
|
-
new(date, date.next_year.prev_day)
|
22
13
|
end
|
23
14
|
end
|
24
15
|
|
@@ -41,6 +32,11 @@ module Periods
|
|
41
32
|
(self.next.start_date - start_date).to_i
|
42
33
|
end
|
43
34
|
|
35
|
+
private
|
36
|
+
def init_with_date(date)
|
37
|
+
init_with_dates(date, date.next_year.prev_day)
|
38
|
+
end
|
39
|
+
|
44
40
|
end
|
45
41
|
end
|
46
42
|
end
|
data/lib/periods/modules.rb
CHANGED
data/lib/periods/version.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
shared_examples "Initialized by single date" do
|
2
|
+
|
3
|
+
describe ".for" do
|
4
|
+
|
5
|
+
context "Date given" do
|
6
|
+
it "returns period based on given date" do
|
7
|
+
expect(described_class.for(Date.new(2015,6,25))).to eq period
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context "Time given" do
|
12
|
+
it "returns period based on given date" do
|
13
|
+
expect(described_class.for(Time.new(2015,6,25,12,13,14))).to eq period
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "String given" do
|
18
|
+
it "returns period based on given date" do
|
19
|
+
expect(described_class.for('25.06.2015')).to eq period
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "same class given" do
|
24
|
+
it "returns period based on given date" do
|
25
|
+
expect(described_class.for(described_class.for('25.06.2015'))).to eq period
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "Period given" do
|
30
|
+
it "raise exception" do
|
31
|
+
expect {
|
32
|
+
described_class.for(Period.new('01.01.2015', '01.01.2015'))
|
33
|
+
}.to raise_error(ArgumentError)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
|
data/spec/lib/halfyear_spec.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'periods/constants'
|
3
|
+
require 'initialized_by_single_date'
|
3
4
|
|
4
5
|
describe Halfyear do
|
5
6
|
|
6
7
|
let(:subject) { described_class.for("1.1.2015") }
|
7
8
|
|
8
9
|
it_behaves_like "Lint Check"
|
10
|
+
it_behaves_like "Initialized by single date" do
|
11
|
+
let(:period) { described_class.for(Date.new(2015,6,25)) }
|
12
|
+
end
|
9
13
|
|
10
14
|
describe ".for" do
|
11
15
|
it "returns halfyear of given date included" do
|
@@ -38,4 +42,13 @@ describe Halfyear do
|
|
38
42
|
]
|
39
43
|
end
|
40
44
|
end
|
45
|
+
|
46
|
+
describe "#quarters" do
|
47
|
+
it "returns quarters of halfyear" do
|
48
|
+
expect(described_class.for('01.01.2015').quarters).
|
49
|
+
to eq [ Quarter.for('01.01.2015'), Quarter.for('01.04.2015')]
|
50
|
+
expect(described_class.for('01.06.2015').quarters).
|
51
|
+
to eq [ Quarter.for('01.06.2015'), Quarter.for('01.09.2015')]
|
52
|
+
end
|
53
|
+
end
|
41
54
|
end
|
@@ -1,19 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'periods/constants'
|
3
|
+
require 'initialized_by_single_date'
|
3
4
|
|
4
5
|
describe HalfyearlyPeriod do
|
5
6
|
|
6
7
|
let(:subject) { described_class.for("1.1.2015") }
|
7
8
|
|
8
9
|
it_behaves_like "Lint Check"
|
9
|
-
|
10
|
-
|
11
|
-
it "returns halfyear of given date included" do
|
12
|
-
period = described_class.for('25.06.2015')
|
13
|
-
|
14
|
-
expect(period.start_date).to eq Date('25.06.2015')
|
15
|
-
expect(period.end_date).to eq Date('24.12.2015')
|
16
|
-
end
|
10
|
+
it_behaves_like "Initialized by single date" do
|
11
|
+
let(:period) { described_class.for(Date.new(2015,6,25)) }
|
17
12
|
end
|
18
13
|
|
19
14
|
describe "#next" do
|
data/spec/lib/month_spec.rb
CHANGED
@@ -1,19 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'periods/constants'
|
3
|
+
require 'initialized_by_single_date'
|
3
4
|
|
4
5
|
describe Month do
|
5
6
|
|
6
7
|
let(:subject) { described_class.for("1.1.2015") }
|
7
8
|
|
8
9
|
it_behaves_like "Lint Check"
|
9
|
-
|
10
|
-
|
11
|
-
it "returns month of given date included" do
|
12
|
-
month = described_class.for('25.06.2015')
|
13
|
-
|
14
|
-
expect(month.start_date).to eq Date('01.06.2015')
|
15
|
-
expect(month.end_date).to eq Date('30.06.2015')
|
16
|
-
end
|
10
|
+
it_behaves_like "Initialized by single date" do
|
11
|
+
let(:period) { described_class.for(Date.new(2015,6,25)) }
|
17
12
|
end
|
18
13
|
|
19
14
|
describe "#next" do
|
@@ -1,18 +1,50 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'periods/constants'
|
3
|
+
require 'initialized_by_single_date'
|
3
4
|
|
4
5
|
describe MonthlyPeriod do
|
5
6
|
|
6
7
|
let(:subject) { described_class.for("1.1.2015") }
|
7
8
|
|
8
9
|
it_behaves_like "Lint Check"
|
10
|
+
it_behaves_like "Initialized by single date" do
|
11
|
+
let(:period) { described_class.for(Date.new(2015,6,25)) }
|
12
|
+
end
|
9
13
|
|
10
14
|
describe ".for" do
|
11
|
-
|
12
|
-
month
|
15
|
+
context "Date given" do
|
16
|
+
it "returns month of given date included" do
|
17
|
+
month = described_class.for(Date.new(2015,6,25))
|
18
|
+
|
19
|
+
expect(month.start_date).to eq Date('25.06.2015')
|
20
|
+
expect(month.end_date).to eq Date('24.07.2015')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "String given" do
|
25
|
+
it "returns month of given date included" do
|
26
|
+
month = described_class.for('25.06.2015')
|
27
|
+
|
28
|
+
expect(month.start_date).to eq Date('25.06.2015')
|
29
|
+
expect(month.end_date).to eq Date('24.07.2015')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "MonthlyPeriod given" do
|
34
|
+
it "returns month of given date included" do
|
35
|
+
period = described_class.for(described_class.for('25.06.2015'))
|
36
|
+
|
37
|
+
expect(period.start_date).to eq Date('25.06.2015')
|
38
|
+
expect(period.end_date).to eq Date('24.07.2015')
|
39
|
+
end
|
40
|
+
end
|
13
41
|
|
14
|
-
|
15
|
-
|
42
|
+
context "Period given" do
|
43
|
+
it "raise exception" do
|
44
|
+
expect {
|
45
|
+
described_class.for(Period.new('25.06.2015', '24.07.2015'))
|
46
|
+
}.to raise_error(ArgumentError)
|
47
|
+
end
|
16
48
|
end
|
17
49
|
end
|
18
50
|
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'periods/constants'
|
3
|
+
|
4
|
+
describe NullPeriod do
|
5
|
+
|
6
|
+
def new_period(*args)
|
7
|
+
described_class.new(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe ".new" do
|
11
|
+
it "returns instance with not defined dates" do
|
12
|
+
period = described_class.new('25.06.2015', '20.05.2016')
|
13
|
+
|
14
|
+
expect(period.start_date).to be_nil
|
15
|
+
expect(period.end_date).to be_nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "==" do
|
20
|
+
context "same period given" do
|
21
|
+
it "returns true" do
|
22
|
+
expect(new_period == new_period).to be_truthy
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "not same period given" do
|
27
|
+
it "returns false" do
|
28
|
+
expect(new_period("02.02.2015", "28.02.2015") == Period.new("02.02.2015", "28.02.2015")).to be_falsey
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "comparing" do
|
34
|
+
it "compare correctly" do
|
35
|
+
expect(new_period("01.02.2015", "28.02.2015") >= new_period("01.02.2015", "28.02.2015")).to be_truthy
|
36
|
+
expect(new_period("01.02.2015", "28.02.2015") > new_period("01.01.2015", "31.01.2015")).to be_falsey
|
37
|
+
expect(new_period("01.02.2015", "28.02.2015") <= new_period("01.02.2015", "28.02.2015")).to be_truthy
|
38
|
+
expect(new_period("01.02.2015", "28.02.2015") < new_period("01.03.2015", "31.03.2015")).to be_falsey
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#next" do
|
43
|
+
it "returns next period" do
|
44
|
+
expect(new_period.next).to eq new_period
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#previous" do
|
49
|
+
it "returns previous period" do
|
50
|
+
expect(new_period.previous).to eq new_period
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#days" do
|
55
|
+
it "returns days of period" do
|
56
|
+
expect(new_period("25.06.2015", "19.08.2015").days).to eq 0
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "#start_year" do
|
61
|
+
it "returns start year of quarter" do
|
62
|
+
expect(new_period("25.06.2015", "19.08.2015").start_year).to eq 0
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#end_year" do
|
67
|
+
it "returns end year of quarter" do
|
68
|
+
expect(new_period("25.06.2015", "20.05.2016").end_year).to eq 0
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#include?" do
|
73
|
+
context "date included" do
|
74
|
+
it "returns true" do
|
75
|
+
expect(new_period("01.02.2015", "28.02.2015").include?(Date("01.02.2015"))).to be_falsey
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
data/spec/lib/quarter_spec.rb
CHANGED
@@ -1,19 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'periods/constants'
|
3
|
+
require 'initialized_by_single_date'
|
3
4
|
|
4
5
|
describe Quarter do
|
5
6
|
|
6
7
|
let(:subject) { described_class.for("1.1.2015") }
|
7
8
|
|
8
9
|
it_behaves_like "Lint Check"
|
9
|
-
|
10
|
-
|
11
|
-
it "returns quarter of given date included" do
|
12
|
-
period = described_class.for('25.06.2015')
|
13
|
-
|
14
|
-
expect(period.start_date).to eq Date('01.06.2015')
|
15
|
-
expect(period.end_date).to eq Date('31.08.2015')
|
16
|
-
end
|
10
|
+
it_behaves_like "Initialized by single date" do
|
11
|
+
let(:period) { described_class.for(Date.new(2015,6,25)) }
|
17
12
|
end
|
18
13
|
|
19
14
|
describe "#next" do
|
@@ -1,19 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'periods/constants'
|
3
|
+
require 'initialized_by_single_date'
|
3
4
|
|
4
5
|
describe QuarterlyPeriod do
|
5
6
|
|
6
7
|
let(:subject) { described_class.for("1.1.2015") }
|
7
8
|
|
8
9
|
it_behaves_like "Lint Check"
|
9
|
-
|
10
|
-
|
11
|
-
it "returns quarter of given date included" do
|
12
|
-
period = described_class.for('25.06.2015')
|
13
|
-
|
14
|
-
expect(period.start_date).to eq Date('25.06.2015')
|
15
|
-
expect(period.end_date).to eq Date('24.09.2015')
|
16
|
-
end
|
10
|
+
it_behaves_like "Initialized by single date" do
|
11
|
+
let(:period) { described_class.for(Date.new(2015,6,25)) }
|
17
12
|
end
|
18
13
|
|
19
14
|
describe "#next" do
|
data/spec/lib/year_spec.rb
CHANGED
@@ -1,19 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'periods/constants'
|
3
|
+
require 'initialized_by_single_date'
|
3
4
|
|
4
5
|
describe Year do
|
5
6
|
|
6
7
|
let(:subject) { described_class.for("1.1.2015") }
|
7
8
|
|
8
9
|
it_behaves_like "Lint Check"
|
9
|
-
|
10
|
-
|
11
|
-
it "returns year of given date included" do
|
12
|
-
year = described_class.for('25.06.2015')
|
13
|
-
|
14
|
-
expect(year.start_date).to eq Date('01.06.2015')
|
15
|
-
expect(year.end_date).to eq Date('31.05.2016')
|
16
|
-
end
|
10
|
+
it_behaves_like "Initialized by single date" do
|
11
|
+
let(:period) { described_class.for(Date.new(2015,6,25)) }
|
17
12
|
end
|
18
13
|
|
19
14
|
describe "#next" do
|
@@ -40,4 +35,24 @@ describe Year do
|
|
40
35
|
]
|
41
36
|
end
|
42
37
|
end
|
38
|
+
|
39
|
+
describe "#quarters" do
|
40
|
+
it "returns quarters of year" do
|
41
|
+
expect(described_class.for('01.01.2015').quarters).
|
42
|
+
to eq [ Quarter.for('01.01.2015'), Quarter.for('01.04.2015'),
|
43
|
+
Quarter.for('01.07.2015'), Quarter.for('01.10.2015')]
|
44
|
+
expect(described_class.for('01.06.2015').quarters).
|
45
|
+
to eq [ Quarter.for('01.06.2015'), Quarter.for('01.09.2015'),
|
46
|
+
Quarter.for('01.12.2015'), Quarter.for('01.03.2016')]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#halfyears" do
|
51
|
+
it "returns halfyears of year" do
|
52
|
+
expect(described_class.for('01.01.2015').halfyears).
|
53
|
+
to eq [ Halfyear.for('01.01.2015'), Halfyear.for('01.07.2015')]
|
54
|
+
expect(described_class.for('01.06.2015').halfyears).
|
55
|
+
to eq [ Halfyear.for('01.06.2015'), Halfyear.for('01.12.2015')]
|
56
|
+
end
|
57
|
+
end
|
43
58
|
end
|
@@ -1,19 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'periods/constants'
|
3
|
+
require 'initialized_by_single_date'
|
3
4
|
|
4
5
|
describe YearlyPeriod do
|
5
6
|
|
6
7
|
let(:subject) { described_class.for("1.1.2015") }
|
7
8
|
|
8
9
|
it_behaves_like "Lint Check"
|
9
|
-
|
10
|
-
|
11
|
-
it "returns year of given date included" do
|
12
|
-
period = described_class.for('25.06.2015')
|
13
|
-
|
14
|
-
expect(period.start_date).to eq Date('25.06.2015')
|
15
|
-
expect(period.end_date).to eq Date('24.06.2016')
|
16
|
-
end
|
10
|
+
it_behaves_like "Initialized by single date" do
|
11
|
+
let(:period) { described_class.for(Date.new(2015,6,25)) }
|
17
12
|
end
|
18
13
|
|
19
14
|
describe "#next" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: periods
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Baustert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -79,13 +79,16 @@ files:
|
|
79
79
|
- lib/periods/modules/halfyearly_period.rb
|
80
80
|
- lib/periods/modules/month.rb
|
81
81
|
- lib/periods/modules/monthly_period.rb
|
82
|
+
- lib/periods/modules/null_period.rb
|
82
83
|
- lib/periods/modules/period.rb
|
83
84
|
- lib/periods/modules/quarter.rb
|
84
85
|
- lib/periods/modules/quarterly_period.rb
|
86
|
+
- lib/periods/modules/single_date_initialize.rb
|
85
87
|
- lib/periods/modules/year.rb
|
86
88
|
- lib/periods/modules/yearly_period.rb
|
87
89
|
- lib/periods/month.rb
|
88
90
|
- lib/periods/monthly_period.rb
|
91
|
+
- lib/periods/null_period.rb
|
89
92
|
- lib/periods/period.rb
|
90
93
|
- lib/periods/quarter.rb
|
91
94
|
- lib/periods/quarterly_period.rb
|
@@ -93,11 +96,13 @@ files:
|
|
93
96
|
- lib/periods/year.rb
|
94
97
|
- lib/periods/yearly_period.rb
|
95
98
|
- periods.gemspec
|
99
|
+
- spec/initialized_by_single_date.rb
|
96
100
|
- spec/lib/halfyear_spec.rb
|
97
101
|
- spec/lib/halfyearly_period_spec.rb
|
98
102
|
- spec/lib/january_spec.rb
|
99
103
|
- spec/lib/month_spec.rb
|
100
104
|
- spec/lib/monthly_period_spec.rb
|
105
|
+
- spec/lib/null_period_spec.rb
|
101
106
|
- spec/lib/own_class_spec.rb
|
102
107
|
- spec/lib/period_spec.rb
|
103
108
|
- spec/lib/periods/date_calculator_spec.rb
|
@@ -132,11 +137,13 @@ signing_key:
|
|
132
137
|
specification_version: 4
|
133
138
|
summary: Simple period types like Week, Month, Quarter, Halfyear, Year.
|
134
139
|
test_files:
|
140
|
+
- spec/initialized_by_single_date.rb
|
135
141
|
- spec/lib/halfyear_spec.rb
|
136
142
|
- spec/lib/halfyearly_period_spec.rb
|
137
143
|
- spec/lib/january_spec.rb
|
138
144
|
- spec/lib/month_spec.rb
|
139
145
|
- spec/lib/monthly_period_spec.rb
|
146
|
+
- spec/lib/null_period_spec.rb
|
140
147
|
- spec/lib/own_class_spec.rb
|
141
148
|
- spec/lib/period_spec.rb
|
142
149
|
- spec/lib/periods/date_calculator_spec.rb
|