calendarium-romanum 0.4.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +4 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +47 -0
  5. data/.travis.yml +22 -0
  6. data/.yardopts +3 -0
  7. data/CHANGELOG.md +431 -0
  8. data/Gemfile +25 -0
  9. data/Gemfile.lock +86 -0
  10. data/README.md +598 -0
  11. data/Rakefile +16 -0
  12. data/bin/calendariumrom +4 -1
  13. data/calendarium-romanum.gemspec +31 -0
  14. data/config/locales/cs.yml +5 -0
  15. data/config/locales/en.yml +21 -14
  16. data/config/locales/es.yml +94 -0
  17. data/config/locales/fr.yml +7 -0
  18. data/config/locales/it.yml +7 -0
  19. data/config/locales/la.yml +7 -0
  20. data/data/README.md +70 -24
  21. data/data/czech-brno-cs.txt +4 -6
  22. data/data/czech-budejovice-cs.txt +4 -6
  23. data/data/czech-cechy-cs.txt +4 -5
  24. data/data/czech-cs.txt +236 -234
  25. data/data/czech-hradec-cs.txt +3 -5
  26. data/data/czech-litomerice-cs.txt +5 -7
  27. data/data/czech-morava-cs.txt +4 -5
  28. data/data/czech-olomouc-cs.txt +2 -4
  29. data/data/czech-ostrava-cs.txt +3 -5
  30. data/data/czech-plzen-cs.txt +3 -5
  31. data/data/czech-praha-cs.txt +3 -4
  32. data/data/easter_dates.txt +67 -0
  33. data/data/universal-1969-la.txt +234 -0
  34. data/data/universal-en.txt +214 -211
  35. data/data/universal-es.txt +243 -0
  36. data/data/universal-fr.txt +214 -210
  37. data/data/universal-it.txt +214 -211
  38. data/data/universal-la.txt +214 -210
  39. data/doc/data_readme.md +2 -0
  40. data/doc/images/class_diagram.png +0 -0
  41. data/doc/images/class_diagram.puml +44 -0
  42. data/doc/yard_readme.rdoc +76 -0
  43. data/lib/calendarium-romanum.rb +35 -22
  44. data/lib/calendarium-romanum/abstract_date.rb +15 -0
  45. data/lib/calendarium-romanum/calendar.rb +207 -42
  46. data/lib/calendarium-romanum/cli.rb +63 -80
  47. data/lib/calendarium-romanum/cli/comparator.rb +63 -0
  48. data/lib/calendarium-romanum/cli/date_parser.rb +30 -0
  49. data/lib/calendarium-romanum/cli/dumper.rb +68 -0
  50. data/lib/calendarium-romanum/cli/helper.rb +23 -0
  51. data/lib/calendarium-romanum/cli/querier.rb +73 -0
  52. data/lib/calendarium-romanum/cr.rb +16 -0
  53. data/lib/calendarium-romanum/data.rb +50 -20
  54. data/lib/calendarium-romanum/day.rb +208 -32
  55. data/lib/calendarium-romanum/enum.rb +42 -25
  56. data/lib/calendarium-romanum/enums.rb +124 -44
  57. data/lib/calendarium-romanum/errors.rb +4 -0
  58. data/lib/calendarium-romanum/ordinalizer.rb +23 -2
  59. data/lib/calendarium-romanum/perpetual_calendar.rb +58 -7
  60. data/lib/calendarium-romanum/rank.rb +43 -12
  61. data/lib/calendarium-romanum/rank_predicates.rb +43 -0
  62. data/lib/calendarium-romanum/sanctorale.rb +164 -24
  63. data/lib/calendarium-romanum/sanctorale_factory.rb +74 -3
  64. data/lib/calendarium-romanum/sanctorale_loader.rb +180 -0
  65. data/lib/calendarium-romanum/sanctorale_writer.rb +119 -0
  66. data/lib/calendarium-romanum/temporale.rb +226 -94
  67. data/lib/calendarium-romanum/temporale/celebration_factory.rb +107 -0
  68. data/lib/calendarium-romanum/temporale/dates.rb +84 -16
  69. data/lib/calendarium-romanum/temporale/easter_table.rb +27 -0
  70. data/lib/calendarium-romanum/temporale/extensions.rb +15 -0
  71. data/lib/calendarium-romanum/temporale/extensions/christ_eternal_priest.rb +16 -3
  72. data/lib/calendarium-romanum/temporale/extensions/dedication_before_all_saints.rb +73 -0
  73. data/lib/calendarium-romanum/transfers.rb +60 -15
  74. data/lib/calendarium-romanum/util.rb +22 -3
  75. data/lib/calendarium-romanum/version.rb +5 -1
  76. data/liturgical_law/1969_normae_universales.md +568 -0
  77. data/liturgical_law/1977_decretum_de_celebratione_baptismatis_domini.md +58 -0
  78. data/liturgical_law/1990_decretum_de_variatione_inducenda.md +67 -0
  79. data/liturgical_law/1998_notificatio_de_occurrentia.md +57 -0
  80. data/liturgical_law/2002_normae_universales.md +946 -0
  81. data/liturgical_law/2006_notification.md +37 -0
  82. data/liturgical_law/2012_declarationes.md +38 -0
  83. data/liturgical_law/README.md +74 -0
  84. metadata +50 -28
  85. data/lib/calendarium-romanum/sanctoraleloader.rb +0 -115
  86. data/spec/abstract_date_spec.rb +0 -62
  87. data/spec/calendar_spec.rb +0 -330
  88. data/spec/celebration_spec.rb +0 -23
  89. data/spec/cli_spec.rb +0 -26
  90. data/spec/colour_spec.rb +0 -17
  91. data/spec/data_spec.rb +0 -23
  92. data/spec/date_spec.rb +0 -61
  93. data/spec/dates_spec.rb +0 -45
  94. data/spec/day_spec.rb +0 -59
  95. data/spec/enum_spec.rb +0 -51
  96. data/spec/i18n_spec.rb +0 -59
  97. data/spec/ordinalizer_spec.rb +0 -22
  98. data/spec/perpetual_calendar_spec.rb +0 -91
  99. data/spec/rank_spec.rb +0 -57
  100. data/spec/readme_spec.rb +0 -52
  101. data/spec/sanctorale_factory_spec.rb +0 -42
  102. data/spec/sanctorale_spec.rb +0 -191
  103. data/spec/sanctoraleloader_spec.rb +0 -171
  104. data/spec/season_spec.rb +0 -17
  105. data/spec/spec_helper.rb +0 -35
  106. data/spec/temporale_spec.rb +0 -519
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 75ae31ccf7ea1277e121ee57b6466a375319628c
4
- data.tar.gz: 3199defd61097a21d6fc4baf2a44509091e70579
2
+ SHA256:
3
+ metadata.gz: 783786a54e37a2d755c2bc0a0fdf1cf21b684ce5e1f186e180fb8513a7be8a8d
4
+ data.tar.gz: 8c4879981d34a5962f604de47ec4d77faf2b63cec5adf2699cfc9d1a718d045f
5
5
  SHA512:
