spok 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/CONTRIBUTING.md +44 -1
- data/README.md +73 -3
- data/lib/spok.rb +30 -18
- data/lib/spok/config/canada.yml +246 -0
- data/lib/spok/config/costa_rica.yml +257 -0
- data/lib/spok/config/indonesia.yml +131 -0
- data/lib/spok/config/mexico.yml +200 -0
- data/lib/spok/config/netherlands.yml +862 -0
- data/lib/spok/config/poland.yml +392 -0
- data/lib/spok/config/portugal.yml +1200 -0
- data/lib/spok/config/spain.yml +948 -0
- data/lib/spok/config/vietnam.yml +626 -0
- data/lib/spok/version.rb +1 -1
- data/lib/spok/workday.rb +31 -7
- data/pkg/spok-1.0.0.gem +0 -0
- data/spec/lib/spok/calendars_spec.rb +14 -0
- data/spec/lib/spok/workday_spec.rb +27 -0
- data/spec/lib/spok_spec.rb +10 -0
- metadata +13 -2
data/lib/spok/version.rb
CHANGED
data/lib/spok/workday.rb
CHANGED
@@ -9,7 +9,20 @@ class Spok
|
|
9
9
|
# module.
|
10
10
|
module Workday
|
11
11
|
# Public: Array of available calendars.
|
12
|
-
|
12
|
+
|
13
|
+
CALENDARS = %i(
|
14
|
+
brasil
|
15
|
+
bovespa
|
16
|
+
canada
|
17
|
+
costa_rica
|
18
|
+
indonesia
|
19
|
+
mexico
|
20
|
+
netherlands
|
21
|
+
poland
|
22
|
+
portugal
|
23
|
+
spain
|
24
|
+
vietnam
|
25
|
+
)
|
13
26
|
|
14
27
|
# Public: Hash containing all holidays for each available calendar.
|
15
28
|
HOLIDAYS = CALENDARS.map do |calendar|
|
@@ -18,6 +31,17 @@ class Spok
|
|
18
31
|
[calendar, Set.new(holidays[calendar.to_s])]
|
19
32
|
end.to_h
|
20
33
|
|
34
|
+
# Public: Hash containing all weekdays.
|
35
|
+
WEEKDAYS = {
|
36
|
+
sunday: 0,
|
37
|
+
monday: 1,
|
38
|
+
tuesday: 2,
|
39
|
+
wednesday: 3,
|
40
|
+
thrusday: 4,
|
41
|
+
friday: 5,
|
42
|
+
saturday: 6
|
43
|
+
}.freeze
|
44
|
+
|
21
45
|
# Public: Checks if a given day is a restday.
|
22
46
|
#
|
23
47
|
# date - The Date to be checked.
|
@@ -30,7 +54,7 @@ class Spok
|
|
30
54
|
# # => false
|
31
55
|
#
|
32
56
|
# Returns a boolean.
|
33
|
-
def self.restday?(date, calendar:
|
57
|
+
def self.restday?(date, calendar: Spok.default_calendar)
|
34
58
|
self.weekend?(date) || self.holiday?(date, calendar: calendar)
|
35
59
|
end
|
36
60
|
|
@@ -46,7 +70,7 @@ class Spok
|
|
46
70
|
# # => true
|
47
71
|
#
|
48
72
|
# Returns a boolean.
|
49
|
-
def self.workday?(date, calendar:
|
73
|
+
def self.workday?(date, calendar: Spok.default_calendar)
|
50
74
|
!restday?(date, calendar: calendar)
|
51
75
|
end
|
52
76
|
|
@@ -63,7 +87,7 @@ class Spok
|
|
63
87
|
def self.weekend?(date)
|
64
88
|
weekday = date.wday
|
65
89
|
|
66
|
-
|
90
|
+
[WEEKDAYS[:saturday], WEEKDAYS[:sunday]].include? weekday
|
67
91
|
end
|
68
92
|
|
69
93
|
# Public: Checks if a given Date is on a holiday.
|
@@ -78,7 +102,7 @@ class Spok
|
|
78
102
|
# # => true
|
79
103
|
#
|
80
104
|
# Returns a boolean.
|
81
|
-
def self.holiday?(date, calendar:
|
105
|
+
def self.holiday?(date, calendar: Spok.default_calendar)
|
82
106
|
HOLIDAYS[calendar].include?(date.to_date)
|
83
107
|
end
|
84
108
|
|
@@ -92,7 +116,7 @@ class Spok
|
|
92
116
|
# Examples
|
93
117
|
# Spok::Workday.last_workday(Date.new(2012, 10, 21))
|
94
118
|
# # => #<Date: 2012-10-19 ((2456220j,0s,0n),+0s,2299161j)>
|
95
|
-
def self.last_workday(date, calendar:
|
119
|
+
def self.last_workday(date, calendar: Spok.default_calendar)
|
96
120
|
return date if workday?(date, calendar: calendar)
|
97
121
|
|
98
122
|
last_workday((date - 1.day), calendar: calendar)
|
@@ -108,7 +132,7 @@ class Spok
|
|
108
132
|
# Examples
|
109
133
|
# Spok::Workday.next_workday(Date.new(2012, 10, 21))
|
110
134
|
# # => #<Date: 2012-10-19 ((2456220j,0s,0n),+0s,2299161j)>
|
111
|
-
def self.next_workday(date, calendar:
|
135
|
+
def self.next_workday(date, calendar: Spok.default_calendar)
|
112
136
|
return date if workday?(date, calendar: calendar)
|
113
137
|
|
114
138
|
next_workday((date + 1.day), calendar: calendar)
|
data/pkg/spok-1.0.0.gem
CHANGED
Binary file
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'spok/workday'
|
3
|
+
|
4
|
+
describe 'Spok Calendars' do
|
5
|
+
Spok::Workday::CALENDARS.each do |calendar|
|
6
|
+
it "has valid dates for #{calendar}" do
|
7
|
+
file = File.new(File.join(File.dirname(__FILE__), "../../../lib/spok/config/#{calendar}.yml"))
|
8
|
+
last_day = Date.strptime(file.readlines[-1], '- %Y-%m-%d')
|
9
|
+
valid_calendar = last_day - 365 > Date.today
|
10
|
+
|
11
|
+
expect(valid_calendar).to eq(true)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -38,6 +38,33 @@ describe Spok::Workday do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
context 'days using spanish calendar' do
|
42
|
+
it 'is not a workday' do
|
43
|
+
['2009-01-06', '2009-04-10', '2009-04-12'].each do |holiday|
|
44
|
+
expect(described_class.workday?(Date.parse(holiday), calendar: :spain)).to eq(false)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'is a workday' do
|
49
|
+
['2009-01-07', '2019-01-14', '2020-04-22'].each do |workday|
|
50
|
+
expect(described_class.workday?(Date.parse(workday), calendar: :spain)).to eq(true)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'days using dutch calendar' do
|
56
|
+
it 'is not a workday' do
|
57
|
+
['2019-06-10', '2019-12-25', '2019-12-26'].each do |holiday|
|
58
|
+
expect(described_class.workday?(Date.parse(holiday), calendar: :netherlands)).to eq(false)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'is a workday' do
|
63
|
+
['2010-06-10', '2009-09-11', '2019-12-02'].each do |workday|
|
64
|
+
expect(described_class.workday?(Date.parse(workday), calendar: :netherlands)).to eq(true)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
41
68
|
end
|
42
69
|
|
43
70
|
describe '#restday?' do
|
data/spec/lib/spok_spec.rb
CHANGED
@@ -206,4 +206,14 @@ describe Spok do
|
|
206
206
|
subject { Spok.new(sunday, tuesday).to_range }
|
207
207
|
it { is_expected.to eq((sunday..tuesday)) }
|
208
208
|
end
|
209
|
+
|
210
|
+
describe '#default_calendar' do
|
211
|
+
it 'changes default_calendar' do
|
212
|
+
default_calendar_was = Spok.default_calendar
|
213
|
+
spok = double("spok", :default_calendar => :bovespa)
|
214
|
+
|
215
|
+
expect(default_calendar_was).not_to eq(spok.default_calendar)
|
216
|
+
expect(default_calendar_was).to eq(:brasil)
|
217
|
+
end
|
218
|
+
end
|
209
219
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spok
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Magnetis Staff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -84,9 +84,19 @@ files:
|
|
84
84
|
- lib/spok.rb
|
85
85
|
- lib/spok/config/bovespa.yml
|
86
86
|
- lib/spok/config/brasil.yml
|
87
|
+
- lib/spok/config/canada.yml
|
88
|
+
- lib/spok/config/costa_rica.yml
|
89
|
+
- lib/spok/config/indonesia.yml
|
90
|
+
- lib/spok/config/mexico.yml
|
91
|
+
- lib/spok/config/netherlands.yml
|
92
|
+
- lib/spok/config/poland.yml
|
93
|
+
- lib/spok/config/portugal.yml
|
94
|
+
- lib/spok/config/spain.yml
|
95
|
+
- lib/spok/config/vietnam.yml
|
87
96
|
- lib/spok/version.rb
|
88
97
|
- lib/spok/workday.rb
|
89
98
|
- pkg/spok-1.0.0.gem
|
99
|
+
- spec/lib/spok/calendars_spec.rb
|
90
100
|
- spec/lib/spok/workday_spec.rb
|
91
101
|
- spec/lib/spok_spec.rb
|
92
102
|
- spec/spec_helper.rb
|
@@ -116,6 +126,7 @@ signing_key:
|
|
116
126
|
specification_version: 4
|
117
127
|
summary: A gem to work with periods of dates
|
118
128
|
test_files:
|
129
|
+
- spec/lib/spok/calendars_spec.rb
|
119
130
|
- spec/lib/spok/workday_spec.rb
|
120
131
|
- spec/lib/spok_spec.rb
|
121
132
|
- spec/spec_helper.rb
|