nydp-kalendor 0.0.1 → 0.0.3

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
  SHA1:
3
- metadata.gz: 019255c54a1f7e930d7e58a1d06bd0a852f12b63
4
- data.tar.gz: a2e936010e6057f0bfa1ca1da3b42cd5e83df0b5
3
+ metadata.gz: aa13412eb35a046cb93285d721b8d5ac24fead59
4
+ data.tar.gz: d1d031829686394fdb19eb83ed618f0a6d2f5076
5
5
  SHA512:
6
- metadata.gz: 8252ed60cf0e8bf3b126c7fffb7f14a8024c554d1e8e4782f07c135c967e0ebd8777e29cf32d0f3656ea2d6ec74d2c4bd636388fd0a2934e3a42d8fb1d8284d0
7
- data.tar.gz: 68bcf3619bf0dab1153f975b0f3a44e45a76ddb35233e829bea0551b786feefc63005e6f0a62dfe51fb9773c77be7bcfc21679cc0a4eb259092375da1736ac15
6
+ metadata.gz: 1a5d712825b558a07827661547e0ebecc3b5c37afe2673c845e45e6a2718c6962d9325b5bba99e965775debdc6a53317bfc5e5d2d7f5b86f7c75e10d0523f469
7
+ data.tar.gz: 815082aab0181563dd393e5c031eacbfd7ae134908b37aeaccb0599365a253dd075ec6a9fc26141095419217c1ef795bc8a274fbc3213a2a47a3c2b25ad0bd91
@@ -26,6 +26,26 @@
26
26
  ;;
27
27
  ;;
28
28
 
