code-ruby 1.5.7 → 1.6.1

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