business-days 1.0.1 → 3.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +5 -5
  2. data/lib/business-days.rb +27 -11
  3. metadata +11 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 97396fdf08a72c4fa9a96cf86f22db60c6227e33
4
- data.tar.gz: a248e695049fa8ada91e377761fedab47f99ffb5
2
+ SHA256:
3
+ metadata.gz: 1d65a0be7582b342cb6bd352d97d5bdfa2c381b28a8d965bc2c8a7310e327a5d
4
+ data.tar.gz: 6c4895bf46e75de6658bfe874b5642702961ef957d24672985ad75c2059ca149
5
5
  SHA512:
6
- metadata.gz: 7b5abfefe93901caa1f17a3a285a7245b9307581965df21d70d5388a91d835b1ef96abfaa18c7d8db57fd7577681e7cb6f80e6e498cfaa87ea83cc63add5d1da
7
- data.tar.gz: e7d89dc1b78dd073d499f3186721b13b75463c94ec2793babba9f0b5b532078698e81f85ef5bb951c32d475b26644fc02db9764ef5948b8039a88f24bc0ea87c
6
+ metadata.gz: f59925ea7d0bcfe194e385a2648acbf69f77719d90ec5cac59c9bb9934eabe47044fa7c004189a382837c2afa4f7a2195e41566ba6a798f853aefc5d1b2b3735
7
+ data.tar.gz: f7e2f7f5b34f709c1a742853feae4cac45d82083fc359d62b3b1de972640c3dcfff77cff4375865b6bd0127f9bf14fba0e71500e72ffb9458bf6ac8d895585b1
@@ -25,7 +25,7 @@ class BusinessDaysSingleton
25
25
 
26
26
  # 3. Add the latest business day in each year (it's a bank holiday)
27
27
  (from..to).each do |year|
28
- @holidays.push(latest_non_bank_businness_day(year))
28
+ @holidays.push(latest_non_bank_business_day(year))
29
29
  end
30
30
  end
31
31
 
@@ -33,16 +33,10 @@ class BusinessDaysSingleton
33
33
  #
34
34
  # @param days [Integer] how many business days to add to given time.
35
35
  # @param time [Time] the start time in UTC from which the business days will be added.
36
- # @param reference [Time] the reference time in UTC from which we will compute daylight saving.
37
36
  # @return [Time] the computed business day in UTC time (at midnight in Brasilia time)
38
- def business_days_from_utc_time(days, time, reference=nil)
39
- # Set reference to given time if no reference is passed
40
- if reference.nil?
41
- reference = time
42
- end
43
-
37
+ def business_days_from_utc_time(days, time)
44
38
  # Get offset from reference data (based on Brasilia timezone)
45
- offset = reference.in_time_zone('Brasilia').formatted_offset()
39
+ offset = time.in_time_zone('Brasilia').formatted_offset()
46
40
 
47
41
  # Get date from time in reference offset
48
42
  date = (time + offset.to_i.hours).to_date
@@ -50,7 +44,10 @@ class BusinessDaysSingleton
50
44
  # Add days until we reach the specified business days
51
45
  count = 0
52
46
  while count < days
53
- date += 1.days
47
+ time += 24*60*60
48
+
49
+ offset = time.in_time_zone('Brasilia').formatted_offset()
50
+ date = (time + offset.to_i.hours).to_date
54
51
  if business_day?(date)
55
52
  count +=1
56
53
  end
@@ -79,6 +76,24 @@ class BusinessDaysSingleton
79
76
  @holidays.push(date)
80
77
  end
81
78
 
79
+ # Remove given date from holidays list for all commands after this.
80
+ #
81
+ # @param date [Date] the non-holiday date to be add.
82
+ def remove_holiday(date)
83
+ raise ArgumentError.new('Not a date') unless date.kind_of?(Date)
84
+
85
+ @holidays.delete(date)
86
+ end
87
+
88
+ # Remove latest holiday for each year
89
+ def remove_latest_non_bank_business_days
90
+ years = Set.new(@holidays.map { |d| d.year })
91
+ years.each do |year|
92
+ max_date = @holidays.select { |d| d.year == year }.max
93
+ self.remove_holiday(max_date)
94
+ end
95
+ end
96
+
82
97
  # Returns the first business day after the given date.
83
98
  #
84
99
  # @param date [Date] the reference date.
@@ -108,9 +123,10 @@ class BusinessDaysSingleton
108
123
 
109
124
  date
110
125
  end
126
+
111
127
  private
112
128
 
113
- def latest_non_bank_businness_day(year)
129
+ def latest_non_bank_business_day(year)
114
130
  d = Date.civil(year, 12, 31)
115
131
  while !self.business_day?(d)
116
132
  d = d - 1.day
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: business-days
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 3.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Allan Costa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-02 00:00:00.000000000 Z
11
+ date: 2020-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.1'
19
+ version: '6.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '5.1'
26
+ version: '6.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: tzinfo
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 1.2.5
33
+ version: 1.2.7
34
34
  type: :runtime
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.2.5
40
+ version: 1.2.7
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: tzinfo-data
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: holidays
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '='
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 6.3.0
61
+ version: '7.1'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '='
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 6.3.0
68
+ version: '7.1'
69
69
  description: Methods to check if a given date is a business days and to perform computations
70
70
  based on Business days.
71
71
  email: allan@cloudwalk.io
@@ -96,8 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  requirements: []
99
- rubyforge_project:
100
- rubygems_version: 2.6.11
99
+ rubygems_version: 3.0.3
101
100
  signing_key:
102
101
  specification_version: 4
103
102
  summary: Business Days