spok 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  class Spok
2
- VERSION = '1.1.0'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -1,36 +1,11 @@
1
1
  require 'active_support'
2
2
  require 'active_support/core_ext'
3
- require 'set'
4
- require 'yaml'
5
3
 
6
4
  class Spok
7
5
  # Public: Various methods useful for checking for restdays and workdays.
8
6
  # All methods are module methods and should be called on the Spok::Workday
9
7
  # module.
10
8
  module Workday
11
- # Public: Array of available calendars.
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
- )
26
-
27
- # Public: Hash containing all holidays for each available calendar.
28
- HOLIDAYS = CALENDARS.map do |calendar|
29
- holidays_file = File.open(File.join(File.dirname(__FILE__), "config/#{calendar}.yml"))
30
- holidays = YAML.safe_load(holidays_file.read, [Date])
31
- [calendar, Set.new(holidays[calendar.to_s])]
32
- end.to_h
33
-
34
9
  # Public: Hash containing all weekdays.
35
10
  WEEKDAYS = {
36
11
  sunday: 0,
@@ -46,7 +21,7 @@ class Spok
46
21
  #
47
22
  # date - The Date to be checked.
48
23
  # calendar - Symbol informing in which calendar the date will be checked
49
- # (default: :brasil).
24
+ # (default: :brazil).
50
25
  #
51
26
  # Examples
52
27
  #
@@ -62,7 +37,7 @@ class Spok
62
37
  #
63
38
  # date - The Date to be checked.
64
39
  # calendar - Symbol informing in which calendar the date will be checked
65
- # (default: :brasil).
40
+ # (default: :brazil).
66
41
  #
67
42
  # Examples
68
43
  #
@@ -94,7 +69,7 @@ class Spok
94
69
  #
95
70
  # date - The Date to be checked.
96
71
  # calendar - Symbol informing in which calendar the date will be checked
97
- # (default: :brasil).
72
+ # (default: :brazil).
98
73
  #
99
74
  # Examples
100
75
  #
@@ -103,7 +78,8 @@ class Spok
103
78
  #
104
79
  # Returns a boolean.
105
80
  def self.holiday?(date, calendar: Spok.default_calendar)
106
- HOLIDAYS[calendar].include?(date.to_date)
81
+ dates = Spok::Calendars.get(calendar)
82
+ dates.include?(date.to_date)
107
83
  end
108
84
 
109
85
  # Public: Returns the last workday until the informed date.
@@ -111,7 +87,7 @@ class Spok
111
87
  #
112
88
  # date - End Date to check for workdays.
113
89
  # calendar - Symbol informing in which calendar to check for workdays
114
- # (default: :brasil).
90
+ # (default: :brazil).
115
91
  #
116
92
  # Examples
117
93
  # Spok::Workday.last_workday(Date.new(2012, 10, 21))
@@ -127,7 +103,7 @@ class Spok
127
103
  #
128
104
  # date - Start Date to check for workdays.
129
105
  # calendar - Symbol informing in which calendar to check for workdays
130
- # (default: :brasil).
106
+ # (default: :brazil).
131
107
  #
132
108
  # Examples
133
109
  # Spok::Workday.next_workday(Date.new(2012, 10, 21))
Binary file
@@ -0,0 +1,3 @@
1
+ ---
2
+ custom_calendar:
3
+ - 2019-01-25
@@ -1,14 +1,11 @@
1
1
  require 'spec_helper'
2
- require 'spok/workday'
2
+ require 'spok'
3
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
4
+ describe Spok::Calendars do
5
+ it 'loads a new calendar' do
6
+ Spok::Calendars.add(:custom_calendar, File.expand_path('../../fixtures/custom-calendar.yml', __dir__))
10
7
 
11
- expect(valid_calendar).to eq(true)
12
- end
8
+ expect(Spok::Workday.restday?(Date.new(2019, 01, 25), calendar: :custom_calendar)).to eq(true)
9
+ expect(Spok::Workday.workday?(Date.new(2019, 01, 25), calendar: :custom_calendar)).to eq(false)
13
10
  end
14
11
  end
@@ -21,7 +21,7 @@ describe Spok::Workday do
21
21
  end
22
22
  end
23
23
 
24
- context 'holidays using brasil calendar' do
24
+ context 'holidays using brazil calendar' do
25
25
  it 'is not a workday' do
26
26
  ['2012-06-07', '2012-09-07', '2012-10-12',
27
27
  '2012-11-02', '2012-11-15', '2012-12-25'].each do |holiday|
@@ -65,6 +65,20 @@ describe Spok::Workday do
65
65
  end
66
66
  end
67
67
  end
68
+
69
+ context 'holidays using guatemala calendar' do
70
+ it 'is not a workday' do
71
+ ['2018-01-01', '2018-06-30', '2018-09-15', '2018-10-20'].each do |holiday|
72
+ expect(described_class.workday?(Date.parse(holiday), calendar: :guatemala)).to eq(false)
73
+ end
74
+ end
75
+
76
+ it 'is a workday' do
77
+ ['2018-01-22', '2018-07-27', '2018-12-20'].each do |holiday|
78
+ expect(described_class.workday?(Date.parse(holiday), calendar: :guatemala)).to eq(true)
79
+ end
80
+ end
81
+ end
68
82
  end
69
83
 
70
84
  describe '#restday?' do
@@ -158,12 +172,12 @@ describe Spok::Workday do
158
172
 
159
173
  describe '#holiday?' do
160
174
  it 'returns false when date is not a holiday on the given calendar' do
161
- expect(described_class.holiday?(Date.new(2018, 05, 02), calendar: :brasil)).to eq(false)
175
+ expect(described_class.holiday?(Date.new(2018, 05, 02), calendar: :brazil)).to eq(false)
162
176
  expect(described_class.holiday?(Date.new(2018, 12, 15), calendar: :bovespa)).to eq(false)
163
177
  end
164
178
 
165
179
  it 'returns true when date is a holiday on the given calendar' do
166
- expect(described_class.holiday?(Date.new(2018, 05, 01), calendar: :brasil)).to eq(true)
180
+ expect(described_class.holiday?(Date.new(2018, 05, 01), calendar: :brazil)).to eq(true)
167
181
  expect(described_class.holiday?(Date.new(2018, 12, 25), calendar: :bovespa)).to eq(true)
168
182
  end
169
183
  end
@@ -110,12 +110,12 @@ describe Spok do
110
110
  end
111
111
  end
112
112
 
113
- context 'when brasil is the calendar' do
114
- subject { described_class.new(sunday, tuesday).to_calendar(:brasil) }
113
+ context 'when brazil is the calendar' do
114
+ subject { described_class.new(sunday, tuesday).to_calendar(:brazil) }
115
115
 
116
116
  context 'and the start date is holiday' do
117
117
  let(:start_date) { Date.new(2013, 9, 6) }
118
- let(:sunday) { Date.new(2013, 9, 7) } # brasil holiday
118
+ let(:sunday) { Date.new(2013, 9, 7) } # brazil holiday
119
119
  let(:tuesday) { Date.new(2013, 9, 10) }
120
120
  it 'returns the last workday as the start date' do
121
121
  expect(subject.start_date).to eq(start_date)
@@ -124,7 +124,7 @@ describe Spok do
124
124
 
125
125
  context 'end date on a bovespa holiday' do
126
126
  let(:sunday) { Date.new(2013, 9, 5) }
127
- let(:tuesday) { Date.new(2013, 9, 7) } # brasil holiday
127
+ let(:tuesday) { Date.new(2013, 9, 7) } # brazil holiday
128
128
  let(:end_date) { Date.new(2013, 9, 6) }
129
129
  it 'returns the last bovespa workday as the end date' do
130
130
  expect(subject.end_date).to eq(end_date)
@@ -213,7 +213,7 @@ describe Spok do
213
213
  spok = double("spok", :default_calendar => :bovespa)
214
214
 
215
215
  expect(default_calendar_was).not_to eq(spok.default_calendar)
216
- expect(default_calendar_was).to eq(:brasil)
216
+ expect(default_calendar_was).to eq(:brazil)
217
217
  end
218
218
  end
219
219
  end
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_dependency 'activesupport', '~> 5.1'
25
25
 
26
- spec.add_development_dependency 'bundler', '~> 1.6'
26
+ spec.add_development_dependency 'bundler'
27
27
  spec.add_development_dependency 'rake'
28
28
  spec.add_development_dependency 'rspec', '~> 3'
29
29
  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.1.0
4
+ version: 2.0.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-10-02 00:00:00.000000000 Z
11
+ date: 2019-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.6'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.6'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -78,24 +78,40 @@ files:
78
78
  - CODE_OF_CONDUCT.md
79
79
  - CONTRIBUTING.md
80
80
  - Gemfile
81
+ - Gemfile.lock
81
82
  - LICENSE.txt
82
83
  - README.md
83
84
  - Rakefile
84
85
  - lib/spok.rb
86
+ - lib/spok/calendars.rb
87
+ - lib/spok/config/australia.yml
88
+ - lib/spok/config/austria.yml
89
+ - lib/spok/config/belgium.yml
85
90
  - lib/spok/config/bovespa.yml
86
- - lib/spok/config/brasil.yml
91
+ - lib/spok/config/brazil.yml
87
92
  - lib/spok/config/canada.yml
93
+ - lib/spok/config/colombia.yml
88
94
  - lib/spok/config/costa_rica.yml
95
+ - lib/spok/config/france.yml
96
+ - lib/spok/config/germany.yml
97
+ - lib/spok/config/guatemala.yml
98
+ - lib/spok/config/india.yml
89
99
  - lib/spok/config/indonesia.yml
100
+ - lib/spok/config/liechtenstein.yml
90
101
  - lib/spok/config/mexico.yml
91
102
  - lib/spok/config/netherlands.yml
92
103
  - lib/spok/config/poland.yml
93
104
  - lib/spok/config/portugal.yml
105
+ - lib/spok/config/singapore.yml
94
106
  - lib/spok/config/spain.yml
107
+ - lib/spok/config/switzerland.yml
108
+ - lib/spok/config/ukraine.yml
109
+ - lib/spok/config/united_states.yml
95
110
  - lib/spok/config/vietnam.yml
96
111
  - lib/spok/version.rb
97
112
  - lib/spok/workday.rb
98
- - pkg/spok-1.0.0.gem
113
+ - pkg/spok-2.0.0.gem
114
+ - spec/fixtures/custom-calendar.yml
99
115
  - spec/lib/spok/calendars_spec.rb
100
116
  - spec/lib/spok/workday_spec.rb
101
117
  - spec/lib/spok_spec.rb
@@ -120,12 +136,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
136
  - !ruby/object:Gem::Version
121
137
  version: '0'
122
138
  requirements: []
123
- rubyforge_project:
124
- rubygems_version: 2.7.3
139
+ rubygems_version: 3.0.4
125
140
  signing_key:
126
141
  specification_version: 4
127
142
  summary: A gem to work with periods of dates
128
143
  test_files:
144
+ - spec/fixtures/custom-calendar.yml
129
145
  - spec/lib/spok/calendars_spec.rb
130
146
  - spec/lib/spok/workday_spec.rb
131
147
  - spec/lib/spok_spec.rb
Binary file