gb_work_day 0.0.4 → 0.0.6

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
- 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