code-ruby 1.5.6 → 1.6.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.
@@ -3,10 +3,75 @@
3
3
  class Code
4
4
  class Object
5
5
  class Date < Object
6
+ DEFAULT_ZONE = "Etc/UTC"
7
+
8
+ class << self
9
+ delegate(
10
+ :code_add,
11
+ :code_substract,
12
+ :code_before?,
13
+ :code_after?,
14
+ :code_tomorrow,
15
+ :code_yesterday,
16
+ :code_now,
17
+ :code_today,
18
+ :code_current,
19
+ :code_year,
20
+ :code_years,
21
+ :code_month,
22
+ :code_months,
23
+ :code_week,
24
+ :code_weeks,
25
+ :code_week_day,
26
+ :code_week_days,
27
+ :code_day,
28
+ :code_days,
29
+ :code_hour,
30
+ :code_hours,
31
+ :code_minute,
32
+ :code_minutes,
33
+ :code_second,
34
+ :code_seconds,
35
+ :code_monday?,
36
+ :code_tuesday?,
37
+ :code_wednesday?,
38
+ :code_thursday?,
39
+ :code_friday?,
40
+ :code_saturday?,
41
+ :code_sunday?,
42
+ :code_january?,
43
+ :code_february?,
44
+ :code_march?,
45
+ :code_april?,
46
+ :code_may?,
47
+ :code_june?,
48
+ :code_july?,
49
+ :code_august?,
50
+ :code_september?,
51
+ :code_october?,
52
+ :code_november?,
53
+ :code_december?,
54
+ :code_change,
55
+ to: :new
56
+ )
57
+ end
58
+
6
59
  def initialize(*args, **_kargs, &_block)
7
- self.raw = ::Date.parse(args.map(&:to_s).join("-"))
8
- rescue ::Date::Error
9
- self.raw = ::Date.current
60
+ ::Time.zone ||= DEFAULT_ZONE
61
+
62
+ if args.first.is_a?(String) || args.first.is_a?(::String)
63
+ self.raw = ::Date.parse(args.first.to_s)
64
+ elsif args.first.is_a?(Time)
65
+ self.raw = args.first.raw.to_date
66
+ elsif args.first.is_a?(::Time)
67
+ self.raw = args.first.to_date
68
+ elsif args.first.is_a?(Date)
69
+ self.raw = args.first.raw.dup
70
+ elsif args.first.is_a?(::Date)
71
+ self.raw = args.first.dup
72
+ else
73
+ self.raw = ::Date.current
74
+ end
10
75
  end
11
76
 
12
77
  def self.call(**args)
@@ -28,41 +93,180 @@ class Code
28
93
  when "now"
29
94
  sig(args)
30
95
  code_now
96
+ when "year"
97
+ sig(args)
98
+ code_year
99
+ when "years"
100
+ sig(args)
101
+ code_years
102
+ when "month"
103
+ sig(args)
104
+ code_month
105
+ when "months"
106
+ sig(args)
107
+ code_months
108
+ when "week"
109
+ sig(args)
110
+ code_week
111
+ when "weeks"
112
+ sig(args)
113
+ code_weeks
114
+ when "week_day"
115
+ sig(args)
116
+ code_week_day
117
+ when "week_days"
118
+ sig(args)
119
+ code_week_days
120
+ when "day"
121
+ sig(args)
122
+ code_day
123
+ when "days"
124
+ sig(args)
125
+ code_days
31
126
  when "hour"
32
127
  sig(args)
33
128
  code_hour
