calendarium-romanum 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +47 -0
  5. data/.travis.yml +20 -0
  6. data/.yardopts +3 -0
  7. data/CHANGELOG.md +340 -0
  8. data/Gemfile +25 -0
  9. data/Gemfile.lock +86 -0
  10. data/README.md +515 -0
  11. data/Rakefile +9 -0
  12. data/calendarium-romanum.gemspec +26 -0
  13. data/doc/data_readme.md +2 -0
  14. data/doc/images/class_diagram.png +0 -0
  15. data/doc/images/class_diagram.puml +44 -0
  16. data/doc/yard_readme.rdoc +76 -0
  17. data/lib/calendarium-romanum/sanctorale.rb +29 -3
  18. data/lib/calendarium-romanum/sanctorale_factory.rb +2 -2
  19. data/lib/calendarium-romanum/sanctorale_loader.rb +3 -3
  20. data/lib/calendarium-romanum/version.rb +2 -2
  21. metadata +17 -26
  22. data/spec/abstract_date_spec.rb +0 -70
  23. data/spec/calendar_spec.rb +0 -756
  24. data/spec/celebration_factory_spec.rb +0 -40
  25. data/spec/celebration_spec.rb +0 -67
  26. data/spec/cli_spec.rb +0 -169
  27. data/spec/colour_spec.rb +0 -22
  28. data/spec/data_spec.rb +0 -46
  29. data/spec/date_parser_spec.rb +0 -68
  30. data/spec/date_spec.rb +0 -61
  31. data/spec/dates_spec.rb +0 -73
  32. data/spec/day_spec.rb +0 -151
  33. data/spec/enum_spec.rb +0 -51
  34. data/spec/i18n_spec.rb +0 -68
  35. data/spec/ordinalizer_spec.rb +0 -44
  36. data/spec/perpetual_calendar_spec.rb +0 -125
  37. data/spec/rank_spec.rb +0 -77
  38. data/spec/readme_spec.rb +0 -58
  39. data/spec/sanctorale_factory_spec.rb +0 -146
  40. data/spec/sanctorale_loader_spec.rb +0 -229
  41. data/spec/sanctorale_spec.rb +0 -281
  42. data/spec/season_spec.rb +0 -22
  43. data/spec/spec_helper.rb +0 -46
  44. data/spec/temporale_spec.rb +0 -693
  45. data/spec/year_spec.rb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59b33d4daab8a2f9c7a7da74eec8ef43ce0d25a46ab4534dafa7f3c9d37b0d4c
4
- data.tar.gz: 251aa299e6e32ff7eb839df52bc06538426162947b7292b867fbf2c4b0f80494
3
+ metadata.gz: cee5ab4345ad34eb849b0024a9d3489b29ebe55e8e960abd44ff858d911fdb32
4
+ data.tar.gz: e93e85c1e668d5d57a10e0846bdb0ae37e693ac125b3c9d3b09f3dac3d5d806f
5
5
  SHA512:
