nydp-kalendor 0.0.1 → 0.0.3

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: 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