6
- metadata.gz: b608b70f30de32af79cbb67e555222640b6855700a7181038d729d84cbee63ab7c26ff7aee0cba943f403c2976acecd6efbed62f626618f81b448c8ebddd03e3
7
- data.tar.gz: 0be73effe009b65701f1dbf206813438309b6a3bb46822bda8daa06c2174fce02639978cdf7f61e7177626dfc625b8a99de0a50cb61f11b6041d2eb311c9fb97
6
+ metadata.gz: ba211f79a4b79ed8169d15871e8630baf2a536182284ec58e851b061a980dd18a9163a8d8749ab8f1f470f2cdec64f5c236710022f8739862d39eb8efd88bcef
7
+ data.tar.gz: 7c6be1ff8bee1e4ea3159a7add679dc7b53949dfc086b82fc63335d670f69fdfc4518d020944d3db09a22cfeb6442fe733850adaab29948618a91f3ed93a3e82
@@ -0,0 +1,4 @@
1
+ *~
2
+ .rvmrc
3
+ *.gem
4
+ coverage/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
@@ -0,0 +1,47 @@
1
+ Metrics/LineLength:
2
+ Max: 100
3
+
4
+ Style/EmptyLinesAroundClassBody:
5
+ Enabled: false
6
+
7
+ Style/EmptyLinesAroundModuleBody:
8
+ Enabled: false
9
+
10
+ Style/FrozenStringLiteralComment:
11
+ Enabled: false
12
+
13
+ Style/IfUnlessModifier:
14
+ Enabled: false
15
+
16
+ Style/Lambda:
17
+ Enabled: false
18
+
19
+ Style/LambdaCall:
20
+ Enabled: false
21
+
22
+ Style/NumericPredicate:
23
+ Enabled: false
24
+
25
+ Style/PreferredHashMethods:
26
+ Enabled: false
27
+
28
+ Style/RaiseArgs:
29
+ Enabled: false
30
+
31
+ Style/RedundantException:
32
+ Enabled: false
33
+
34
+ Style/SpaceInsideBlockBraces:
35
+ SpaceBeforeBlockParameters: false
36
+
37
+ Style/SpaceInsideHashLiteralBraces:
38
+ EnforcedStyle: no_space
39
+
40
+ Style/SpaceInsideRangeLiteral:
41
+ Enabled: false
42
+
43
+ Style/TrailingCommaInLiteral:
44
+ Enabled: false
45
+
46
+ Style/ZeroLengthPredicate:
47
+ Enabled: false
@@ -0,0 +1,22 @@
1
+ language: ruby
2
+ cache: bundler
3
+ dist: trusty
4
+
5
+ install: bundle install --jobs=3 --deployment --without development
6
+
7
+ script: bundle exec rake spec
8
+
9
+ jobs:
10
+ include:
11
+ - rvm: 2.6.5 # ~ latest MRI
12
+ script:
13
+ - bundle exec rake spec_all_locales
14
+ - bash spec/build/gem_build_test.sh
15
+ - rvm: 2.5.0 # oldest officially maintained MRI
16
+ - rvm: 2.0.0 # oldest MRI we support
17
+ # - rvm: jruby-9.1.12.0 # experimental
18
+ # allow_failures:
19
+ # - rvm: jruby-9.1.12.0
20
+
21
+ git:
22
+ depth: 3
@@ -0,0 +1,3 @@
1
+ --main doc/yard_readme.rdoc
2
+ --asset doc/images:images
3
+ --file README.md,doc/yard_readme.rdoc,doc/data_readme.md,data/universal-en.txt
@@ -0,0 +1,431 @@
1
+ # Changelog
2
+
3
+ ## [0.8.0] 2020-11-25
4
+
5
+ ### Fixed
6
+
7
+ - several fixes to the solemnity transfer rules:
8
+ - the algorithm was searching for free days only forwards,
9
+ but liturgical law assumes closest free day, even earlier
10
+ - check that two solemnities are not transferred to the same date,
11
+ overwriting one another
12
+ - the special rule on Annunciation from *Normae universales* 60
13
+ implemented
14
+ - fixed bug in computation of the date of Baptism of the Lord if Epiphany
15
+ is transferred to Sunday
16
+ - fixed bug in `Sanctorale#update` preventing more than one `Celebration`
17
+ with nil `#symbol` in a single `Sanctorale`
18
+ - `CelebrationFactory` was setting `Celebration#date` (if not specified)
19
+ to false instead of expected nil (thus breaking type promises)
20
+ - data: `czech-cs.txt`: typo fixed in the feast *symbol* of St. Bartholomew;
21
+ spelling of several feast titles corrected
22
+ - data: `czech-cs.txt`: proof-read against official sources, feasts
23
+ of "BVM, Queen of Angels" and St. Teresa of Calcutta deleted
24
+ (they are not on the calendar of Czech and Moravian dioceses,
25
+ incorrect information was copied from Czech Wikipedia at the time
26
+ of the data file's creation)
27
+ - data: all: Dedication of the Lateran Basilica is feast of the Lord
28
+ (had incorrect rank of a normal feast so far)
29
+ - data: `universal-en.txt`: several inaccuracies concerning liturgical
30
+ colour fixed
31
+
32
+ ### Added
33
+
34
+ - `liturgical_law/`: all documents of liturgical legislation
35
+ containing the liturgical calendar rules (original Latin text)
36
+ in Markdown format, with Ruby code examples proving that
37
+ the rules are implemented correctly;
38
+ the code examples are all executed as part of the gem's test suite
39
+ - `SanctoraleWriter` (contributed by Mike Kasberg @mkasberg)
40
+ - `PerpetualCalendar.new` accepts keyword argument `vespers`
41
+ (cf. `Calendar.new` argument of the same name)
42
+ - `Rank#optional_memorial?`, `#obligatory_memorial?`
43
+ - `AbstractDate#in_year` - more readable alias of `#concretize`
44
+ - `Rank#succ` - (among other things) allows constructing `Range` of `Rank`s
45
+ - `Calendar#transferred`
46
+ - `Temporale::Extensions::DedicationBeforeAllSaints` defining the solemnity
47
+ of Aniversary of Dedication for churches celebrating it on the movable
48
+ date on the last October Sunday
49
+ - `Temporale::Extensions.all` - method listing all Temporale extensions
50
+ defined by the gem
51
+ - `Temporale#each_day`
52
+ - `Temporale::EasterTable` - class handling a simple plaintext format
53
+ for tables of Easter dates
54
+ - `Celebration.new`: new argument `sunday`
55
+ - `SanctoraleLoader`: proper solemnities/feasts/memorials
56
+ can be specified also by adding suffix `p` to the rank code
57
+ (instead of rank priority number used so far),
58
+ similarly suffix `l` can be used to specify proper rank for
59
+ feasts of the Lord
60
+ - data: `universal-1969-la.txt` - historical first version
61
+ of the General Roman Calendar
62
+ - module `Constants` containing all the constants from `Colours`,
63
+ `Seasons` and `Ranks`
64
+
65
+ ### Changed
66
+
67
+ - the gemspec now declares requirement of Ruby >= 2.0
68
+ - `Calendar.new` can be called also without the `year` argument if `Temporale`
69
+ is provided (thus calling `Calendar.new(temporale, sanctorale)`
70
+ instead of `Calendar.new(year, sanctorale, temporale)`)
71
+ - Easter Triduum is now dealt with as a separate `Season`,
72
+ because *Normae universales* 18-21 clearly set the Triduum apart from
73
+ both Lent and Eastertide
74
+ - `Temporale::Extensions::ChristEternalPriest` specifies celebration
75
+ symbol (so far it was nil)
76
+ - `Celebration.new` supports keyword arguments (as an alternative to
77
+ or even in combination with the positional ones)
78
+ - `Temporale`: business logic guaranteeing that `Celebration#sunday?`
79
+ is true also for privileged Sundays (Advent, Lent)
80
+ - `calendariumrom` executable: all subcommands dealing with sanctorale
81
+ data files accept special file name `-` and load sanctorale data
82
+ from stdin in that case
83
+ - `Enum`, `Colours`, `Seasons`, `Ranks` and `Data` changed from classes
84
+ to modules
85
+
86
+ ### Acknowledgements
87
+
88
+ Improvements not affecting the gem's public interface (and thus not listed
89
+ in the changelog) contributed by
90
+
91
+ - Ihor Voloshyn @Snick555
92
+ - Dmitry Zhmurko @zhmurko
93
+
94
+ ## [0.7.1] 2020-06-28
95
+
96
+ ### Fixed
97
+
98
+ - `SanctoraleFactory.load_with_parents` crashing on files without
99
+ metadata
100
+ - `Sanctorale#update` prohibiting application of a particular
101
+ calendar which moves s celebration contained in the calendar being
102
+ updated to an earlier date
103
+ (as exemplified by the bundled calendar of diocese of Litoměřice,
104
+ Czech Republic: on calendarium-romanum 0.7.0
105
+ `CalendariumRomanum::Data['czech-litomerice-cs'].load_with_parents`
106
+ raises `ArgumentError` complaining about non-unique celebration symbols)
107
+ - broken links in YARD documentation (due to files missing in the
108
+ gem archive and basename clashes)
109
+
110
+ ### Changed
111
+
112
+ - if `Sanctorale#update` raises `ArgumentError` complaining about
113
+ non-unique celebration symbols, the updated `Sanctorale` instance
114
+ is left in an inconsistent internal state (more than one occurrence
115
+ of at least one celebration symbol)
116
+ - some additional non-code files (mostly for YARD documentation)
117
+ included in the gem archive
118
+
119
+ ## [0.7.0] 2020-06-21
120
+
121
+ ### Fixed
122
+
123
+ - St. Sebastian was missing in the French version of General Roman Calendar
124
+ - St. of Pietrelcina had incorrect rank in the Czech calendar
125
+ - `Sanctorale#add`: invalid attempt (i.e. an attempt raising an exception)
126
+ to add a second (or n-th) celebration for a given date was causing
127
+ inconsistency in the instance's internal state
128
+ - CLI: `calendariumrom query` wasn't printing celebrations of the highest
129
+ ranks (spotted and fixed by Mike Kasberg @mkasberg)
130
+ - CLI: got rid of a deprecation warning of the `i18n` gem
131
+ concerning `I18n.enforce_available_locales` (by Mike Kasberg @mkasberg)
132
+
133
+ ### Added
134
+
135
+ - data: General Roman Calendar in Spanish + Spanish locale (by Alejandro Ulate @CodingAleCR)
136
+ - data: optional memorials of St. Paul VI, Our Lady of Loreto, St. Faustina Kowalska
137
+ - data: diocese of Prague: optional memorial of Bl. Friedrich Bachstein and companions
138
+ - `Day#weekday_name` (by Ronald Walker @RonWalker22)
139
+ - `Day#to_s`, `Celebration#to_s` (by PJ Pollina @pjpollina)
140
+ - all sanctorale data files are provided with celebration symbols (available as
141
+ `Celebration#symbol` when loaded)
142
+ - `SanctoraleLoader` loads the YAML front matter (if provided),
143
+ to `Sanctorale#metadata` (new property added for this purpose)
144
+ - `SanctoraleFactory` methods merge not only sanctorale contents,
145
+ but also metadata
146
+ - `SanctoraleFactory.load_with_parents`, `Data#load_with_parents`
147
+ to conveniently load sanctorale file hierarchies based on their
148
+ metadata (using key `"extends"`)
149
+ - `calendarium-romanum/cr` defining `::CR` shortcut constant
150
+ - huge improvement of the API documentation
151
+
152
+ ### Changed
153
+
154
+ - data files format: celebration symbols never more start with a colon
155
+ - `Sanctorale#add` throws `ArgumentError` on attempt to add a `Celebration`
156
+ with `#symbol` which is already present in the given sanctorale
157
+ - all `#each` and `#each_*` methods defined in the gem return `Enumerator`
158
+ if called without a block
159
+
160
+ ## [0.6.0] 2018-03-27
161
+
162
+ ### Fixed
163
+
164
+ *Feature release - bugs were only introduced, not fixed :)*
165
+
166
+ ### Added
167
+
168
+ - now handled: *Saturday Memorial of the Blessed Virgin Mary*
169
+ - new memorial of *Mary, Mother of the Church*
170
+ (both handled by `Temporale`)
171
+ - `Temporale#==`, `Sanctorale#==`
172
+ - `Calendar#populates_vespers?` (access value of an option)
173
+ - `Temporale#[]`, `Sanctorale#[]`, `PerpetualCalendar#[]`
174
+ - `Celebration#date` - only set for fixed-date celebrations,
175
+ contains the celebration's *usual* date (as `AbstractDate` instance),
176
+ thus making it possible
177
+ to check if a solemnity was transferred and what would be
178
+ it's normal date if the transfer didn't occur
179
+ - `Celebration#cycle` - returns either `:temporale` or `:sanctorale`
180
+ - cycle predicates:
181
+ `Celebration#temporale?` and `#sanctorale?`
182
+ - `Calendar#each` - yields each day of the liturgical year
183
+ - missing rank predicates:
184
+ `Rank#ferial?`, `Rank#sunday?`,
185
+ `Celebration#ferial?`, `Celebration#sunday?`
186
+ - `Celebration#symbol` can be specified also in sanctorale data files
187
+ (but data files with symbols are not yet available)
188
+ - CLI: `calendariumrom version` prints gem version
189
+
190
+ ### Changed
191
+
192
+ - `Calendar#==` used to compare only class and year, now it compares
193
+ complete internal data
194
+ - `Colour#to_s` and `Season#to_s` now return meaningful values
195
+ like `"#<CalendariumRomanum::Colour red>"`
196
+ and `"#<CalendariumRomanum::Season lent>"`;
197
+ return value of `Rank#to_s` changed to match the common format
198
+ - English temporale feast names edited to match the standard US
199
+ liturgical books (by Mike Kasberg @mkasberg)
200
+ - `examples/` directory removed (README is now the main source
201
+ of copy-pastable examples)
202
+ - file naming unified: `calendarium-romanum/sanctoraleloader.rb`
203
+ renamed to `.../sanctorale_loader.rb`
204
+
205
+ ## [0.5.0] 2017-11-01
206
+
207
+ ### Fixed
208
+
209
+ - transfer of Epiphany to a Sunday was breaking numbering of weeks
210
+ of the Ordinary Time
211
+ - `Day.new()` (call without any arguments) was crashing
212
+ - shebang of `calendariumrom`
213
+ - CLI: `calendariumrom query` was printing internal representation
214
+ of a `Season` object instead of human-readable season name
215
+ (spotted and fixed by Simon Szutkowski @simonszu)
216
+ - MRI 2.x interpreter warnings
217
+
218
+ ### Added
219
+
220
+ - first Vespers of Sundays and solemnities: optional feature
221
+ of the `Calendar` (constructor has new keyword argument
222
+ `vespers: true` to activate it), populates `Day#vespers`
223
+ with a `Celebration` if Vespers should be taken from the following
224
+ day
225
+ - proper handling of collision between *Immaculate heart of Mary*
226
+ and another obligatory memorial ([CDW Prot. n. 2671/98/L](http://www.vatican.va/roman_curia/congregations/ccdds/documents/rc_con_ccdds_doc_20000630_memoria-immaculati-cordis-mariae-virginis_lt.html))
227
+ - `Calendar#[]` - alias of `Calendar#day`, but with additional
228
+ support for a `Range` of `Date`s (returns an `Array` of `Dates`
229
+ when called this way;
230
+ by Brian Gates @bgates)
231
+ - `Celebration#change(title: nil, rank: nil, colour: nil, color: nil, symbol: nil)` -
232
+ returns a copy of the celebration with values of selected
233
+ properties replaced by those passed as arguments
234
+ - `Celebration#symbol` - machine-readable unique identifier
235
+ of a celebration, for now only for solemnities of the temporale
236
+ - CLI: `calendariumrom query` supports printing a day, month or year
237
+ (by Simon Szutkowski @simonszu)
238
+ - CLI: `calendariumrom query` supports apart of bundled calendars
239
+ also custom ones, specified on the command line
240
+ (by Simon Szutkowski @simonszu)
241
+ - CLI: `calendariumrom cmp` correctly handles celebrations
242
+ present in only one of the compared sources
243
+ - data: memorials of saint popes John XXIII and John Paul II added
244
+ to Universal Roman calendar in Latin and to the calendar
245
+ of Czech and Moravian dioceses where they were missing
246
+
247
+ ### Changed
248
+
249
+ - ferials of the final week of Advent have proper titles
250
+ - ordinals in French names of Sundays and ferials have proper
251
+ suffixes
252
+ - `Day.new` signature changed from argument Hash
253
+ to Ruby 2 keyword arguments (no change in argument names
254
+ or count, but previously it wouldn't even notice unexpected
255
+ arguments, now it will crash when encountering them)
256
+ - `SanctoraleLoader` raises always `InvalidDataError`
257
+ (it used to raise `RangeError` on invalid date and
258
+ `RuntimeError` on other kinds of invalid data)
259
+ - `CelebrationFactory` creates also temporale solemnities
260
+ (useful mostly in specs)
261
+ - CLI: `calendariumrom errors` fails gracefully, without backtrace
262
+
263
+ ## [0.4.0] 2017-09-02
264
+
265
+ ### Fixed
266
+
267
+ - `Sanctorale#replace` saving the supplied array as part of
268
+ the internal data structures (and thus allowing their -
269
+ usually unintentional - modification by external code)
270
+ - `Calendar` unintentionally modifying `Sanctorale` internal data
271
+ when handling optional memorials
272
+ - errors in English ordinals greater than 10 ("21th" -> "21st" etc.)
273
+ - `Ranks::FERIAL.memorial?` wrongly returning `true`
274
+ - rank of *All Souls* fixed in all data files
275
+
276
+ ### Added
277
+
278
+ - support for transfer of Epiphany, Ascension and Corpus Christi
279
+ to a Sunday (GNLYC 7)
280
+ - General Roman Calendar in French and French localization
281
+ (by Azarias Boutin @AzariasB)
282
+ - `PerpetualCalendar`
283
+ - `Season#name`, `Colour#name` - localized human-readable names
284
+
285
+ ### Changed
286
+
287
+ - interface for `Temporale` extensions changed completely:
288
+ extensions are self-contained, isolated; their sole responsibility
289
+ is to yield data
290
+ - `Calendar` stripped of the ability to create new instances
291
+ with the same settings:
292
+ - `Calendar#pred` and `#succ` removed
293
+ - `Calendar.new` receives `Temporale` *instance*
294
+ (instead of a temporale factory)
295
+ - `Calendar#day` raises `RangeError` if the day is earlier than
296
+ 1st January 1970 (day of introduction of the implemented calendar
297
+ system)
298
+ - `Temporale::Dates.easter_sunday` doesn't return Julian calendar
299
+ Easter date for years <= 1752 (this library isn't intended to be used
300
+ for years earlier than 1970)
301
+ - `Day#==` and `Calendar#==` test object contents, not identity
302
+ - `Temporale::Dates.body_blood` renamed to `.corpus_christi`
303
+ - `Sanctorale#freeze` freezes also the internal data structures
304
+ - `Calendar#freeze` freezes contained `Temporale` and `Sanctorale`
305
+ - seasons and colours indexed by their symbols, not by index number -
306
+ e.g. `Seasons[:lent]`, `Colours[:violet]`
307
+ - `Calendar#celebrations_for` made private
308
+
309
+ ## [0.3.0] 2017-08-07
310
+
311
+ ### Fixed
312
+
313
+ *This is a feature release - bugs were only introduced, not fixed :)*
314
+
315
+ ### Added
316
+
317
+ - `Celebration#title` is now being generated for all Sundays and
318
+ ferials (was empty)
319
+ - ferials of the Holy Week and of the last week of Advent
320
+ have proper ranks
321
+ - new rank `Ranks::COMMEMORATION` introduced;
322
+ during privileged seasons, suppressed memorials, which
323
+ can be commemorated in the Divine Office (see GILH 239),
324
+ appear in `Day#celebrations` with this rank
325
+ - memorial of the *Immaculate Heart of Mary*
326
+ (although it really belongs to the sanctorale, as a movable feast
327
+ it is implemented in `Temporale`)
328
+ - support for extending `Temporale` with additional feasts
329
+ (`Temporale.with_extensions`, `Temporale.add_celebration`,
330
+ additional optional argument accepted by `Calendar.new` and
331
+ `Calendar.for_date`)
332
+ - `Temporale::Extensions::ChristEternalPriest` - `Temporale` extension
333
+ implementing the feast of *Christ the Eternal Priest*,
334
+ celebrated in some dioceses and religious institutes
335
+ on Thursday after Pentecost
336
+ - `Temporale::Dates` - module containing all the
337
+ temporale-solemnity-date-computing algorithms used in `Temporale`
338
+ - `Temporale#year`
339
+ - sanctorale data files may have YAML front matter
340
+ (a YAML document with metadata placed before the main content)
341
+
342
+ ### Changed
343
+
344
+ - seasons and colours are represented by `Season` and `Colour`
345
+ instances, not by `Symbol`s
346
+ - `Temporale#advent_sunday` and most `#*_advent_sunday`
347
+ removed, only `Temporale#first_advent_sunday` remains
348
+ - `Temporale#weekday_before`, `#weekday_after`, `#octave_of`,
349
+ `#monday_before` etc., `#monday_after` etc. removed
350
+ (all these general date helpers now reside in `Temporale::Dates`)
351
+ - unused attribute `Day#vespers` removed
352
+ - `Temporale#concretize_abstract_date` removed
353
+
354
+ ## [0.2.1] 2017-07-21
355
+
356
+ ### Fixed
357
+
358
+ - `AbstractDate` validity checks refusing 29th February
359
+
360
+ ## [0.2.0] 2017-07-20
361
+
362
+ ### Fixed
363
+
364
+ - numbering of Ordinary Time Sundays after Pentecost
365
+ - `Calendar#day` when an instance of `DateTime` is supplied as argument
366
+ - minor fixes in data files
367
+ - `calendariumrom` executable (broken in recent releases)
368
+
369
+ ### Added
370
+
371
+ - missing *temporale* feast days: Ash Wednesday, Palm Sunday, Ascension,
372
+ - new bundled locales: Latin, Italian, Czech
373
+ - contents of `Seasons`, `Ranks` and `Colours` can be explored via `each` and `all`
374
+ - bundled data files easily accessible through `CalendariumRomanum::Data`
375
+
376
+ ### Changed
377
+
378
+ - `Rank` never more inherits from `Struct`
379
+ - `Seasons`, `Ranks` and `Colours` changed from modules to classes
380
+ - `Sanctorale` raises `ArgumentError` on attempt to load two celebrations of rank other than optional memorial on a single day
381
+ - data file format: rank letter is optional when the rank is specified by number
382
+ - data file format: rank and colour letters are treated case-insensitively
383
+
384
+ ## [0.1.0] 2017-02-25
385
+
386
+ ### Fixed
387
+ - computing date of Holy Family when there is no Sunday between December 25th and January 1st (by Eddy Mulyono @eddymul)
388
+ - missing information for some celebrations added to the General Roman Calendar in English (by Andrea Ferrato @ferra-andre)
389
+
390
+ ### Added
391
+ - General Roman Calendar in Italian (by Andrea Ferrato @ferra-andre)
392
+ - `CalendariumRomanum::SanctoraleFactory` for loading of layered sanctorale calendars
393
+ - `Rank#short_desc` value for unprivileged Sunday and privileged ferial
394
+ - Temporale feast titles and some other strings can be translated (gem `i18n` used)
395
+
396
+ ### Changed
397
+ - [breaking change] `SanctoraleLoader#load` argument order changed
398
+
399
+ ## [0.0.3] 2016-08-27
400
+
401
+ ### Fixed
402
+ - fatal constant reference bug in `Temporale`
403
+ - the specs that covered it
404
+
405
+ ## [0.0.2] 2016-08-27 YANKED
406
+
407
+ release yanked, as it contained a fatal bug in `Temporale`,
408
+ resulting in `NameError` being raised on each initialization
409
+
410
+ ### Fixed
411
+ - all celebrations handled by `Temporale` purged from the sanctorale
412
+ data files. Note that having temporale *solemnities* in sanctorale
413
+ data results in these being duplicated due to the transfer of
414
+ impeded solemnities.
415
+ - rank of Mary Magdalene updated in the sanctorale data files
416
+ - rank of the feast of the Holy Family fixed
417
+
418
+ ### Changed
419
+ - solemnity of Mary, Mother of God (January 1st) is handled by
420
+ `Temporale`
421
+
422
+ ## [0.0.1] 2016-08-20
423
+
424
+ ### Added
425
+ - transfer of impeded solemnities
426
+
427
+ ### Changed
428
+ - sanctorale data must be loaded before `Calendar` initialization
429
+ - `Calendar#sanctorale` is read-only
430
+ - dropped `Calendar.day`, `Sanctorale#validate_date`
431
+ - `SanctoraleLoader` raises exceptions on errors (instead of writing invalid entries to a log and skipping them)