increments-schedule 0.17.0 → 0.18.0

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
2
  SHA256:
3
- metadata.gz: 82bb6909cb6c21c1c942ca749dd55b059c196d579a47a9c5ebc364e18c60ce2f
4
- data.tar.gz: 3178e7321f0293c611a987fd93377c774ab68af96071b4e2917669be74725665
3
+ metadata.gz: b172f3f34040984d943581777b5f72b5ee82ef0995d44b896684015d44e734e4
4
+ data.tar.gz: be80411c1e82320205c17954ff9d903d17208c3e5c0f537bf0cd3d343313fdb8
5
5
  SHA512:
6
- metadata.gz: 73875c7d926a760744b1ba833fa0dff3a73358dd7708d4eb1ad79d1529cd3986423d805637d396d1918c28b4c449a6fc90dad22deb18e68ddd7469f89916f090
7
- data.tar.gz: f95a328aa00b00040a6567dd4826dc026eb426f1078bb3350eed1bb8fe643eccbf0ffbe5e057c1a01744da5141830b3f4a31e4310364c2b01a636c66f7255690
6
+ metadata.gz: 66fcee8bdf9052e4f427a9788209993c33fb0e042d925ee3f890bc4a7da53cc4fef004b0bb639f332d0fef60c0b5c22c4a134c00368cd3f77ad15338040a7d2d
7
+ data.tar.gz: 465153b398642caa3739070baf258f481477f2ccf386e9ef2b77c04fb1e10af96278b566d2dc783e5df76637b600abb27d9d77a95080a8c54ec091246cff1a64
data/.rubocop.yml CHANGED
@@ -1,9 +1,15 @@
1
- Layout/IndentArray:
1
+ Layout/FirstArrayElementIndentation:
2
2
  Enabled: false
3
3
 
4
4
  Metrics/BlockLength:
5
5
  Enabled: false
6
6
 
7
+ Gemspec/RequiredRubyVersion:
8
+ Enabled: false
9
+
10
+ Lint/ConstantDefinitionInBlock:
11
+ Enabled: false
12
+
7
13
  Metrics/LineLength:
8
14
  Max: 100
9
15
 
data/.travis.yml CHANGED
@@ -1,8 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.7
4
- - 2.3.4
5
- - 2.4.1
3
+ - 2.5.7
4
+ - 2.6.7
5
+ - 2.7.2
6
+ before_install:
7
+ - gem update bundler
6
8
  script: bundle exec rake ci
7
9
  sudo: false
8
10
  cache: bundler
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
  require 'rubocop/rake_task'
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'increments/schedule'
data/bin/setup CHANGED
@@ -2,6 +2,7 @@
2
2
  set -euo pipefail
3
3
  IFS=$'\n\t'
4
4
 
5
+ gem install bundler
5
6
  bundle install
6
7
 
7
8
  # Do any other automated setup that you need to do here
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'increments/schedule/version'
@@ -20,5 +22,5 @@ Gem::Specification.new do |spec|
20
22
 
21
23
  spec.add_runtime_dependency 'holiday_japan', '~> 1.1'
22
24
 
23
- spec.add_development_dependency 'bundler', '~> 1.3'
25
+ spec.add_development_dependency 'bundler', '~> 2.2'
24
26
  end
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'increments/schedule/date'
1
4
  require 'increments/schedule/version'
5
+ require 'increments/schedule/winter_vacation_schedule'
2
6
  require 'holiday_japan'
3
7
 
4
8
  module Increments
5
9
  module Schedule
6
- extend self # rubocop:disable ModuleFunction
10
+ extend self # rubocop:disable Style/ModuleFunction
7
11
 
8
12
  def foundation_anniversary?(date = Date.today)
9
13
  date.month == 2 && date.day == 29
@@ -14,10 +18,10 @@ module Increments
14
18
  end
15
19
 
16
20
  def pay_day?(date = Date.today)
17
- return work_day?(date) if date.day == 25
21
+ return work_day?(date) if date.day == 15
18
22
  return false if rest_day?(date)
19
23
 
