gb_work_day 0.0.3 → 0.0.4
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 +4 -4
- data/README.md +119 -0
- data/lib/gb_work_day/core_ext/date.rb +9 -1
- data/lib/gb_work_day/core_ext/time.rb +9 -1
- data/lib/gb_work_day/duration.rb +13 -5
- data/lib/gb_work_day/version.rb +1 -1
- data/spec/core_ext/date_spec.rb +4 -0
- data/spec/core_ext/time_spec.rb +3 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 310aaaee9f37fe3ccdbe077d1ed7dc7eb9768728
|
4
|
+
data.tar.gz: 031751336c41a70bde3ac7313a9050f929e11932
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: adc76599cf592b96a78431284a4f36ba2b329b434daa0fbda77a9e2d3d32a1b65860935ff2aadd47509b08ad8f1139c545a386ba95dd90071e0564bfb8cda098
|
7
|
+
data.tar.gz: b74120d209b3f7021aed67e69e817a896c75aa5a7b9c93c59b7250dfcff5747dfd9bcda4bed8239c26c17b7fdc49b0f54c00d77087167b5d18461f20425d05d3
|
data/README.md
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
# GBWorkDay
|
2
|
+
|
3
|
+
Library to make calculation on work days.
|
4
|
+
Unlike others libraries like [`business_time`](https://github.com/bokmann/business_time),
|
5
|
+
[`working_hours`](https://github.com/Intrepidd/working_hours), [`biz`](https://github.com/zendesk/biz)
|
6
|
+
it operates on whole days, not hours.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem 'gb_work_day'
|
14
|
+
```
|
15
|
+
|
16
|
+
And then execute:
|
17
|
+
|
18
|
+
$ bundle
|
19
|
+
|
20
|
+
Or install it yourself as:
|
21
|
+
|
22
|
+
$ gem install gb_work_day
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
|
26
|
+
### Work week
|
27
|
+
|
28
|
+
Set default work week for current thread
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
beginning_of_week = 1 #Monday
|
32
|
+
work_days = 5 #wrokd days are Monday-Friday
|
33
|
+
GBWorkDay::WorkWeek.current = GBWorkWeek.new(work_days, beginning_of_week)
|
34
|
+
```
|
35
|
+
|
36
|
+
or if you want to setup per instance
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
beginning_of_week = 1 #Monday
|
40
|
+
work_days = 5 #wrokd days are Monday-Friday
|
41
|
+
week = GBWorkWeek.new(work_days, beginning_of_week)
|
42
|
+
my_date = Date.today.to_work_date(week)
|
43
|
+
```
|
44
|
+
|
45
|
+
or
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
beginning_of_week = 1 #Monday
|
49
|
+
work_days = 5 #wrokd days are Monday-Friday
|
50
|
+
week = GBWorkWeek.new(work_days, beginning_of_week)
|
51
|
+
my_date = my_date
|
52
|
+
#some code here
|
53
|
+
my_date.week = week
|
54
|
+
```
|
55
|
+
|
56
|
+
### Date and Time operation
|
57
|
+
|
58
|
+
Check if today is a work day
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
Date.today.work?
|
62
|
+
```
|
63
|
+
|
64
|
+
or
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
Time.now.work?
|
68
|
+
```
|
69
|
+
|
70
|
+
Check if today is holiday
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
Date.today.free?
|
74
|
+
```
|
75
|
+
|
76
|
+
or
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
Time.now.free?
|
80
|
+
```
|
81
|
+
|
82
|
+
Get next working day
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
Date.today.next_work_day
|
86
|
+
```
|
87
|
+
|
88
|
+
or
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
Time.now.next_work_day
|
92
|
+
```
|
93
|
+
|
94
|
+
|
95
|
+
You can also make more complicated calculations
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
delivery_date = Date.today + 10.work_days
|
99
|
+
```
|
100
|
+
|
101
|
+
or
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
amount_of_work = (start_date.to_work_date - end_date).work_days
|
105
|
+
```
|
106
|
+
|
107
|
+
## Contributing
|
108
|
+
|
109
|
+
1. Fork it ( https://github.com/GenieBelt/gb-works-day/fork )
|
110
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
111
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
112
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
113
|
+
5. Create a new Pull Request
|
114
|
+
|
115
|
+
## Alternatives
|
116
|
+
|
117
|
+
* [`business_time`](https://github.com/bokmann/business_time)
|
118
|
+
* [`working_hours`](https://github.com/Intrepidd/working_hours)
|
119
|
+
* [`biz`](https://github.com/zendesk/biz)
|
@@ -38,7 +38,15 @@ class Date
|
|
38
38
|
# Return next working day
|
39
39
|
# @return [Time]
|
40
40
|
def next_work_day
|
41
|
-
|
41
|
+
if default_week.free_day? self
|
42
|
+
next_day = self
|
43
|
+
while default_week.free_day? next_day
|
44
|
+
next_day += 1
|
45
|
+
end
|
46
|
+
next_day
|
47
|
+
else
|
48
|
+
self + GBWorkDay::Duration.new(1, default_week)
|
49
|
+
end
|
42
50
|
end
|
43
51
|
|
44
52
|
# Get date object for calculating working days
|
@@ -39,7 +39,15 @@ class Time
|
|
39
39
|
# Return next working day
|
40
40
|
# @return [Time]
|
41
41
|
def next_work_day
|
42
|
-
|
42
|
+
if default_week.free_day? self
|
43
|
+
next_day = self
|
44
|
+
while default_week.free_day? next_day
|
45
|
+
next_day += GBWorkDay::Duration::SEC_IN_DAY
|
46
|
+
end
|
47
|
+
next_day
|
48
|
+
else
|
49
|
+
self + GBWorkDay::Duration.new(1, default_week)
|
50
|
+
end
|
43
51
|
end
|
44
52
|
|
45
53
|
# Get time object for calculating working days
|
data/lib/gb_work_day/duration.rb
CHANGED
@@ -97,15 +97,23 @@ module GBWorkDay
|
|
97
97
|
symbol *= -1
|
98
98
|
work_days_left *= -1
|
99
99
|
end
|
100
|
+
while @week.free_day? time
|
101
|
+
time = sum_normal_days time, symbol
|
102
|
+
end
|
100
103
|
while work_days_left > 0
|
101
|
-
|
102
|
-
time += symbol * 1
|
103
|
-
else
|
104
|
-
time += (symbol * SEC_IN_DAY)
|
105
|
-
end
|
104
|
+
time = sum_normal_days time, symbol
|
106
105
|
work_days_left -= 1 if @week.work_day? time
|
107
106
|
end
|
108
107
|
time
|
109
108
|
end
|
109
|
+
|
110
|
+
def sum_normal_days(time, days)
|
111
|
+
if time.is_a? ::Date
|
112
|
+
time += days * 1
|
113
|
+
else
|
114
|
+
time += (days * SEC_IN_DAY)
|
115
|
+
end
|
116
|
+
time
|
117
|
+
end
|
110
118
|
end
|
111
119
|
end
|
data/lib/gb_work_day/version.rb
CHANGED
data/spec/core_ext/date_spec.rb
CHANGED
@@ -57,8 +57,12 @@ describe 'Date extensions' do
|
|
57
57
|
|
58
58
|
it 'should properly add work duration' do
|
59
59
|
monday = Date.today.beginning_of_week
|
60
|
+
sunday = monday - 1
|
60
61
|
wednesday = monday + 2.days
|
61
62
|
friday = monday + 4.days
|
63
|
+
expect(sunday + 1.work_day).to eq (monday + 1.days)
|
64
|
+
expect(sunday + 1.work_day - 1.work_day).to eq monday
|
65
|
+
expect(sunday + 6.work_day).to eq (monday + 8.days)
|
62
66
|
expect(monday + 1.work_day).to eq (monday + 1.days)
|
63
67
|
expect(friday + 1.work_day).to eq (friday + 3.days)
|
64
68
|
expect(wednesday + 2.work_day).to eq (wednesday + 2.days)
|
data/spec/core_ext/time_spec.rb
CHANGED
@@ -57,8 +57,11 @@ describe 'Time extensions' do
|
|
57
57
|
|
58
58
|
it 'should properly add work duration' do
|
59
59
|
monday = Time.now.beginning_of_week
|
60
|
+
sunday = monday - 1.day
|
60
61
|
wednesday = monday + 2.days
|
61
62
|
friday = monday + 4.days
|
63
|
+
expect(sunday + 1.work_day).to eq (monday + 1.days)
|
64
|
+
expect(sunday + 1.work_day - 1.work_day).to eq monday
|
62
65
|
expect(monday + 1.work_day).to eq (monday + 1.days)
|
63
66
|
expect(friday + 1.work_day).to eq (friday + 3.days)
|
64
67
|
expect(wednesday + 2.work_day).to eq (wednesday + 2.days)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gb_work_day
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kacper Kawecki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- ".idea/modules.xml"
|
97
97
|
- ".idea/runConfigurations/specs.xml"
|
98
98
|
- Gemfile
|
99
|
+
- README.md
|
99
100
|
- Rakefile
|
100
101
|
- gb_work_day.gemspec
|
101
102
|
- lib/gb_work_day.rb
|