dateoperations 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f19df6a25abae9ad889b538a8433e6d9042e11e
4
- data.tar.gz: 840efdbbcf12b5890d2784614c6d0d36c6db6d91
3
+ metadata.gz: cfd90d8293a749a6fd266508ca029f366a0b08e0
4
+ data.tar.gz: 74dcfa904f08b166e10dd3c1d294d83b6082ba2e
5
5
  SHA512:
6
- metadata.gz: f60650e26a01faf2548077cd813bfb403d1b6de0d833e16d7c8a6844eb72e896192699ed98cf70ae994d523eb6d4ee12d8e640b5aeeca8b1eb3bfce219770bd9
7
- data.tar.gz: 78f138ee77cdffb4a455c46999782cf042629b38a113e1111aec1919ddb2dfbb4fc88ba37c79e9d4861be63498650292e2213f12c3195dd4f33cdca230201738
6
+ metadata.gz: f9cb3fc95767df4055e7c7c942e3fb334bd171a5810f694d511a7006c4e6c5b487d8e15d6b78f596726ef6659db0ac273a4bc36c896b7107ad9c566e8188f6d9
7
+ data.tar.gz: 4eb2a8cb59bba7d0906fe79e36f02091e0b712ab03189b2cfa88ffd9bf4cb89bd4dffea27180f3be622835736cec5916eb071d2cfd87e42e77315a1bbd1b2314
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2016 Michael Schwarze
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -13,10 +13,19 @@ Download the gem, then install it:
13
13
  require 'dateoperations'
14
14
  ...
15
15
  DateOperations.country #=> :de
16
+
16
17
  DateOperations.holiday?(Date.new(2016, 10, 3)) #=> true
18
+
17
19
  DateOperations.country = :us #=> :us
18
20
  DateOperations.holiday?(Date.new(2016, 10, 3)) # => false
21
+
19
22
  DateOperations.country = :de #=> :de
20
23
  DateOperations.number_of_business_days_between(Date.new(2016, 10, 1), Date.new(2016, 10, -1)) #=> 20
24
+
21
25
  DateOperations.country = :au #=> :au
22
26
  DateOperations.number_of_business_days_between(Date.new(2016, 10, 1), Date.new(2016, 10, -1)) #=> 21
27
+
28
+ DateOperations.weekend?(DateOperations.weekend?(Date.new(2016, 6, 18)) #=> true
29
+
30
+ ## Documentation
31
+ [Documentation](http://dateoperations.schwarze-web.de/DateOperations.html)
@@ -1,38 +1,57 @@
1
1
  require 'date'
2
2
  require 'holidays'
3
3
 
4
- # Class: DateOperations -- Different date operations, primarily around business days
4
+ ##
5
+ # Different date operations, primarily around business days, based on the Holidays[https://github.com/holidays/holidays] Gem.
6
+ # - Home[]https://github.com/msc01/dateoperations
7
+ # - Documentation[http://dateoperations.schwarze-web.de/DateOperations.html]
5
8
  class DateOperations
6
9
  @country = :de
7
10
 
8
11
  class << self
12
+ # Switches to the calendar of the respective country:
13
+ # - :de = Germany
14
+ # - :us = USA
15
+ # - ...
9
16
  attr_accessor :country
10
17
  end
11
18
 
19
+ # Returns an array with dates for the "week days" (= Monday to Friday) between a given start and end date.
12
20
  def self.week_days_between(start_date, end_date)
13
21
  week_day_nbrs = (1..5)
14
22
  (start_date..end_date).select { |w| week_day_nbrs.include?(w.wday) }
15
23
  end
16
24
 
25
+ # returns the number of "week days" (= Monday to Friday) between a given start and end date.
17
26
  def self.number_of_week_days_between(start_date, end_date)
18
27
  week_days = week_days_between(start_date, end_date)
19
28
  week_days.length
20
29
  end
21
30
 
31
+ # Returns an array with dates
32
+ # for the "business days" = "week days" (= Monday to Friday)
33
+ # without <tt>holidays</tt>
34
+ # between a given start and end date.
22
35
  def self.business_days_between(start_date, end_date)
23
36
  week_days = week_days_between(start_date, end_date)
24
37
  week_days.reject { |b| holiday?(b) }
25
38
  end
26
39
 
40
+ # Returns the number of "business days"
41
+ # = "week days" (= Monday to Friday)
42
+ # without <tt>holidays</tt>
43
+ # between a given start and end date.
27
44
  def self.number_of_business_days_between(start_date, end_date)
28
45
  business_days = business_days_between(start_date, end_date)
29
46
  business_days.length
30
47
  end
31
48
 
49
+ # Checks whether a given date is a weekend (Saturday, Sunday).
32
50
  def self.weekend?(date)
33
51
  date.saturday? || date.sunday?
34
52
  end
35
53
 
54
+ # Checks whether a given date is a holiday based on the calendar for the respective <tt>country</tt>.
36
55
  def self.holiday?(date)
37
56
  return false if Holidays.on(date, DateOperations.country, :informal).empty?
38
57
  true
metadata CHANGED
@@ -1,27 +1,40 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dateoperations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Schwarze
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-16 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Different date operations, primarily around business days.
11
+ date: 2016-06-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: holidays
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 4.3.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 4.3.0
27
+ description: Simple date operations to determine weekends, holidays, and esp. business
28
+ days. Based on the Holidays Gem.
14
29
  email: michael@schwarze-web.de
15
30
  executables: []
16
31
  extensions: []
17
32
  extra_rdoc_files: []
18
33
  files:
34
+ - LICENSE.txt
19
35
  - README.md
20
- - Rakefile
21
36
  - lib/dateoperations.rb
22
- - test/dateoperations_test.rb
23
- - test/test_helper.rb
24
- homepage: http://rubygems.org/gems/dateoperations
37
+ homepage: https://github.com/msc01/dateoperations
25
38
  licenses:
26
39
  - MIT
27
40
  metadata: {}
data/Rakefile DELETED
@@ -1,13 +0,0 @@
1
- require 'rake/testtask'
2
- require 'rubocop/rake_task'
3
-
4
- Rake::TestTask.new do |t|
5
- t.pattern = 'test/*_test.rb'
6
- end
7
-
8
- RuboCop::RakeTask.new
9
-
10
- desc 'test'
11
-
12
- task default: :test
13
- task default: :rubocop
@@ -1,46 +0,0 @@
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 DELETED
@@ -1,8 +0,0 @@
1
- require 'simplecov'
2
- SimpleCov.start do
3
- add_filter '/test/'
4
- end
5
-
6
- require 'minitest/autorun'
7
-
8
- require_relative '../lib/dateoperations'