6
- metadata.gz: e484244f48349457b63bd7ad473388a145ab4cf0b4282b1e8702f1ef2a120e8ef75364b2873e29685f91ed1aee2478fd136d0be1fc6427e7887096657f0a740b
7
- data.tar.gz: e3bfd741231d609890f94d97882668eb42812c91413791c047e2f4f307c31f1187315d787d50367db011619297f5d4879186651a87b4ecd2652f85963cbdd254
6
+ metadata.gz: c6a4f20a4ccbb564ee51dcb24e7d354b5a9ed9495951b239ca653631fb08c48d2121989279cc3d9e93e0236721545fc62518c09b9ce8cdbd9e40ca89bff7786f
7
+ data.tar.gz: ab95329b242615cb3c81bcb31b171c2ba66ffa3e8e544dc1f33721d2e6e4d6e7e0cee68d429e4ff46ce34a550d6be9af969c5ee919da54f1890141f719900d4a
@@ -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,20 @@
1
+ language: ruby
2
+
3
+ dist: trusty
4
+
5
+ rvm:
6
+ - 2.0.0 # oldest MRI we support
7
+ - 2.5.0 # oldest officially maintained MRI
8
+ - 2.6.5 # ~ latest MRI
9
+ #- jruby-9.1.12.0
10
+
11
+ install: bundle install --jobs=3 --deployment --without development
12
+
13
+ script: bundle exec rake spec_all_locales && bash spec/build/gem_build_test.sh
14
+
15
+ git:
16
+ depth: 3
17
+
18
+ #matrix:
19
+ # allow_failures:
20
+ # - rvm: jruby-9.1.12.0
@@ -0,0 +1,3 @@
1
+ --main doc/yard_readme.rdoc
2
+ --asset doc/images:images
3
+ --file README.md,doc/data_readme.md,data/universal-en.txt
@@ -0,0 +1,340 @@
1
+ # Changelog
2
+
3
+ ## [0.7.1] 2020-06-28
4
+
5
+ ### Fixed
6
+
7
+ - `SanctoraleFactory.load_with_parents` crashing on files without
8
+ metadata
9
+ - `Sanctorale#update` prohibiting application of a particular
10
+ calendar which moves s celebration contained in the calendar being
11
+ updated to an earlier date
12
+ (as exemplified by the bundled calendar of diocese of Litoměřice,
13
+ Czech Republic: on calendarium-romanum 0.7.0
14
+ `CalendariumRomanum::Data['czech-litomerice-cs'].load_with_parents`
15
+ raises `ArgumentError` complaining about non-unique celebration symbols)
16
+ - broken links in YARD documentation (due to files missing in the
17
+ gem archive and basename clashes)
18
+
19
+ ### Changed
20
+
21
+ - if `Sanctorale#update` raises `ArgumentError` complaining about
22
+ non-unique celebration symbols, the updated `Sanctorale` instance
23
+ is left in an inconsistent internal state (more than one occurrence
24
+ of at least one celebration symbol)
25
+ - some additional non-code files (mostly for YARD documentation)
26
+ included in the gem archive
27
+
28
+ ## [0.7.0] 2020-06-21
29
+
30
+ ### Fixed
31
+
32
+ - St. Sebastian was missing in the French version of General Roman Calendar
33
+ - St. of Pietrelcina had incorrect rank in the Czech calendar
34
+ - `Sanctorale#add`: invalid attempt (i.e. an attempt raising an exception)
35
+ to add a second (or n-th) celebration for a given date was causing
36
+ inconsistency in the instance's internal state
37
+ - CLI: `calendariumrom query` wasn't printing celebrations of the highest
38
+ ranks (spotted and fixed by Mike Kasberg @mkasberg)
39
+ - CLI: got rid of a deprecation warning of the `i18n` gem
40
+ concerning `I18n.enforce_available_locales` (by Mike Kasberg @mkasberg)
41
+
42
+ ### Added
43
+
44
+ - data: General Roman Calendar in Spanish + Spanish locale (by Alejandro Ulate @CodingAleCR)
45
+ - data: optional memorials of St. Paul VI, Our Lady of Loreto, St. Faustina Kowalska
46
+ - data: diocese of Prague: optional memorial of Bl. Friedrich Bachstein and companions
47
+ - `Day#weekday_name` (by Ronald Walker @RonWalker22)
48
+ - `Day#to_s`, `Celebration#to_s` (by PJ Pollina @pjpollina)
49
+ - all sanctorale data files are provided with celebration symbols (available as
50
+ `Celebration#symbol` when loaded)
51
+ - `SanctoraleLoader` loads the YAML front matter (if provided),
52
+ to `Sanctorale#metadata` (new property added for this purpose)
53
+ - `SanctoraleFactory` methods merge not only sanctorale contents,
54
+ but also metadata
55
+ - `SanctoraleFactory.load_with_parents`, `Data#load_with_parents`
56
+ to conveniently load sanctorale file hierarchies based on their
57
+ metadata (using key `"extends"`)
58
+ - `calendarium-romanum/cr` defining `::CR` shortcut constant
59
+ - huge improvement of the API documentation
60
+
61
+ ### Changed
62
+
63
+ - data files format: celebration symbols never more start with a colon
64
+ - `Sanctorale#add` throws `ArgumentError` on attempt to add a `Celebration`
65
+ with `#symbol` which is already present in the given sanctorale
66
+ - all `#each` and `#each_*` methods defined in the gem return `Enumerator`
67
+ if called without a block
68
+
69
+ ## [0.6.0] 2018-03-27
70
+
71
+ ### Fixed
72
+
73
+ *Feature release - bugs were only introduced, not fixed :)*
74
+
75
+ ### Added
76
+
77
+ - now handled: *Saturday Memorial of the Blessed Virgin Mary*
78
+ - new memorial of *Mary, Mother of the Church*
79
+ (both handled by `Temporale`)
80
+ - `Temporale#==`, `Sanctorale#==`
81
+ - `Calendar#populates_vespers?` (access value of an option)
82
+ - `Temporale#[]`, `Sanctorale#[]`, `PerpetualCalendar#[]`
83
+ - `Celebration#date` - only set for fixed-date celebrations,
84
+ contains the celebration's *usual* date (as `AbstractDate` instance),
85
+ thus making it possible
86
+ to check if a solemnity was transferred and what would be
87
+ it's normal date if the transfer didn't occur
88
+ - `Celebration#cycle` - returns either `:temporale` or `:sanctorale`
89
+ - cycle predicates:
90
+ `Celebration#temporale?` and `#sanctorale?`
91
+ - `Calendar#each` - yields each day of the liturgical year
92
+ - missing rank predicates:
93
+ `Rank#ferial?`, `Rank#sunday?`,
94
+ `Celebration#ferial?`, `Celebration#sunday?`
95
+ - `Celebration#symbol` can be specified also in sanctorale data files
96
+ (but data files with symbols are not yet available)
97
+ - CLI: `calendariumrom version` prints gem version
98
+
99
+ ### Changed
100
+
101
+ - `Calendar#==` used to compare only class and year, now it compares
102
+ complete internal data
103
+ - `Colour#to_s` and `Season#to_s` now return meaningful values
104
+ like `"#<CalendariumRomanum::Colour red>"`
105
+ and `"#<CalendariumRomanum::Season lent>"`;
106
+ return value of `Rank#to_s` changed to match the common format
107
+ - English temporale feast names edited to match the standard US
108
+ liturgical books (by Mike Kasberg @mkasberg)
109
+ - `examples/` directory removed (README is now the main source
110
+ of copy-pastable examples)
111
+ - file naming unified: `calendarium-romanum/sanctoraleloader.rb`
112
+ renamed to `.../sanctorale_loader.rb`
113
+
114
+ ## [0.5.0] 2017-11-01
115
+
116
+ ### Fixed
117
+
118
+ - transfer of Epiphany to a Sunday was breaking numbering of weeks
119
+ of the Ordinary Time
120
+ - `Day.new()` (call without any arguments) was crashing
121
+ - shebang of `calendariumrom`
122
+ - CLI: `calendariumrom query` was printing internal representation
123
+ of a `Season` object instead of human-readable season name
124
+ (spotted and fixed by Simon Szutkowski @simonszu)
125
+ - MRI 2.x interpreter warnings
126
+
127
+ ### Added
128
+
129
+ - first Vespers of Sundays and solemnities: optional feature
130
+ of the `Calendar` (constructor has new keyword argument
131
+ `vespers: true` to activate it), populates `Day#vespers`
132
+ with a `Celebration` if Vespers should be taken from the following
133
+ day
134
+ - proper handling of collision between *Immaculate heart of Mary*
135
+ 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))
136
+ - `Calendar#[]` - alias of `Calendar#day`, but with additional
137
+ support for a `Range` of `Date`s (returns an `Array` of `Dates`
138
+ when called this way;
139
+ by Brian Gates @bgates)
140
+ - `Celebration#change(title: nil, rank: nil, colour: nil, color: nil, symbol: nil)` -
141
+ returns a copy of the celebration with values of selected
142
+ properties replaced by those passed as arguments
143
+ - `Celebration#symbol` - machine-readable unique identifier
144
+ of a celebration, for now only for solemnities of the temporale
145
+ - CLI: `calendariumrom query` supports printing a day, month or year
146
+ (by Simon Szutkowski @simonszu)
147
+ - CLI: `calendariumrom query` supports apart of bundled calendars
148
+ also custom ones, specified on the command line
149
+ (by Simon Szutkowski @simonszu)
150
+ - CLI: `calendariumrom cmp` correctly handles celebrations
151
+ present in only one of the compared sources
152
+ - data: memorials of saint popes John XXIII and John Paul II added
153
+ to Universal Roman calendar in Latin and to the calendar
154
+ of Czech and Moravian dioceses where they were missing
155
+
156
+ ### Changed
157
+
158
+ - ferials of the final week of Advent have proper titles
159
+ - ordinals in French names of Sundays and ferials have proper
160
+ suffixes
161
+ - `Day.new` signature changed from argument Hash
162
+ to Ruby 2 keyword arguments (no change in argument names
163
+ or count, but previously it wouldn't even notice unexpected
164
+ arguments, now it will crash when encountering them)
165
+ - `SanctoraleLoader` raises always `InvalidDataError`
166
+ (it used to raise `RangeError` on invalid date and
167
+ `RuntimeError` on other kinds of invalid data)
168
+ - `CelebrationFactory` creates also temporale solemnities
169
+ (useful mostly in specs)
170
+ - CLI: `calendariumrom errors` fails gracefully, without backtrace
171
+
172
+ ## [0.4.0] 2017-09-02
173
+
174
+ ### Fixed
175
+
176
+ - `Sanctorale#replace` saving the supplied array as part of
177
+ the internal data structures (and thus allowing their -
178
+ usually unintentional - modification by external code)
179
+ - `Calendar` unintentionally modifying `Sanctorale` internal data
180
+ when handling optional memorials
181
+ - errors in English ordinals greater than 10 ("21th" -> "21st" etc.)
182
+ - `Ranks::FERIAL.memorial?` wrongly returning `true`
183
+ - rank of *All Souls* fixed in all data files
184
+
185
+ ### Added
186
+
187
+ - support for transfer of Epiphany, Ascension and Corpus Christi
188
+ to a Sunday (GNLYC 7)
189
+ - General Roman Calendar in French and French localization
190
+ (by Azarias Boutin @AzariasB)
191
+ - `PerpetualCalendar`
192
+ - `Season#name`, `Colour#name` - localized human-readable names
193
+
194
+ ### Changed
195
+
196
+ - interface for `Temporale` extensions changed completely:
197
+ extensions are self-contained, isolated; their sole responsibility
198
+ is to yield data
199
+ - `Calendar` stripped of the ability to create new instances
200
+ with the same settings:
201
+ - `Calendar#pred` and `#succ` removed
202
+ - `Calendar.new` receives `Temporale` *instance*
203
+ (instead of a temporale factory)
204
+ - `Calendar#day` raises `RangeError` if the day is earlier than
205
+ 1st January 1970 (day of introduction of the implemented calendar
206
+ system)
207
+ - `Temporale::Dates.easter_sunday` doesn't return Julian calendar
208
+ Easter date for years <= 1752 (this library isn't intended to be used
209
+ for years earlier than 1970)
210
+ - `Day#==` and `Calendar#==` test object contents, not identity
211
+ - `Temporale::Dates.body_blood` renamed to `.corpus_christi`
212
+ - `Sanctorale#freeze` freezes also the internal data structures
213
+ - `Calendar#freeze` freezes contained `Temporale` and `Sanctorale`
214
+ - seasons and colours indexed by their symbols, not by index number -
215
+ e.g. `Seasons[:lent]`, `Colours[:violet]`
216
+ - `Calendar#celebrations_for` made private
217
+
218
+ ## [0.3.0] 2017-08-07
219
+
220
+ ### Fixed
221
+
222
+ *This is a feature release - bugs were only introduced, not fixed :)*
223
+
224
+ ### Added
225
+
226
+ - `Celebration#title` is now being generated for all Sundays and
227
+ ferials (was empty)
228
+ - ferials of the Holy Week and of the last week of Advent
229
+ have proper ranks
230
+ - new rank `Ranks::COMMEMORATION` introduced;
231
+ during privileged seasons, suppressed memorials, which
232
+ can be commemorated in the Divine Office (see GILH 239),
233
+ appear in `Day#celebrations` with this rank
234
+ - memorial of the *Immaculate Heart of Mary*
235
+ (although it really belongs to the sanctorale, as a movable feast
236
+ it is implemented in `Temporale`)
237
+ - support for extending `Temporale` with additional feasts
238
+ (`Temporale.with_extensions`, `Temporale.add_celebration`,
239
+ additional optional argument accepted by `Calendar.new` and
240
+ `Calendar.for_date`)
241
+ - `Temporale::Extensions::ChristEternalPriest` - `Temporale` extension
242
+ implementing the feast of *Christ the Eternal Priest*,
243
+ celebrated in some dioceses and religious institutes
244
+ on Thursday after Pentecost
245
+ - `Temporale::Dates` - module containing all the
246
+ temporale-solemnity-date-computing algorithms used in `Temporale`
247
+ - `Temporale#year`
248
+ - sanctorale data files may have YAML front matter
249
+ (a YAML document with metadata placed before the main content)
250
+
251
+ ### Changed
252
+
253
+ - seasons and colours are represented by `Season` and `Colour`
254
+ instances, not by `Symbol`s
255
+ - `Temporale#advent_sunday` and most `#*_advent_sunday`
256
+ removed, only `Temporale#first_advent_sunday` remains
257
+ - `Temporale#weekday_before`, `#weekday_after`, `#octave_of`,
258
+ `#monday_before` etc., `#monday_after` etc. removed
259
+ (all these general date helpers now reside in `Temporale::Dates`)
260
+ - unused attribute `Day#vespers` removed
261
+ - `Temporale#concretize_abstract_date` removed
262
+
263
+ ## [0.2.1] 2017-07-21
264
+
265
+ ### Fixed
266
+
267
+ - `AbstractDate` validity checks refusing 29th February
268
+
269
+ ## [0.2.0] 2017-07-20
270
+
271
+ ### Fixed
272
+
273
+ - numbering of Ordinary Time Sundays after Pentecost
274
+ - `Calendar#day` when an instance of `DateTime` is supplied as argument
275
+ - minor fixes in data files
276
+ - `calendariumrom` executable (broken in recent releases)
277
+
278
+ ### Added
279
+
280
+ - missing *temporale* feast days: Ash Wednesday, Palm Sunday, Ascension,
281
+ - new bundled locales: Latin, Italian, Czech
282
+ - contents of `Seasons`, `Ranks` and `Colours` can be explored via `each` and `all`
283
+ - bundled data files easily accessible through `CalendariumRomanum::Data`
284
+
285
+ ### Changed
286
+
287
+ - `Rank` never more inherits from `Struct`
288
+ - `Seasons`, `Ranks` and `Colours` changed from modules to classes
289
+ - `Sanctorale` raises `ArgumentError` on attempt to load two celebrations of rank other than optional memorial on a single day
290
+ - data file format: rank letter is optional when the rank is specified by number
291
+ - data file format: rank and colour letters are treated case-insensitively
292
+
293
+ ## [0.1.0] 2017-02-25
294
+
295
+ ### Fixed
296
+ - computing date of Holy Family when there is no Sunday between December 25th and January 1st (by Eddy Mulyono @eddymul)
297
+ - missing information for some celebrations added to the General Roman Calendar in English (by Andrea Ferrato @ferra-andre)
298
+
299
+ ### Added
300
+ - General Roman Calendar in Italian (by Andrea Ferrato @ferra-andre)
301
+ - `CalendariumRomanum::SanctoraleFactory` for loading of layered sanctorale calendars
302
+ - `Rank#short_desc` value for unprivileged Sunday and privileged ferial
303
+ - Temporale feast titles and some other strings can be translated (gem `i18n` used)
304
+
305
+ ### Changed
306
+ - [breaking change] `SanctoraleLoader#load` argument order changed
307
+
308
+ ## [0.0.3] 2016-08-27
309
+
310
+ ### Fixed
311
+ - fatal constant reference bug in `Temporale`
312
+ - the specs that covered it
313
+
314
+ ## [0.0.2] 2016-08-27 YANKED
315
+
316
+ release yanked, as it contained a fatal bug in `Temporale`,
317
+ resulting in `NameError` being raised on each initialization
318
+
319
+ ### Fixed
320
+ - all celebrations handled by `Temporale` purged from the sanctorale
321
+ data files. Note that having temporale *solemnities* in sanctorale
322
+ data results in these being duplicated due to the transfer of
323
+ impeded solemnities.
324
+ - rank of Mary Magdalene updated in the sanctorale data files
325
+ - rank of the feast of the Holy Family fixed
326
+
327
+ ### Changed
328
+ - solemnity of Mary, Mother of God (January 1st) is handled by
329
+ `Temporale`
330
+
331
+ ## [0.0.1] 2016-08-20
332
+
333
+ ### Added
334
+ - transfer of impeded solemnities
335
+
336
+ ### Changed
337
+ - sanctorale data must be loaded before `Calendar` initialization
338
+ - `Calendar#sanctorale` is read-only
339
+ - dropped `Calendar.day`, `Sanctorale#validate_date`
340
+ - `SanctoraleLoader` raises exceptions on errors (instead of writing invalid entries to a log and skipping them)
data/Gemfile ADDED
@@ -0,0 +1,25 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'thor'
4
+ gem 'i18n'
5
+ gem 'roman-numerals'
6
+
7
+ group :development, :test do
8
+ gem 'rake'
9
+ end
10
+
11
+ group :development do
12
+ gem 'rubocop'
13
+ gem 'yard'
14
+ end
15
+
16
+ group :test do
17
+ gem 'rspec'
18
+ gem 'aruba'
19
+ # We don't use cucumber, but it is required by aruba
20
+ # and cucumber >= 3.0.0 requires ruby >= 2.1,
21
+ # but we want the tests to pass on ruby 2.0 as earliest target
22
+ gem 'cucumber', '~> 2.99'
23
+ gem 'simplecov'
24
+ gem 'backports', '~> 3.18'
25
+ end