34
- else
35
- super
36
- end
37
- end
38
-
39
- def self.code_hour
40
- code_today.code_hour
41
- end
42
-
43
- def self.code_now
44
- ::Time.zone ||= Time::DEFAULT_ZONE
45
- new(::Time.zone.now.beginning_of_day)
46
- end
47
-
48
- def self.code_today
49
- ::Time.zone ||= Time::DEFAULT_ZONE
50
- new(::Time.zone.now.beginning_of_day)
51
- end
129
+ when "hours"
130
+ sig(args)
131
+ code_hours
132
+ when "minute"
133
+ sig(args)
134
+ code_minute
135
+ when "minutes"
136
+ sig(args)
137
+ code_minutes
138
+ when "second"
139
+ sig(args)
140
+ code_second
141
+ when "seconds"
142
+ sig(args)
143
+ code_seconds
144
+ when "monday?"
145
+ sig(args)
146
+ code_monday?
147
+ when "tuesday?"
148
+ sig(args)
149
+ code_tuesday?
150
+ when "wednesday?"
151
+ sig(args)
152
+ code_wednesday?
153
+ when "thursday?"
154
+ sig(args)
155
+ code_thursday?
156
+ when "friday?"
157
+ sig(args)
158
+ code_friday?
159
+ when "saturday?"
160
+ sig(args)
161
+ code_saturday?
162
+ when "sunday?"
163
+ sig(args)
164
+ code_sunday?
165
+ when "january?"
166
+ sig(args)
167
+ code_january?
168
+ when "february?"
169
+ sig(args)
170
+ code_february?
171
+ when "march?"
172
+ sig(args)
173
+ code_march?
174
+ when "april?"
175
+ sig(args)
176
+ code_april?
177
+ when "may?"
178
+ sig(args)
179
+ code_may?
180
+ when "june?"
181
+ sig(args)
182
+ code_june?
183
+ when "july?"
184
+ sig(args)
185
+ code_july?
186
+ when "august?"
187
+ sig(args)
188
+ code_august?
189
+ when "september?"
190
+ sig(args)
191
+ code_september?
192
+ when "october?"
193
+ sig(args)
194
+ code_october?
195
+ when "november?"
196
+ sig(args)
197
+ code_november?
198
+ when "december?"
199
+ sig(args)
200
+ code_december?
201
+ when "add"
202
+ sig(args) do
203
+ {
204
+ year: (String | Integer).maybe,
205
+ month: (String | Integer).maybe,
206
+ day: (String | Integer).maybe,
207
+ week_day: (String | Integer).maybe,
208
+ week: (String | Integer).maybe
209
+ }
210
+ end
52
211
 
53
- def self.code_current
54
- ::Time.zone ||= Time::DEFAULT_ZONE
55
- new(::Time.zone.now.beginning_of_day)
56
- end
212
+ if code_value.nothing?
213
+ code_add
214
+ else
215
+ code_add(
216
+ year: code_value.code_get(:year),
217
+ month: code_value.code_get(:month),
218
+ day: code_value.code_get(:day),
219
+ week_day: code_value.code_get(:week_day),
220
+ week: code_value.code_get(:week)
221
+ )
222
+ end
223
+ when "substract"
224
+ sig(args) do
225
+ {
226
+ year: (String | Integer).maybe,
227
+ month: (String | Integer).maybe,
228
+ day: (String | Integer).maybe,
229
+ week_day: (String | Integer).maybe,
230
+ week: (String | Integer).maybe
231
+ }
232
+ end
57
233
 
58
- def self.code_tomorrow
59
- ::Time.zone ||= Time::DEFAULT_ZONE
60
- new(::Time.zone.tomorrow.beginning_of_day)
61
- end
234
+ if code_value.nothing?
235
+ code_substract
236
+ else
237
+ code_substract(
238
+ year: code_value.code_get(:year),
239
+ month: code_value.code_get(:month),
240
+ day: code_value.code_get(:day),
241
+ week_day: code_value.code_get(:week_day),
242
+ week: code_value.code_get(:week)
243
+ )
244
+ end
245
+ when "change"
246
+ sig(args) do
247
+ {
248
+ year: (String | Integer).maybe,
249
+ month: (String | Integer).maybe,
250
+ day: (String | Integer).maybe,
251
+ week_day: (String | Integer).maybe,
252
+ week: (String | Integer).maybe
253
+ }
254
+ end
62
255
 
63
- def self.code_yesterday
64
- ::Time.zone ||= Time::DEFAULT_ZONE
65
- new(::Time.zone.yesterday.beginning_of_day)
256
+ if code_value.nothing?
257
+ code_change
258
+ else
259
+ code_change(
260
+ year: code_value.code_get(:year),
261
+ month: code_value.code_get(:month),
262
+ day: code_value.code_get(:day),
263
+ week_day: code_value.code_get(:week_day),
264
+ week: code_value.code_get(:week)
265
+ )
266
+ end
267
+ else
268
+ super
269
+ end
66
270
  end
67
271
 
68
272
  def call(**args)
@@ -71,6 +275,48 @@ class Code
71
275
  code_value = code_arguments.code_first
72
276
 
73
277
  case code_operator.to_s
