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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 310aaaee9f37fe3ccdbe077d1ed7dc7eb9768728
4
- data.tar.gz: 031751336c41a70bde3ac7313a9050f929e11932
2
+ SHA256:
3
+ metadata.gz: 06c47230ed0b62eaf183e73881b2e8f516435470a500b1ce703f96cbcf71f414
4
+ data.tar.gz: 055b42d77c11caa155c821bc40662a39d2dca5b13e3e005750e69c0964b395a4
5
5
  SHA512:
6
- metadata.gz: adc76599cf592b96a78431284a4f36ba2b329b434daa0fbda77a9e2d3d32a1b65860935ff2aadd47509b08ad8f1139c545a386ba95dd90071e0564bfb8cda098
7
- data.tar.gz: b74120d209b3f7021aed67e69e817a896c75aa5a7b9c93c59b7250dfcff5747dfd9bcda4bed8239c26c17b7fdc49b0f54c00d77087167b5d18461f20425d05d3
6
+ metadata.gz: 9bd9bb5b0d0d22b4960a109772619edf1600c515d7ec22282664a1ae5292b675a4616d31d1da57c01d0407926b0fc5295217b833c0dae3cb2bf1974a5a00446e
7
+ data.tar.gz: c08aed54bbd3c851a9ac0793a1faed0f242add8f61263e06c94e5817200cf1b1b8eb696da4983aa6cbb24e1aa0d163c5a88939631bb10569e478ccf2edcb88b5
@@ -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="Time extensions: gb_working_day" type="RSpecRunConfigurationType" factoryName="RSpec" temporary="true">
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/duration_spec.rb" />
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="GBWorkingDay::Duration should calculate proper date for past" />
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.5.1, RVM: ruby-2.3.0) [gem]" level="application" />
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.8.4, RVM: ruby-2.3.0) [gem]" level="application" />
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.4.0, RVM: ruby-2.3.0) [gem]" level="application" />
226
- <orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.4.2, RVM: ruby-2.3.0) [gem]" level="application" />
227
- <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.4.0, RVM: ruby-2.3.0) [gem]" level="application" />
228
- <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.4.1, RVM: ruby-2.3.0) [gem]" level="application" />
229
- <orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.4.1, RVM: ruby-2.3.0) [gem]" level="application" />
230
- <orderEntry type="library" scope="PROVIDED" name="simplecov (v0.11.1, RVM: ruby-2.3.0) [gem]" level="application" />
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}
@@ -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(1, time)
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(-1, time)
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(symbol, time)
95
- work_days_left = self.work_days
96
- if work_days_left < 0
97
- symbol *= -1
98
- work_days_left *= -1
99
- end
100
- while @week.free_day? time
101
- time = sum_normal_days time, symbol
102
- end
103
- while work_days_left > 0
104
- time = sum_normal_days time, symbol
105
- work_days_left -= 1 if @week.work_day? time
106
- end
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
@@ -1,3 +1,3 @@
1
1
  module GBWorkDay
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.6'
3
3
  end
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
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: 2016-03-04 00:00:00.000000000 Z
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.5.1
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