20
- next_basic_pay_day = Date.new(date.year, date.month, 25)
24
+ next_basic_pay_day = Date.new(date.year, date.month, 15)
21
25
  next_basic_pay_day = next_basic_pay_day.next_month if date > next_basic_pay_day
22
26
  date.next_day.upto(next_basic_pay_day).all? do |date_until_basic_pay_day|
23
27
  rest_day?(date_until_basic_pay_day)
@@ -45,13 +49,13 @@ module Increments
45
49
  end
46
50
 
47
51
  def winter_vacation_day?(date = Date.today)
48
- WinterVacationSchedule.new(date).winter_vacation?
52
+ WinterVacationSchedule.winter_vacation?(date)
49
53
  end
50
54
 
51
55
  alias winter_vacation? winter_vacation_day?
52
56
 
53
57
  public_instance_methods.select { |name| name.to_s.end_with?('?') }.each do |predicate_method|
54
- enumeration_method = 'each_' + predicate_method.to_s.sub(/\?\z/, '')
58
+ enumeration_method = "each_#{predicate_method.to_s.sub(/\?\z/, '')}"
55
59
 
56
60
  define_method(enumeration_method) do |max_date = nil, &block|
57
61
  return to_enum(__method__, max_date) unless block
@@ -63,100 +67,5 @@ module Increments
63
67
  end
64
68
  end
65
69
  end
66
-
67
- WinterVacationSchedule = Struct.new(:date) do
68
- def winter_vacation?
69
- year_end_vacation.days.include?(date) || new_year_vacation.days.include?(date)
70
- end
71
-
72
- private
73
-
74
- def year_end_vacation
75
- @year_end_vacation ||= YearEndVacation.new(date.year)
76
- end
77
-
78
- def new_year_vacation
79
- @new_year_vacation ||= NewYearVacation.new(date.year)
80
- end
81
-
82
- YearEndVacation = Struct.new(:year) do
83
- def days
84
- beginning_day..dec_31
85
- end
86
-
87
- def beginning_day
88
- if coupled_new_year_vacation.days.count >= 5
89
- last_saturday
90
- else
91
- [dec_28, last_saturday].min
92
- end
93
- end
94
-
95
- def dec_28
96
- @dec_28 ||= Date.new(year, 12, 28)
97
- end
98
-
99
- def dec_31
100
- @dec_31 ||= Date.new(year, 12, 31)
101
- end
102
-
103
- def last_saturday
104
- @last_saturday ||= dec_31.find_previous(&:saturday?)
105
- end
106
-
107
- def coupled_new_year_vacation
108
- @coupled_new_year_vacation ||= NewYearVacation.new(year + 1)
109
- end
110
- end
111
-
112
- NewYearVacation = Struct.new(:year) do
113
- def days
114
- jan_1..end_day
115
- end
116
-
117
- def end_day
118
- return jan_3 if first_sunday <= jan_3
119
-
120
- if first_weekend_almost_adjoins_jan_3?
121
- first_sunday
122
- else
123
- jan_3
124
- end
125
- end
126
-
127
- def first_weekend_almost_adjoins_jan_3?
128
- jan_3.next_day.upto(first_sunday).all? { |d| d.friday? || d.saturday? || d.sunday? }
129
- end
130
-
131
- def first_sunday
132
- @first_sunday ||= jan_1.find_next(&:sunday?)
133
- end
134
-
135
- def jan_1
136
- @jan_1 ||= Date.new(year, 1, 1)
137
- end
138
-
139
- def jan_3
140
- @jan_3 ||= Date.new(year, 1, 3)
141
- end
142
- end
143
- end
144
-
145
- class Date < Date
146
- INFINITY_FUTURE = Date.new(10_000, 1, 1)
147
- INFINITY_PAST = Date.new(0, 1, 1)
148
-
149
- def find_next
150
- upto(INFINITY_FUTURE) do |date|
151
- break date if yield date
152
- end
153
- end
154
-
155
- def find_previous
156
- downto(INFINITY_PAST) do |date|
157
- break date if yield date
158
- end
159
- end
160
- end
161
70
  end