278
+ when "after?"
279
+ sig(args) { Time.maybe }
280
+ code_after?(code_value)
281
+ when "before?"
282
+ sig(args) { Time.maybe }
283
+ code_before?(code_value)
284
+ when "past?"
285
+ sig(args)
286
+ code_past?
287
+ when "future?"
288
+ sig(args)
289
+ code_future?
290
+ when "year"
291
+ sig(args)
292
+ code_year
293
+ when "years"
294
+ sig(args)
295
+ code_years
296
+ when "month"
297
+ sig(args)
298
+ code_month
299
+ when "months"
300
+ sig(args)
301
+ code_months
302
+ when "week"
303
+ sig(args)
304
+ code_week
305
+ when "weeks"
306
+ sig(args)
307
+ code_weeks
308
+ when "week_day"
309
+ sig(args)
310
+ code_week_day
311
+ when "week_days"
312
+ sig(args)
313
+ code_week_days
314
+ when "day"
315
+ sig(args)
316
+ code_day
317
+ when "days"
318
+ sig(args)
319
+ code_days
74
320
  when "hour"
75
321
  sig(args)
76
322
  code_hour
@@ -89,12 +335,118 @@ class Code
89
335
  when "seconds"
90
336
  sig(args)
91
337
  code_seconds
338
+ when "monday?"
339
+ sig(args)
340
+ code_monday?
341
+ when "tuesday?"
342
+ sig(args)
343
+ code_tuesday?
344
+ when "wednesday?"
345
+ sig(args)
346
+ code_wednesday?
347
+ when "thursday?"
348
+ sig(args)
349
+ code_thursday?
350
+ when "friday?"
351
+ sig(args)
352
+ code_friday?
353
+ when "saturday?"
354
+ sig(args)
355
+ code_saturday?
356
+ when "sunday?"
357
+ sig(args)
358
+ code_sunday?
359
+ when "format"
360
+ sig(args) { String }
361
+ code_format(code_value)
362
+ when "january?"
363
+ sig(args)
364
+ code_january?
365
+ when "february?"
366
+ sig(args)
367
+ code_february?
368
+ when "march?"
369
+ sig(args)
370
+ code_march?
371
+ when "april?"
372
+ sig(args)
373
+ code_april?
374
+ when "may?"
375
+ sig(args)
376
+ code_may?
377
+ when "june?"
378
+ sig(args)
379
+ code_june?
380
+ when "july?"
381
+ sig(args)
382
+ code_july?
383
+ when "august?"
384
+ sig(args)
385
+ code_august?
386
+ when "september?"
387
+ sig(args)
388
+ code_september?
389
+ when "october?"
390
+ sig(args)
391
+ code_october?
392
+ when "november?"
393
+ sig(args)
394
+ code_november?
395
+ when "december?"
396
+ sig(args)
397
+ code_december?
398
+ when "add"
399
+ sig(args) do
400
+ {
401
+ year: (String | Integer).maybe,
402
+ month: (String | Integer).maybe,
403
+ day: (String | Integer).maybe,
404
+ week_day: (String | Integer).maybe,
405
+ week: (String | Integer).maybe
406
+ }
407
+ end
408
+
409
+ if code_value.nothing?
410
+ code_add
411
+ else
412
+ code_add(
413
+ year: code_value.code_get(:year),
414
+ month: code_value.code_get(:month),
415
+ day: code_value.code_get(:day),
416
+ week_day: code_value.code_get(:week_day),
417
+ week: code_value.code_get(:week)
418
+ )
419
+ end
420
+ when "substract"
421
+ sig(args) do
422
+ {
423
+ year: (String | Integer).maybe,
424
+ month: (String | Integer).maybe,
425
+ day: (String | Integer).maybe,
426
+ week_day: (String | Integer).maybe,
427
+ week: (String | Integer).maybe
428
+ }
429
+ end
430
+
431
+ if code_value.nothing?
432
+ code_substract
433
+ else
434
+ code_substract(
435
+ year: code_value.code_get(:year),
436
+ month: code_value.code_get(:month),
437
+ day: code_value.code_get(:day),
438
+ week_day: code_value.code_get(:week_day),
439
+ week: code_value.code_get(:week)
440
+ )
441
+ end
92
442
  when "change"
93
443
  sig(args) do
94
444
  {
95
445
  year: (String | Integer).maybe,
96
446
  month: (String | Integer).maybe,
97
- day: (String | Integer).maybe
447
+ day: (String | Integer).maybe,
448
+ week_day: (String | Integer).maybe,
449
+ week: (String | Integer).maybe
98
450
  }
