gb_work_day 0.0.4 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.idea/gb_working_day.iml +11 -78
- data/lib/gb_work_day/core_ext/date.rb +14 -0
- data/lib/gb_work_day/duration.rb +24 -16
- data/lib/gb_work_day/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 06c47230ed0b62eaf183e73881b2e8f516435470a500b1ce703f96cbcf71f414
|
4
|
+
data.tar.gz: 055b42d77c11caa155c821bc40662a39d2dca5b13e3e005750e69c0964b395a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bd9bb5b0d0d22b4960a109772619edf1600c515d7ec22282664a1ae5292b675a4616d31d1da57c01d0407926b0fc5295217b833c0dae3cb2bf1974a5a00446e
|
7
|
+
data.tar.gz: c08aed54bbd3c851a9ac0793a1faed0f242add8f61263e06c94e5817200cf1b1b8eb696da4983aa6cbb24e1aa0d163c5a88939631bb10569e478ccf2edcb88b5
|
data/.idea/gb_working_day.iml
CHANGED
@@ -41,40 +41,7 @@
|
|
41
41
|
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
|
42
42
|
<method />
|
43
43
|
</configuration>
|
44
|
-
<configuration default="false" name="
|
45
|
-
<predefined_log_file id="RUBY_RSPEC" enabled="true" />
|
46
|
-
<module name="gb_working_day" />
|
47
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
48
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
|
49
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
|
50
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
|
51
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
|
52
|
-
<envs>
|
53
|
-
<env name="JRUBY_OPTS" value="-X+O" />
|
54
|
-
</envs>
|
55
|
-
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
|
56
|
-
<EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
|
57
|
-
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
58
|
-
<COVERAGE_PATTERN ENABLED="true">
|
59
|
-
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
60
|
-
</COVERAGE_PATTERN>
|
61
|
-
</EXTENSION>
|
62
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
|
63
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/spec/core_ext/time_spec.rb" />
|
64
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
|
65
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
|
66
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="Time extensions" />
|
67
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
|
68
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
|
69
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
|
70
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
|
71
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
|
72
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
|
73
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPRING" VALUE="false" />
|
74
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
|
75
|
-
<method />
|
76
|
-
</configuration>
|
77
|
-
<configuration default="false" name="GBWorkingDay::Duration should calculate proper date for past: gb_working_day" type="RSpecRunConfigurationType" factoryName="RSpec" temporary="true">
|
44
|
+
<configuration default="false" name="Date extensions should properly add work duration: gb_working_day" type="RSpecRunConfigurationType" factoryName="RSpec" temporary="true">
|
78
45
|
<predefined_log_file id="RUBY_RSPEC" enabled="true" />
|
79
46
|
<module name="gb_working_day" />
|
80
47
|
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
@@ -93,10 +60,10 @@
|
|
93
60
|
</COVERAGE_PATTERN>
|
94
61
|
</EXTENSION>
|
95
62
|
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
|
96
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/spec/
|
63
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/spec/core_ext/date_spec.rb" />
|
97
64
|
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
|
98
65
|
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
|
99
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="
|
66
|
+
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="Date extensions should properly add work duration" />
|
100
67
|
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
|
101
68
|
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
|
102
69
|
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
|
@@ -173,39 +140,6 @@
|
|
173
140
|
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
|
174
141
|
<method />
|
175
142
|
</configuration>
|
176
|
-
<configuration default="false" name="Date extensions should properly add work duration: gb_working_day" type="RSpecRunConfigurationType" factoryName="RSpec" temporary="true">
|
177
|
-
<predefined_log_file id="RUBY_RSPEC" enabled="true" />
|
178
|
-
<module name="gb_working_day" />
|
179
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
180
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
|
181
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
|
182
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
|
183
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
|
184
|
-
<envs>
|
185
|
-
<env name="JRUBY_OPTS" value="-X+O" />
|
186
|
-
</envs>
|
187
|
-
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
|
188
|
-
<EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
|
189
|
-
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
190
|
-
<COVERAGE_PATTERN ENABLED="true">
|
191
|
-
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
192
|
-
</COVERAGE_PATTERN>
|
193
|
-
</EXTENSION>
|
194
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
|
195
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/spec/core_ext/date_spec.rb" />
|
196
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
|
197
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
|
198
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="Date extensions should properly add work duration" />
|
199
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
|
200
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
|
201
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
|
202
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
|
203
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
|
204
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
|
205
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPRING" VALUE="false" />
|
206
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
|
207
|
-
<method />
|
208
|
-
</configuration>
|
209
143
|
</component>
|
210
144
|
<component name="NewModuleRootManager">
|
211
145
|
<content url="file://$MODULE_DIR$">
|
@@ -215,19 +149,18 @@
|
|
215
149
|
</content>
|
216
150
|
<orderEntry type="jdk" jdkName="RVM: ruby-2.3.0" jdkType="RUBY_SDK" />
|
217
151
|
<orderEntry type="sourceFolder" forTests="false" />
|
218
|
-
<orderEntry type="library" scope="PROVIDED" name="activesupport (v4.2.
|
219
|
-
<orderEntry type="library" scope="PROVIDED" name="bundler (v1.11.2, RVM: ruby-2.3.0) [gem]" level="application" />
|
152
|
+
<orderEntry type="library" scope="PROVIDED" name="activesupport (v4.2.6, RVM: ruby-2.3.0) [gem]" level="application" />
|
220
153
|
<orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.2.5, RVM: ruby-2.3.0) [gem]" level="application" />
|
221
154
|
<orderEntry type="library" scope="PROVIDED" name="docile (v1.1.5, RVM: ruby-2.3.0) [gem]" level="application" />
|
222
155
|
<orderEntry type="library" scope="PROVIDED" name="i18n (v0.7.0, RVM: ruby-2.3.0) [gem]" level="application" />
|
223
|
-
<orderEntry type="library" scope="PROVIDED" name="minitest (v5.
|
156
|
+
<orderEntry type="library" scope="PROVIDED" name="minitest (v5.9.0, RVM: ruby-2.3.0) [gem]" level="application" />
|
224
157
|
<orderEntry type="library" scope="PROVIDED" name="rake (v10.5.0, RVM: ruby-2.3.0) [gem]" level="application" />
|
225
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec (v3.
|
226
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.
|
227
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.
|
228
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.
|
229
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.
|
230
|
-
<orderEntry type="library" scope="PROVIDED" name="simplecov (v0.
|
158
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec (v3.1.0, RVM: ruby-2.3.0) [gem]" level="application" />
|
159
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.1.7, RVM: ruby-2.3.0) [gem]" level="application" />
|
160
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.1.2, RVM: ruby-2.3.0) [gem]" level="application" />
|
161
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.1.3, RVM: ruby-2.3.0) [gem]" level="application" />
|
162
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.1.2, RVM: ruby-2.3.0) [gem]" level="application" />
|
163
|
+
<orderEntry type="library" scope="PROVIDED" name="simplecov (v0.10.0, RVM: ruby-2.3.0) [gem]" level="application" />
|
231
164
|
<orderEntry type="library" scope="PROVIDED" name="simplecov-html (v0.10.0, RVM: ruby-2.3.0) [gem]" level="application" />
|
232
165
|
<orderEntry type="library" scope="PROVIDED" name="thread_safe (v0.3.5, RVM: ruby-2.3.0) [gem]" level="application" />
|
233
166
|
<orderEntry type="library" scope="PROVIDED" name="tzinfo (v1.2.2, RVM: ruby-2.3.0) [gem]" level="application" />
|
@@ -49,6 +49,20 @@ class Date
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
# Return previous working day
|
53
|
+
# @return [Time]
|
54
|
+
def previous_work_day
|
55
|
+
if default_week.free_day? self
|
56
|
+
previous_day = self
|
57
|
+
while default_week.free_day? previous_day
|
58
|
+
previous_day -= 1
|
59
|
+
end
|
60
|
+
previous_day
|
61
|
+
else
|
62
|
+
self - GBWorkDay::Duration.new(1, default_week)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
52
66
|
# Get date object for calculating working days
|
53
67
|
#
|
54
68
|
# @param week [GBWorkDay::WorkWeek] if not set, it will use week set globally. For more check {GBWorkingDay::WorkWeek#current}
|
data/lib/gb_work_day/duration.rb
CHANGED
@@ -74,14 +74,14 @@ module GBWorkDay
|
|
74
74
|
# Calculates a new Time or Date that is as far in the future
|
75
75
|
# as this Duration represents.
|
76
76
|
def since(time = ::Time.current)
|
77
|
-
sum(
|
77
|
+
self.work_days > 0 ? sum(time) : subtract(time)
|
78
78
|
end
|
79
79
|
alias :from_now :since
|
80
80
|
|
81
81
|
# Calculates a new Time or Date that is as far in the past
|
82
82
|
# as this Duration represents.
|
83
83
|
def ago(time = ::Time.current)
|
84
|
-
sum(
|
84
|
+
self.work_days > 0 ? subtract(time) : sum(time)
|
85
85
|
end
|
86
86
|
alias :until :ago
|
87
87
|
|
@@ -91,22 +91,30 @@ module GBWorkDay
|
|
91
91
|
|
92
92
|
private
|
93
93
|
|
94
|
-
def sum(
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
time
|
94
|
+
def sum(time)
|
95
|
+
distance_to_last_monday = (time.wday - 1) % 7
|
96
|
+
weekends_count = (distance_to_last_monday + self.work_days.abs) / @week.work_days_per_week
|
97
|
+
weekends_length = weekends_count * @week.free_days_per_week
|
98
|
+
|
99
|
+
sum_normal_days(sum_normal_days(time, weekends_length), self.work_days.abs)
|
100
|
+
end
|
101
|
+
|
102
|
+
def subtract(time)
|
103
|
+
distance_to_eof = distance_to_end_of_week(time)
|
104
|
+
weekends_count = (distance_to_eof + self.work_days.abs) / @week.work_days_per_week
|
105
|
+
weekends_length = weekends_count * @week.free_days_per_week
|
106
|
+
|
107
|
+
sum_normal_days(sum_normal_days(time, -weekends_length), -self.work_days.abs)
|
108
|
+
end
|
109
|
+
|
110
|
+
# @param time [Date|Time]
|
111
|
+
# @return distance_to_eof [Integer]
|
112
|
+
def distance_to_end_of_week(time)
|
113
|
+
(@week.work_days_per_week - time.wday) % (@week.work_days_per_week)
|
108
114
|
end
|
109
115
|
|
116
|
+
# @param time [Date|Time]
|
117
|
+
# @param days [Integer]
|
110
118
|
def sum_normal_days(time, days)
|
111
119
|
if time.is_a? ::Date
|
112
120
|
time += days * 1
|
data/lib/gb_work_day/version.rb
CHANGED
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.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kacper Kawecki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -139,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
139
|
version: '0'
|
140
140
|
requirements: []
|
141
141
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.
|
142
|
+
rubygems_version: 2.7.7
|
143
143
|
signing_key:
|
144
144
|
specification_version: 4
|
145
145
|
summary: Library extending Time and Date to do calculations for work days
|