162
71
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Increments
4
+ module Schedule
5
+ class Date < ::Date
6
+ INFINITY_FUTURE = Date.new(10_000, 1, 1)
7
+ INFINITY_PAST = Date.new(0, 1, 1)
8
+
9
+ def find_next
10
+ upto(INFINITY_FUTURE) do |date|
11
+ break date if yield date
12
+ end
13
+ end
14
+
15
+ def find_previous
16
+ downto(INFINITY_PAST) do |date|
17
+ break date if yield date
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Increments
2
4
  module Schedule
3
- VERSION = '0.17.0'
5
+ VERSION = '0.18.0'
4
6
  end
5
7
  end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Increments
4
+ module Schedule
5
+ WinterVacationSchedule = Struct.new(:date) do
6
+ def self.winter_vacation?(date)
7
+ new(date).winter_vacation?
8
+ end
9
+
10
+ def winter_vacation?
11
+ year_end_vacation.days.include?(date) || new_year_vacation.days.include?(date)
12
+ end
13
+
14
+ private
15
+
16
+ def year_end_vacation
17
+ @year_end_vacation ||= YearEndVacation.new(date.year)
18
+ end
19
+
20
+ def new_year_vacation
21
+ @new_year_vacation ||= NewYearVacation.new(date.year)
22
+ end
23
+
24
+ YearEndVacation = Struct.new(:year) do
25
+ def days
26
+ beginning_day..dec_31
27
+ end
28
+
29
+ private
30
+
31
+ def beginning_day
32
+ if coupled_new_year_vacation.days.count >= 5
33
+ last_saturday
34
+ else
35
+ [dec_28, last_saturday].min
36
+ end
37
+ end
38
+
39
+ def dec_28
40
+ @dec_28 ||= Date.new(year, 12, 28)
41
+ end
42
+
43
+ def dec_31
44
+ @dec_31 ||= Date.new(year, 12, 31)
45
+ end
46
+
47
+ def last_saturday
48
+ @last_saturday ||= dec_31.find_previous(&:saturday?)
49
+ end
50
+
51
+ def coupled_new_year_vacation
52
+ @coupled_new_year_vacation ||= NewYearVacation.new(year + 1)
53
+ end
54
+ end
55
+
56
+ NewYearVacation = Struct.new(:year) do
57
+ def days
58
+ jan_1..end_day
59
+ end
60
+
61
+ private
62
+
63
+ def end_day
64
+ return jan_3 if first_sunday <= jan_3
65
+
66
+ if first_weekend_almost_adjoins_jan_3?
67
+ first_sunday
68
+ else
69
+ jan_3
70
+ end
71
+ end
72
+
73
+ def first_weekend_almost_adjoins_jan_3?
74
+ jan_3.next_day.upto(first_sunday).all? { |d| d.friday? || d.saturday? || d.sunday? }
75
+ end
76
+
77
+ def first_sunday
78
+ @first_sunday ||= jan_1.find_next(&:sunday?)
79
+ end
80
+
81
+ def jan_1
82
+ @jan_1 ||= Date.new(year, 1, 1)
83
+ end
84
+
85
+ def jan_3
86
+ @jan_3 ||= Date.new(year, 1, 3)
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: increments-schedule
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Nakayama
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-24 00:00:00.000000000 Z
11
+ date: 2021-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: holiday_japan
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: '2.2'
34
34
  type: :development
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.3'
40
+ version: '2.2'
41
41
  description: Convenient library for checking Increments' company schedule
42
42
  email:
43
43
  - nkymyj@gmail.com
@@ -58,7 +58,9 @@ files:
58
58
  - bin/setup
59
59
  - increments-schedule.gemspec
60
60
  - lib/increments/schedule.rb
61
+ - lib/increments/schedule/date.rb
61
62
  - lib/increments/schedule/version.rb
63
+ - lib/increments/schedule/winter_vacation_schedule.rb
62
64
  homepage: https://github.com/increments/increments-schedule
63
65
  licenses:
64
66
  - MIT
@@ -78,8 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
80
  - !ruby/object:Gem::Version
79
81
  version: '0'
80
82
  requirements: []
81
- rubyforge_project:
82
- rubygems_version: 2.7.7
83
+ rubygems_version: 3.0.3
83
84
  signing_key:
84
85
  specification_version: 4
85
86
  summary: Convenient library for checking Increments' company schedule