99
451
  end
100
452
 
@@ -104,7 +456,9 @@ class Code
104
456
  code_change(
105
457
  year: code_value.code_get(:year),
106
458
  month: code_value.code_get(:month),
107
- day: code_value.code_get(:day)
459
+ day: code_value.code_get(:day),
460
+ week_day: code_value.code_get(:week_day),
461
+ week: code_value.code_get(:week)
108
462
  )
109
463
  end
110
464
  else
@@ -112,6 +466,150 @@ class Code
112
466
  end
113
467
  end
114
468
 
469
+ def code_after?(other = nil)
470
+ code_other = other.to_code
471
+ code_other = Date.code_now if code_other.nothing?
472
+
473
+ Boolean.new(raw.after?(code_other.raw))
474
+ end
475
+
476
+ def code_before?(other = nil)
477
+ code_other = other.to_code
478
+ code_other = Date.code_now if code_other.nothing?
479
+
480
+ Boolean.new(raw.before?(code_other.raw))
481
+ end
482
+
483
+ def code_past?
484
+ code_before?
485
+ end
486
+
487
+ def code_future?
488
+ code_after?
489
+ end
490
+
491
+ def code_year
492
+ Integer.new(raw.year)
493
+ end
494
+
495
+ def code_years
496
+ Integer.new(raw.year)
497
+ end
498
+
499
+ def code_month
500
+ Integer.new(raw.month)
501
+ end
502
+
503
+ def code_months
504
+ Integer.new(raw.month)
505
+ end
506
+
507
+ def code_week
508
+ Integer.new(raw.cweek)
509
+ end
510
+
511
+ def code_weeks
512
+ Integer.new(raw.cweek)
513
+ end
514
+
515
+ def code_week_day
516
+ Integer.new(raw.wday)
517
+ end
518
+
519
+ def code_week_days
520
+ Integer.new(raw.wday)
521
+ end
522
+
523
+ def code_day
524
+ Integer.new(raw.day)
525
+ end
526
+
527
+ def code_days
528
+ Integer.new(raw.day)
529
+ end
530
+
531
+ def code_monday?
532
+ code_week_day.code_one?
533
+ end
534
+
535
+ def code_tuesday?
536
+ code_week_day.code_two?
537
+ end
538
+
539
+ def code_wednesday?
540
+ code_week_day.code_three?
541
+ end
542
+
543
+ def code_thursday?
544
+ code_week_day.code_four?
545
+ end
546
+
547
+ def code_friday?
548
+ code_week_day.code_five?
549
+ end
550
+
551
+ def code_saturday?
552
+ code_week_day.code_six?
553
+ end
554
+
555
+ def code_sunday?
556
+ code_week_day.code_zero?
557
+ end
558
+
559
+ def code_january?
560
+ code_month.code_one?
561
+ end
562
+
563
+ def code_february?
564
+ code_month.code_two?
565
+ end
566
+
567
+ def code_march?
568
+ code_month.code_three?
569
+ end
570
+
571
+ def code_april?
572
+ code_month.code_four?
573
+ end
574
+
575
+ def code_may?
576
+ code_month.code_five?
577
+ end
578
+
579
+ def code_june?
580
+ code_month.code_six?
581
+ end
582
+
583
+ def code_july?
584
+ code_month.code_seven?
585
+ end
586
+
587
+ def code_august?
588
+ code_month.code_eight?
589
+ end
590
+
591
+ def code_september?
592
+ code_month.code_nine?
593
+ end
594
+
595
+ def code_october?
596
+ code_month.code_ten?
597
+ end
598
+
599
+ def code_november?
600
+ code_month.code_eleven?
601
+ end
602
+
603
+ def code_december?
604
+ code_month.code_twelve?
605
+ end
606
+
607
+ def code_format(format)
608
+ code_format = format.to_code
609
+
610
+ String.new(raw.strftime(code_format.raw))
611
+ end
612
+
115
613
  def code_hour
116
614
  Integer.new(0)
117
615
  end
@@ -136,20 +634,128 @@ class Code
136
634
  Integer.new(0)
137
635
  end
138
636
 
139
- def code_change(year: nil, month: nil, day: nil)
140
- code_year = year.to_code
141
- code_month = month.to_code
142
- code_day = day.to_code
637
+ def code_today
638
+ Date.new
639
+ end
640
+
641
+ def code_current
642
+ Date.new
643
+ end
143
644
 
