calendar_days 0.1.0 → 0.1.1

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
2
  SHA1:
3
- metadata.gz: 6a723a72a48eabe4ed80faa6215059d9dcdb7c09
4
- data.tar.gz: 5ede3a3cd1cb75789780f4bccb2d658d28a07e28
3
+ metadata.gz: 31dae8899c926deae858efaef3223ba9149e6167
4
+ data.tar.gz: fbc47a0501b65486ef3932ebe3c9d6bef338208a
5
5
  SHA512:
6
- metadata.gz: 0a89bf000bfa2ff3a6fea0002eeed170e0c4c8b9596fa9f8160bb8285d77290911ac744fad75f8345d1eff66cfcf4e3255057eb326c87ee9ad267abe3e66a845
7
- data.tar.gz: d2813156ae7aae63294b71897d9acbe16b41183fec10880f05246ff75694e68d65be8b3f3da7182acf2802b8d7730e8fa4d7bfae8245b358669b2db79d5d6dd2
6
+ metadata.gz: 9fe529aad1cc89d0b7dbae5cc9e439de3877aa47e36311edfb3c74e55cd34a0cc98ed525ee5ae2a056ec499849c2bdf12e0fa225a85936f23347a5b3ebb9dbbb
7
+ data.tar.gz: 809e8078df712ddbd5a4f48400929b586a01499e30acbfebf8ab5e82a3ad24a220ae357a1e409878bc80942451dc9438c6cef648d54a59a6303f74e5616d3de0
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # CalendarDays
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/calendar_days`. To experiment with that code, run `bin/console` for an interactive prompt.
4
3
 
5
- TODO: Delete this and the text above, and describe your gem
6
4
 
7
5
  ## Installation
8
6
 
@@ -22,7 +20,12 @@ Or install it yourself as:
22
20
 
23
21
  ## Usage
24
22
 
25
- TODO: Write usage instructions here
23
+ ```ruby
24
+ ```
25
+
26
+ ```ruby
27
+ ```
28
+
26
29
 
27
30
  ## Development
28
31
 
@@ -37,3 +40,5 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/mephis
37
40
  ## License
38
41
 
39
42
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
43
+
44
+
@@ -11,7 +11,8 @@ require "calendar_days/net_cache"
11
11
  #
12
12
  #
13
13
  #
14
- class CalendarDays < ::DateTime
14
+ # class CalendarDays < ::DateTime
15
+ class CalendarDays
15
16
 
16
17
  include NetCache
17
18
 
@@ -22,45 +23,76 @@ end
22
23
  #
23
24
  #
24
25
  class CalendarDays
25
- #
26
- # https://stackoverflow.com/questions/9049123/why-does-date-new-not-call-initialize
27
- #
28
- def self.new( in_year = DateTime.now.year, since_month = nil )
29
- since_month_tmp = since_month || 1
30
- tmp = super(in_year, since_month_tmp, 1)
31
- tmp.instance_eval{ initialize(in_year, since_month) }
26
+
27
+ def to_s_date( date )
28
+ date.to_s.gsub(/T.+$/, '')
32
29
  end
33
- alias :in_year :year
34
- alias :since_month :month
35
- alias :since_day :day
36
- def since; DateTime.new(in_year, since_month, since_day); end
37
30
 
38
- def initialize( in_year, until_month = nil )
31
+ def date_to_datetime( date )
32
+ date = DateTime.parse(date) if date.is_a? ::String
33
+ date
34
+ end
39
35
 
40
- until_month ||= 12
41
- @until_month = until_month
42
- @until_day = DateTime.new(in_year, until_month, -1).day
36
+ def valid_date?(date_since = self.since, date_until = self.until)
37
+ if ics_start <= date_since and date_until <= ics_end
38
+ true
39
+ else
40
+ false
41
+ end
42
+ end
43
43
 
44
- prepare_repo
44
+ #
45
+ # ==== Args
46
+ # _y :: year[opt.]
47
+ # _m :: month[opt.]
48
+ #
49
+ def initialize( _y = nil, _m = nil )
45
50
 
46
51
  #
52
+ self.prepare_repo
47
53
  ics_file = File.open(repo_file_fullpath)
48
54
  @ics_events = Icalendar::Event.parse(ics_file).sort_by{|ev| ev.dtstart.to_datetime}
49
55
  ics_file.close
50
56
 
57
+ @since_year = _y || self.ics_start.year
58
+ @since_month = _m || 1
59
+ @since_day = 1
60
+
61
+ @until_year = _y || self.ics_end.year
62
+ #ng. @until_month = _m || (_y.nil?)? self.ics_end.month : 12
63
+ @until_month = _m || ((_y.nil?)? self.ics_end.month : 12)
64
+ @until_day = DateTime.new(@until_year, @until_month, -1).day
65
+
66
+ raise ArgumentError, "You specified #{[_y, _m].compact.join(' and ')}."+
67
+ " Specify year (and month) in the date range #{to_s_date(ics_start)}"+
68
+ " - #{to_s_date(ics_end)}." unless valid_date?
69
+
51
70
  self
52
71
  end
53
- attr_accessor :until_month, :until_day
54
- attr_reader :ics_events
55
- def until; DateTime.new(in_year, until_month, until_day); end
56
- def ics_start
72
+
73
+ attr_reader :since_year, :since_month, :since_day
74
+ attr_reader :until_year, :until_month, :until_day
75
+ attr_reader :ics_events
76
+
77
+ def since; DateTime.new(since_year, since_month, since_day); end
78
+ def until; DateTime.new(until_year, until_month, until_day); end
79
+
80
+ def __ics_start
57
81
  ics_events.first.dtstart.to_datetime
58
82
  end
59
- def ics_end
83
+ def __ics_end
60
84
  ics_events.last.dtstart.to_datetime
61
85
  end
62
- def ics_since; DateTime.new(ics_start.year, ics_start.month, ics_start.day); end
63
- def ics_until; DateTime.new(ics_end.year, ics_end.month, ics_end.day ); end
86
+ def ics_start
87
+ tmp = __ics_start
88
+ DateTime.new(tmp.year, tmp.month, 1)
89
+ end
90
+ def ics_end
91
+ tmp = __ics_end
92
+ DateTime.new(tmp.year, tmp.month, -1)
93
+ end
94
+ alias :ics_since :ics_start
95
+ alias :ics_until :ics_end
64
96
 
65
97
  end
66
98
 
@@ -70,62 +102,79 @@ end
70
102
  #
71
103
  class CalendarDays
72
104
 
73
- def date_to_datetime( date )
74
- date = DateTime.parse(date) if date.is_a? ::String
75
- date
105
+ # get the weekdays from the specified date range except saturday, sunday, and holiday.
106
+ # 指定した年(もしくは月)の平日 Weekday (土日祝日を抜いた日) を得る
107
+ #
108
+ #
109
+ def __weekday_list( dt_since = self.since, dt_until = self.until )
110
+ (dt_since..dt_until).select{|d| yield(d) }
76
111
  end
77
112
 
78
- # 指定した年(もしくは月)の平日 Weekday (土日祝日を抜いた日) を得る
113
+ # get the weekdays from the user-specified date range.
114
+ #
115
+ #
116
+ def weekday_list
117
+ __weekday_list{|dt|
118
+ not(is_weekend?(dt)) and not(is_holiday?(dt))
119
+ }
120
+ end
121
+
122
+ # get the weekdays defined in the ics file.
79
123
  #
80
124
  #
81
- def __weekday_list
82
- ret = []
125
+ def ics_weekday_list
126
+ __weekday_list(ics_start, ics_end){|dt|
127
+ not(is_weekend?(dt)) and not(is_holiday?(dt))
128
+ }
129
+ end
83
130
 
84
- dt_since = DateTime.new(in_year, since_month, since_day)
85
- dt_until = DateTime.new(in_year, until_month, until_day)
131
+ alias :week_days :weekday_list
132
+ alias :working_days :weekday_list
133
+ alias :buisiness_days :weekday_list
86
134
 
87
- dt_tmp = dt_since
88
- begin
89
- # if is_weekend?(dt_tmp) or is_holiday?(dt_tmp)
90
- if yield(dt_tmp)
91
- ret.push dt_tmp
92
- end
135
+ alias :weekdays :weekday_list
136
+ alias :workingdays :weekday_list
137
+ alias :buisinessdays :weekday_list
93
138
 
94
- dt_tmp += 1
95
- end while dt_tmp <= dt_until
139
+ alias :ics_week_days :ics_weekday_list
140
+ alias :ics_working_days :ics_weekday_list
141
+ alias :ics_business_days :ics_weekday_list
96
142
 
97
- ret
98
- end
99
- def weekday_list
100
- ret = __weekday_list{|dt| not(is_weekend?(dt)) and not(is_holiday?(dt)) }
101
- ret
102
- end
143
+ alias :ics_weekdays :ics_weekday_list
144
+ alias :ics_workingdays :ics_weekday_list
145
+ alias :ics_businessdays :ics_weekday_list
103
146
 
104
- #
147
+ # get saturdays and sundays.
105
148
  # ==== Attention
106
149
  # there exists such days which are both weekend and holiday.
107
150
  def weekend_list
108
- ret = __weekday_list{|dt| is_weekend?(dt) }
109
- ret
151
+ __weekday_list{|dt| is_weekend?(dt) }
152
+ end
153
+ def ics_weekend_list
154
+ __weekday_list(ics_start, ics_end){|dt| is_weekend?(dt) }
110
155
  end
111
- alias :weekdays :weekday_list
112
- alias :workingdays :weekday_list
113
- alias :weekends :weekend_list
156
+ alias :weekends :weekend_list
157
+ alias :ics_weekends :ics_weekend_list
114
158
 
159
+ #
160
+ #
161
+ #
115
162
  def is_saturday?( date )
116
163
  date_to_datetime(date).saturday?
117
164
  end
118
- alias :is_sat? :is_saturday?
119
- alias :is_sat? :is_saturday?
165
+ alias :is_sat? :is_saturday?
166
+ alias :saturday? :is_saturday?
120
167
 
121
168
  def is_sunday?( date )
122
169
  date_to_datetime(date).sunday?
123
170
  end
124
171
  alias :is_sun? :is_sunday?
172
+ alias :sunday? :is_sunday?
125
173
 
126
174
  def is_weekend?(date)
127
175
  is_saturday?(date) or is_sunday?(date)
128
176
  end
177
+ alias :weekend? :is_weekend?
129
178
 
130
179
  end
131
180
 
@@ -178,6 +227,7 @@ class CalendarDays
178
227
  dt = __dt.to_s.gsub(/T.+$/, '')
179
228
  holiday_list.map{|e| e.first.to_s }.grep( /^#{dt}/ ).size > 0
180
229
  end
230
+ alias :holiday? :is_holiday?
181
231
 
182
232
  def holiday_name( date )
183
233
  if date.is_a? ::String
@@ -193,6 +243,11 @@ class CalendarDays
193
243
  end
194
244
  end
195
245
 
246
+ # get the date of holiday from name.
247
+ # ==== Args
248
+ # name :: name of holiday.
249
+ # ==== Return
250
+ # Name or [ Name, ... ] (in case two or more dates are matched)
196
251
  def holiday_date( name )
197
252
  ret = unless block_given?
198
253
  holiday_list.select{|e| e.last =~ /#{name}/i }.map{|e| e.first }
@@ -1,3 +1,3 @@
1
1
  class CalendarDays
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calendar_days
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - YAMAMOTO, Masayuki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-04 00:00:00.000000000 Z
11
+ date: 2018-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler