dateoperations 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +22 -0
- data/Rakefile +13 -0
- data/lib/dateoperations.rb +40 -0
- data/test/dateoperations_test.rb +46 -0
- data/test/test_helper.rb +8 -0
- metadata +48 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3f19df6a25abae9ad889b538a8433e6d9042e11e
|
4
|
+
data.tar.gz: 840efdbbcf12b5890d2784614c6d0d36c6db6d91
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f60650e26a01faf2548077cd813bfb403d1b6de0d833e16d7c8a6844eb72e896192699ed98cf70ae994d523eb6d4ee12d8e640b5aeeca8b1eb3bfce219770bd9
|
7
|
+
data.tar.gz: 78f138ee77cdffb4a455c46999782cf042629b38a113e1111aec1919ddb2dfbb4fc88ba37c79e9d4861be63498650292e2213f12c3195dd4f33cdca230201738
|
data/README.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# DateOperations
|
2
|
+
Different date operations, primarily around business days; based on the [Holidays Gem](https://github.com/holidays/holidays).
|
3
|
+
|
4
|
+
## Synopsis
|
5
|
+
DateOperations.[...]
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
Download the gem, then install it:
|
9
|
+
|
10
|
+
gem install dateoperations.gemspec
|
11
|
+
|
12
|
+
## Examples
|
13
|
+
require 'dateoperations'
|
14
|
+
...
|
15
|
+
DateOperations.country #=> :de
|
16
|
+
DateOperations.holiday?(Date.new(2016, 10, 3)) #=> true
|
17
|
+
DateOperations.country = :us #=> :us
|
18
|
+
DateOperations.holiday?(Date.new(2016, 10, 3)) # => false
|
19
|
+
DateOperations.country = :de #=> :de
|
20
|
+
DateOperations.number_of_business_days_between(Date.new(2016, 10, 1), Date.new(2016, 10, -1)) #=> 20
|
21
|
+
DateOperations.country = :au #=> :au
|
22
|
+
DateOperations.number_of_business_days_between(Date.new(2016, 10, 1), Date.new(2016, 10, -1)) #=> 21
|
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'date'
|
2
|
+
require 'holidays'
|
3
|
+
|
4
|
+
# Class: DateOperations -- Different date operations, primarily around business days
|
5
|
+
class DateOperations
|
6
|
+
@country = :de
|
7
|
+
|
8
|
+
class << self
|
9
|
+
attr_accessor :country
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.week_days_between(start_date, end_date)
|
13
|
+
week_day_nbrs = (1..5)
|
14
|
+
(start_date..end_date).select { |w| week_day_nbrs.include?(w.wday) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.number_of_week_days_between(start_date, end_date)
|
18
|
+
week_days = week_days_between(start_date, end_date)
|
19
|
+
week_days.length
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.business_days_between(start_date, end_date)
|
23
|
+
week_days = week_days_between(start_date, end_date)
|
24
|
+
week_days.reject { |b| holiday?(b) }
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.number_of_business_days_between(start_date, end_date)
|
28
|
+
business_days = business_days_between(start_date, end_date)
|
29
|
+
business_days.length
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.weekend?(date)
|
33
|
+
date.saturday? || date.sunday?
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.holiday?(date)
|
37
|
+
return false if Holidays.on(date, DateOperations.country, :informal).empty?
|
38
|
+
true
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative 'test_helper'
|
4
|
+
|
5
|
+
# Test class for Minitest Unit Tests for class DateOperations
|
6
|
+
class DateOperationsTest < Minitest::Test
|
7
|
+
def test_december_2016_has_22_week_days
|
8
|
+
d1 = Date.new(2016, 12, 1)
|
9
|
+
d2 = Date.new(2016, 12, -1)
|
10
|
+
assert_equal 22, DateOperations.number_of_week_days_between(d1, d2)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_december_2016_has_21_business_days
|
14
|
+
d1 = Date.new(2016, 12, 1)
|
15
|
+
d2 = Date.new(2016, 12, -1)
|
16
|
+
assert_equal 21, DateOperations.number_of_business_days_between(d1, d2)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_24th_of_december_2016_is_a_holiday
|
20
|
+
assert DateOperations.holiday?(Date.new(2016, 12, 24))
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_23th_of_december_2016_is_not_a_holiday
|
24
|
+
assert !DateOperations.holiday?(Date.new(2016, 12, 23))
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_11th_of_june_2016_is_weekend
|
28
|
+
assert DateOperations.weekend?(Date.new(2016, 6, 11))
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_10th_of_june_2016_is_not_weekend
|
32
|
+
assert !DateOperations.weekend?(Date.new(2016, 6, 10))
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_june_2016_has_22_week_days
|
36
|
+
d1 = Date.new(2016, 6, 1)
|
37
|
+
d2 = Date.new(2016, 6, 30)
|
38
|
+
assert_equal 22, DateOperations.number_of_week_days_between(d1, d2)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_startdate_greater_enddate_returns_0_week_days
|
42
|
+
d1 = Date.new(2016, 6, 1)
|
43
|
+
d2 = Date.new(2016, 6, 30)
|
44
|
+
assert_equal 0, DateOperations.number_of_week_days_between(d2, d1)
|
45
|
+
end
|
46
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dateoperations
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael Schwarze
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-16 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Different date operations, primarily around business days.
|
14
|
+
email: michael@schwarze-web.de
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- README.md
|
20
|
+
- Rakefile
|
21
|
+
- lib/dateoperations.rb
|
22
|
+
- test/dateoperations_test.rb
|
23
|
+
- test/test_helper.rb
|
24
|
+
homepage: http://rubygems.org/gems/dateoperations
|
25
|
+
licenses:
|
26
|
+
- MIT
|
27
|
+
metadata: {}
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 2.5.1
|
45
|
+
signing_key:
|
46
|
+
specification_version: 4
|
47
|
+
summary: Date Operations
|
48
|
+
test_files: []
|