144
- raw.change(
145
- **{
146
- year: code_year.raw,
147
- month: code_month.raw,
148
- day: code_day.raw
149
- }.compact
645
+ def code_now
646
+ Date.new
647
+ end
648
+
649
+ def code_tomorrow
650
+ code_add(day: 1)
651
+ end
652
+
653
+ def code_yesterday
654
+ code_substract(day: 1)
655
+ end
656
+
657
+ def code_add(
658
+ year: nil,
659
+ years: nil,
660
+ month: nil,
661
+ months: nil,
662
+ day: nil,
663
+ days: nil,
664
+ week_day: nil,
665
+ week_days: nil,
666
+ week: nil,
667
+ weeks: nil
668
+ )
669
+ code_year = year.to_code.nothing? ? years.to_code : year.to_code
670
+ code_month = month.to_code.nothing? ? months.to_code : month.to_code
671
+ code_day = day.to_code.nothing? ? days.to_code : day.to_code
672
+ code_week_day =
673
+ week_day.to_code.nothing? ? week_days.to_code : week_day.to_code
674
+ code_week = week.to_code.nothing? ? weeks.to_code : week.to_code
675
+
676
+ Date.new(
677
+ raw.change(
678
+ year: code_years.code_to_integer.raw + code_year.code_to_integer.raw,
679
+ month:
680
+ code_months.code_to_integer.raw + code_month.code_to_integer.raw,
681
+ day: code_days.code_to_integer.raw + code_day.code_to_integer.raw,
682
+ wday:
683
+ code_week_days.code_to_integer.raw +
684
+ code_week_day.code_to_integer.raw,
685
+ cweek: code_weeks.code_to_integer.raw + code_week.code_to_integer.raw
686
+ )
150
687
  )
688
+ end
689
+
690
+ def code_substract(
691
+ year: nil,
692
+ years: nil,
693
+ month: nil,
694
+ months: nil,
695
+ day: nil,
696
+ days: nil,
697
+ week_day: nil,
698
+ week_days: nil,
699
+ week: nil,
700
+ weeks: nil
701
+ )
702
+ code_year = year.to_code.nothing? ? years.to_code : year.to_code
703
+ code_month = month.to_code.nothing? ? months.to_code : month.to_code
704
+ code_day = day.to_code.nothing? ? days.to_code : day.to_code
705
+ code_week_day =
706
+ week_day.to_code.nothing? ? week_days.to_code : week_day.to_code
707
+ code_week = week.to_code.nothing? ? weeks.to_code : week.to_code
151
708
 
152
- self
709
+ Date.new(
710
+ raw.change(
711
+ year: code_years.code_to_integer.raw - code_year.code_to_integer.raw,
712
+ month:
713
+ code_months.code_to_integer.raw - code_month.code_to_integer.raw,
714
+ day: code_days.code_to_integer.raw - code_day.code_to_integer.raw,
715
+ wday:
716
+ code_week_days.code_to_integer.raw -
717
+ code_week_day.code_to_integer.raw,
718
+ cweek: code_weeks.code_to_integer.raw - code_week.code_to_integer.raw
719
+ )
720
+ )
721
+ end
722
+
723
+ def code_change(
724
+ year: nil,
725
+ years: nil,
726
+ month: nil,
727
+ months: nil,
728
+ day: nil,
729
+ days: nil,
730
+ week_day: nil,
731
+ week_days: nil,
732
+ week: nil,
733
+ weeks: nil
734
+ )
735
+ code_year = year.to_code.nothing? ? years.to_code : year.to_code
736
+ code_month = month.to_code.nothing? ? months.to_code : month.to_code
737
+ code_day = day.to_code.nothing? ? days.to_code : day.to_code
738
+ code_week_day =
739
+ week_day.to_code.nothing? ? week_days.to_code : week_day.to_code
740
+ code_week = week.to_code.nothing? ? weeks.to_code : week.to_code
741
+
742
+ if code_year.something? || code_month.something? ||
743
+ code_day.something? || code_week_day.something? ||
744
+ code_week.something?
745
+ Date.new(
746
+ raw.change(
747
+ **{
748
+ year: code_year.raw,
749
+ month: code_month.raw,
750
+ day: code_day.raw,
751
+ wday: code_week_day.raw,
752
+ cweek: code_week.raw
753
+ }.compact
754
+ )
755
+ )
756
+ else
757
+ Date.new(self)
758
+ end
153
759
  end
154
760
  end
155
761
  end