29
+ (chapter-start 'kalendor "utilities for defining, building, and manipulating calendars. ")
30
+
31
+ (dox-add-doc 'kalendor-build/named 'def '("store a new calendar under the given name") '(name label expr) nil '(kalendor))
32
+ (dox-add-doc 'kalendor-build/weekday 'def '("all dates for the given day of the week ;
33
+ if there is a second integer parameter n,
34
+ limit to the nth of the given day each month") '(day n) nil '(kalendor))
35
+ (dox-add-doc 'kalendor-build/annual 'def '("the same specified date in every year") '(date month) nil '(kalendor))
36
+ (dox-add-doc 'kalendor-build/union 'def '("the union of all dates provided by the given calendars") 'args nil '(kalendor))
37
+ (dox-add-doc 'kalendor-build/intersect 'def '("the intersection of all dates provided by the given calendars") 'args nil '(kalendor))
38
+ (dox-add-doc 'kalendor-build/subtract 'def '("all the dates of 'keep, except for any dates in 'toss") '(keep toss) nil '(kalendor))
39
+ (dox-add-doc 'kalendor-build/list 'def '("a preset list of dates") 'args nil '(kalendor))
40
+ (dox-add-doc 'kalendor-build/interval 'def '("all the dates from 'from upto 'upto (inclusive)") '(from upto) nil '(kalendor))
41
+ (dox-add-doc 'kalendor-build/month 'def '("all the dates in the given month, every year.
42
+ 'month is an integer, january is 1") '(month) nil '(kalendor))
43
+ (dox-add-doc 'kalendor/find 'def '("find the given calendar in the store") '(name) nil '(kalendor))
44
+ (dox-add-doc 'kalendor/add 'def '("add the given calendar to the store") '(kal) nil '(kalendor))
45
+ (dox-add-doc 'kalendor/delete 'def '("remove the given calendar from the store") '(name) nil '(kalendor))
46
+ (dox-add-doc 'kalendor/names 'def '("get the list of stored calendar names") nil nil '(kalendor))
47
+ (dox-add-doc 'kalendor/list 'def '("get the list of stored calendars") nil nil '(kalendor))
48
+
29
49
  (assign kalendor/substitutions
30
50
  {
31
51
  named 'kalendor-build/named
@@ -36,61 +56,218 @@
36
56
  subtract 'kalendor-build/subtract
37
57
  list 'kalendor-build/list
38
58
  interval 'kalendor-build/interval
39
- weekday 'kalendor-build/weekday
40
59
  month 'kalendor-build/month
41
60
  lookup 'kalendor/find
42
61
  })
43
62
 
44
63
  (def kalendor/replace-names (expr)
45
- (if (and (sym? expr) (kalendor/find expr))
46
- `(kalendor/find ',expr)
47
- (and (sym? expr) (hash-get kalendor/substitutions expr))
48
- (hash-get kalendor/substitutions expr)
64
+ ; used internally by 'kalendor macro
65
+ (if (sym? expr)
66
+ (if (kalendor/find expr)
67
+ `(kalendor/find ',expr)
68
+ (hash-get kalendor/substitutions expr)
69
+ (hash-get kalendor/substitutions expr)
70
+ expr)
49
71
  (pair? expr)
50
72
  (cons (kalendor/replace-names (car expr))
51
73
  (kalendor/replace-names (cdr expr)))
52
74
  expr))
53
75
 
54
76
  (def kalendor/test (kal from upto)
77
+ ; used internally for testing kalendor expressions
55
78
  (map to-string (kalendor/dates kal from upto)))
56
79
 
57
80
  (mac kalendor (name label expr)
58
- `(kalendor/add ,(kalendor/replace-names `(named ',name ,label ,expr))))
59
-
60
- (kalendor mondays { en "Mondays" fr "lundis" de "Montag" } (weekday 1))
61
- (kalendor tuesdays { en "Tuesdays" fr "mardis" de "Dienstag" } (weekday 2))
62
- (kalendor wednesdays { en "Wednesdays" fr "mercredis" de "Mittwoch" } (weekday 3))
63
- (kalendor thursdays { en "Thursdays" fr "jeudis" de "Donnerstag" } (weekday 4))
64
- (kalendor fridays { en "Fridays" fr "vendredis" de "Freitag" } (weekday 5))
65
- (kalendor saturdays { en "Saturdays" fr "samedis" de "Samstag" } (weekday 6))
66
- (kalendor sundays { en "Sundays" fr "dimanches" de "Sonntag" } (weekday 0))
67
- (kalendor weekends { en "weekends" fr "weekends" de "Wochenende" } (union saturdays sundays))
68
-
69
- (kalendor a-01-jan { en "1 jan" fr "1 janv" de "1. Januar" } (annual 1 1))
70
- (kalendor a-17-mar { en "17 mar" fr "17 mars" de "17. Marz" } (annual 17 3))
71
- (kalendor a-01-may { en "1 may" fr "1 mai" de "1. May" } (annual 1 5))
72
- (kalendor a-08-may { en "8 may" fr "8 mai" de "8. May" } (annual 8 5))
73
- (kalendor a-01-jun { en "1 jun" fr "1 juin" de "1. Juni" } (annual 1 6))
74
- (kalendor a-14-jul { en "14 jul" fr "14 jul" de "14. Juli" } (annual 14 7))
75
- (kalendor a-01-jun { en "1 aug" fr "1 août" de "1. Aug" } (annual 1 8))
76
- (kalendor a-15-aug { en "15 aug" fr "15 août" de "15. Aug" } (annual 15 8))
77
- (kalendor a-01-nov { en "1 nov" fr "1 nov" de "1. Nov" } (annual 1 11))
78
- (kalendor a-25-dec { en "25 dec" fr "25 déc" de "25. Dez" } (annual 25 12))
79
- (kalendor a-26-dec { en "26 dec" fr "26 déc" de "26. Dez" } (annual 26 12))
80
-
81
- (kalendor first-monday-may { en "First monday May" fr "premier lundi mai" de "Erste Montag May" } (intersect (weekday 1 1) (month 5)))
82
- (kalendor first-monday-jun { en "First monday Jun" fr "premier lundi juin" de "Erste Montag Juni" } (intersect (weekday 1 1) (month 6)))
83
- (kalendor first-monday-aug { en "First monday Aug" fr "premier lundi août" de "Erste Montag Aug" } (intersect (weekday 1 1) (month 8)))
84
- (kalendor last-monday-oct { en "Last monday oct" fr "dernier lundi oct" de "Letzte Montag Oct" } (intersect (weekday 1 -1) (month 10)))
85
-
86
- (kalendor easter
87
- { en "Easter" fr "Pacques" de "Ostern" }
81
+ ; create a calendar but do not add it to the store
82
+ ; Note that for a more concise 'expr, you can refer to previously-named calendars by name, and all kalendor-build/XXX functions simply by XXX
83
+ (kalendor/replace-names `(named ',name ,label ,expr)))
84
+
85
+ (mac kalendor/public (name label expr)
86
+ ; create a calendar and add it to the store with the given name.
87
+ ; Note that for a more concise 'expr, you can refer to previously-named calendars by name, and all kalendor-build/XXX functions simply by XXX
88
+ `(kalendor/add (kalendor ,name ,label ,expr)))
89
+
90
+ (kalendor/public mondays { en "Mondays" fr "lundis" de "Montag" } (weekday 1))
91
+ (kalendor/public tuesdays { en "Tuesdays" fr "mardis" de "Dienstag" } (weekday 2))
92
+ (kalendor/public wednesdays { en "Wednesdays" fr "mercredis" de "Mittwoch" } (weekday 3))
93
+ (kalendor/public thursdays { en "Thursdays" fr "jeudis" de "Donnerstag" } (weekday 4))
94
+ (kalendor/public fridays { en "Fridays" fr "vendredis" de "Freitag" } (weekday 5))
95
+ (kalendor/public saturdays { en "Saturdays" fr "samedis" de "Samstag" } (weekday 6))
96
+ (kalendor/public sundays { en "Sundays" fr "dimanches" de "Sonntag" } (weekday 0))
97
+ (kalendor/public weekends { en "weekends" fr "weekends" de "Wochenende" } (union saturdays sundays))
98
+
99
+ (= kal (hash))
100
+ (= kal.a-01-jan (kalendor a-01-jan { en "1 jan" fr "1 janv" de "1. Januar" } (annual 1 1)))
101
+ (= kal.a-17-mar (kalendor a-17-mar { en "17 mar" fr "17 mars" de "17. Marz" } (annual 17 3)))
102
+ (= kal.a-01-may (kalendor a-01-may { en "1 may" fr "1 mai" de "1. May" } (annual 1 5)))
103
+ (= kal.a-08-may (kalendor a-08-may { en "8 may" fr "8 mai" de "8. May" } (annual 8 5)))
104
+ (= kal.a-01-jun (kalendor a-01-jun { en "1 jun" fr "1 juin" de "1. Juni" } (annual 1 6)))
105
+ (= kal.a-14-jul (kalendor a-14-jul { en "14 jul" fr "14 jul" de "14. Juli" } (annual 14 7)))
106
+ (= kal.a-01-aug (kalendor a-01-aug { en "1 aug" fr "1 août" de "1. Aug" } (annual 1 8)))
107
+ (= kal.a-15-aug (kalendor a-15-aug { en "15 aug" fr "15 août" de "15. Aug" } (annual 15 8)))
108
+ (= kal.a-01-nov (kalendor a-01-nov { en "1 nov" fr "1 nov" de "1. Nov" } (annual 1 11)))
109
+ (= kal.a-11-nov (kalendor a-11-nov { en "Armistice Day - 11 nov" fr "Jour de l'Armistice - 11 nov" de "Waffenstillstandstag - 11. Nov" } (annual 11 11)))
110
+ (= kal.a-25-dec (kalendor a-25-dec { en "25 dec" fr "25 déc" de "25. Dez" } (annual 25 12)))
111
+ (= kal.a-26-dec (kalendor a-26-dec { en "26 dec" fr "26 déc" de "26. Dez" } (annual 26 12)))
112
+
113
+ (= kal.first-monday-may (kalendor first-monday-may { en "First monday May" fr "premier lundi mai" de "Erste Montag May" } (intersect (weekday 1 1) (month 5))))
114
+ (= kal.first-monday-jun (kalendor first-monday-jun { en "First monday Jun" fr "premier lundi juin" de "Erste Montag Juni" } (intersect (weekday 1 1) (month 6))))
115
+ (= kal.first-monday-aug (kalendor first-monday-aug { en "First monday Aug" fr "premier lundi août" de "Erste Montag Aug" } (intersect (weekday 1 1) (month 8))))
116
+ (= kal.last-monday-oct (kalendor last-monday-oct { en "Last monday Oct" fr "dernier lundi oct" de "Letzte Montag Oct" } (intersect (weekday 1 -1) (month 10))))
117
+
118
+ (kalendor/public easter
119
+ { en "Easter" fr "Pâques" de "Ostern" }
88
120
  (list "2001-04-15" "2002-03-31" "2003-04-20" "2004-04-11" "2005-03-27" "2006-04-16" "2007-04-08" "2008-03-23" "2009-04-12"
89
121
  "2010-04-04" "2011-04-24" "2012-04-08" "2013-03-31" "2014-04-20" "2015-04-05" "2016-03-27" "2017-04-16" "2018-04-01" "2019-04-21"
90
122
  "2020-04-12" "2021-04-04" "2022-04-17" "2023-04-09" "2024-03-31" "2025-04-20"))
91
123
 
92
- ;; (kalendor
93
- ;; (subtract (interval "2016-06-01" "2016-08-31")
94
- ;; (union (union saturdays sundays))
95
- ;; )
96
- ;; )
124
+ (kalendor/public ascension-thursday
125
+ { en "Ascension Thursday" fr "Jeudi de l'Ascension" de "Himmelfahrtstag" }
126
+ (list "2000-06-01" "2001-05-24" "2002-05-09" "2003-05-29" "2004-05-20" "2005-05-05" "2006-05-25" "2007-05-17" "2008-05-01"
127
+ "2009-05-21" "2010-05-13" "2011-06-02" "2012-05-17" "2013-05-09" "2014-05-29" "2015-05-14" "2016-05-05" "2017-05-25"
128
+ "2018-05-10" "2019-05-30" "2020-05-21" "2021-05-13" "2022-05-26" "2023-05-18" "2024-05-09" "2025-05-29" "2026-05-14"
129
+ "2027-05-06" "2028-05-25" "2029-05-10" "2030-05-30" "2031-05-22" "2032-05-06" "2033-05-26" "2034-05-18" "2035-05-03"))
130
+
131
+ (kalendor/public whit-monday
132
+ { en "Whit Monday" fr "Lundi de Pentecôte" de "Pfingstmontag" }
133
+ (list "2000-06-12" "2001-06-04" "2002-05-20" "2003-06-09" "2004-05-31" "2008-05-12"
134
+ "2009-06-01" "2010-05-24" "2011-06-13" "2012-05-28" "2013-05-20" "2014-06-09" "2015-05-25" "2016-05-16" "2017-06-05"
135
+ "2018-05-21" "2019-06-10" "2020-06-01" "2021-05-24" "2022-06-06" "2023-05-29" "2024-05-20" "2025-06-09" "2026-05-25"
136
+ "2027-05-17" "2028-06-05" "2029-05-21" "2030-06-10" "2031-06-02" "2032-05-17" "2033-06-06" "2034-05-29" "2035-05-14"))
137
+
138
+ (mac kalendor/private (place . kal)
139
+ (w/uniq k
140
+ `(let ,k (kalendor ,@kal)
141
+ (hash-set ,place (hash-get ,k 'name) ,k))))
142
+
143
+ (assign kalendor/presets {
144
+ france (fn ()
145
+ (let france/private {}
146
+ (kalendor/public france-public-holidays
147
+ { en "French public holidays"
148
+ fr "Jours fériés France"
149
+ de "Ferien, Frankreich" }
150
+ (union kal.a-01-jan easter kal.a-01-may kal.a-08-may
151
+ ascension-thursday whit-monday
152
+ kal.a-14-jul kal.a-15-aug kal.a-01-nov kal.a-11-nov kal.a-25-dec))
153
+
154
+ (kalendor/public france-non-working-days
155
+ { en "weekends and public holidays, France"
156
+ fr "Jours fériés et weekends, France"
157
+ de "Ferien und Wochenende, Frankreich" }
158
+ (union weekends (lookup 'france-public-holidays)))
159
+
160
+ (kalendor/private france/private
161
+ october
162
+ { en "October school holidays, France"
163
+ fr "vacances scolaires France, octobre"
164
+ de "Schulferien France, Oktober" }
165
+ (union (interval "2015-10-17" "2015-11-01")
166
+ (interval "2016-10-19" "2016-11-02")
167
+ (interval "2017-10-21" "2017-11-05")))
168
+
169
+ (kalendor/private france/private
170
+ december
171
+ { en "December school holidays, France"
172
+ fr "vacances scolaires France, décembre"
173
+ de "Schulferien France, Dezember" }
174
+ (union (interval "2015-12-19" "2016-01-03")
175
+ (interval "2016-12-17" "2017-01-02")
176
+ (interval "2017-12-23" "2018-01-07")))
177
+
178
+ (kalendor/private france/private
179
+ winter/zone-c
180
+ { en "Winter school holidays, France, Zone C"
181
+ fr "vacances scolaires France, hiver, zone c"
182
+ de "Schulferien France, Winter, Zone C" }
183
+ (union (interval "2016-02-20" "2016-03-06")
184
+ (interval "2017-02-04" "2017-02-19")
185
+ (interval "2018-02-17" "2018-03-04")))
186
+
187
+ (kalendor/private france/private
188
+ winter/zone-b
189
+ { en "Winter school holidays, France, Zone B"
190
+ fr "vacances scolaires France, hiver, zone B"
191
+ de "Schulferien France, Winter, Zone B" }
192
+ (union (interval "2016-02-06" "2016-02-21")
193
+ (interval "2017-02-11" "2017-02-26")
194
+ (interval "2018-02-24" "2018-03-11")))
195
+
196
+ (kalendor/private france/private
197
+ winter/zone-a
198
+ { en "Winter school holidays, France, Zone A"
199
+ fr "vacances scolaires France, hiver, zone A"
200
+ de "Schulferien France, Winter, Zone A" }
201
+ (union (interval "2016-02-13" "2016-02-29")
202
+ (interval "2017-02-18" "2017-03-05")
203
+ (interval "2018-02-10" "2018-02-25")))
204
+
205
+ (kalendor/private france/private
206
+ easter/zone-a
207
+ { en "Easter school holidays, France, Zone C"
208
+ fr "vacances scolaires France, Paques, zone c"
209
+ de "Schulferien France, Ostern, Zone C" }
210
+ (union (interval "2016-04-16" "2016-05-01")
211
+ (interval "2017-04-01" "2017-04-17")
212
+ (interval "2018-04-14" "2018-04-29")))
213
+
214
+ (kalendor/private france/private
215
+ easter/zone-b
216
+ { en "Easter school holidays, France, Zone B"
217
+ fr "vacances scolaires France, Paques, zone B"
218
+ de "Schulferien France, Ostern, Zone B" }
219
+ (union (interval "2016-04-02" "2016-04-17")
220
+ (interval "2017-04-08" "2017-04-23")
221
+ (interval "2018-04-21" "2018-05-06")))
222
+
223
+ (kalendor/private france/private
224
+ easter/zone-a
225
+ { en "Easter school holidays, France, Zone A"
226
+ fr "vacances scolaires France, Paques, zone A"
227
+ de "Schulferien France, Ostern, Zone A" }
228
+ (union (interval "2016-02-13" "2016-02-29")
229
+ (interval "2017-02-18" "2017-03-05")
230
+ (interval "2018-02-10" "2018-02-25")))
231
+
232
+ (kalendor/private france/private
233
+ summer
234
+ { en "Summer school holidays, France"
235
+ fr "vacances scolaires France, été"
236
+ de "Schulferien France, Sommer" }
237
+ (union (interval "2016-07-04" "2016-08-31")
238
+ (interval "2017-07-08" "2017-09-03")
239
+ (interval "2018-07-07" "2018-09-01")))
240
+
241
+ (kalendor/public france-school-holidays-zone-c
242
+ { en "school holidays, France, zone C"
243
+ fr "vacances scolaires France, zone C"
244
+ de "Schulferien France, Zone C" }
245
+ (union france/private.october
246
+ france/private.december
247
+ france/private.winter/zone-c
248
+ france/private.easter/zone-c
249
+ france/private.summer))
250
+
251
+ (kalendor/public france-school-holidays-zone-b
252
+ { en "school holidays, France, zone B"
253
+ fr "vacances scolaires France, zone B"
254
+ de "Schulferien France, Zone B" }
255
+ (union france/private.october
256
+ france/private.december
257
+ france/private.winter/zone-b
258
+ france/private.easter/zone-b
259
+ france/private.summer))
260
+
261
+ (kalendor/public france-school-holidays-zone-a
262
+ { en "school holidays, France, zone A"
263
+ fr "vacances scolaires France, zone A"
264
+ de "Schulferien France, Zone A" }
265
+ (union france/private.october
266
+ france/private.december
267
+ france/private.winter/zone-a
268
+ france/private.easter/zone-a
269
+ france/private.summer))))})
270
+
271
+ (def kalendor/install (preset)
272
+ ; install some preset calendars. 'preset must be one of '(france)
273
+ ((or (hash-get kalendor/presets preset) noop)))
@@ -1,5 +1,5 @@
1
1
  module Nydp
2
2
  module Kalendor
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -5,7 +5,7 @@ require 'nydp/kalendor/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "nydp-kalendor"
7
7
  spec.version = Nydp::Kalendor::VERSION
8
- spec.authors = ["conanite"]
8
+ spec.authors = ["Conan Dalton"]
9
9
  spec.email = ["conan@conandalton.net"]
10
10
  spec.summary = %q{nydp integration for Kalendor gem}
11
11
  spec.description = %q{provides functions and macros to simplify date management within nydp}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nydp-kalendor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
- - conanite
7
+ - Conan Dalton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-28 00:00:00.000000000 Z
11
+ date: 2017-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler