Transfers
+Calendar
: on collision of two solemnities of exactly the same rank (e.g. collision of the solemnities of Sacred Heart of Jesus and Birth of St. John the Baptist in 2022) the sanctorale one was scheduled both on the original date and on the transferred date and the temporale solemnity was not scheduled at all- liturgical colour of All Souls (has incorrectly been white since the beginning of the project, changed to violet)
- data: General Roman Calendar in Portuguese + Portuguese locale (by Tomas Monteiro @tmonteiro2344)
- data: all calendars: new memorial of St. Martha, Mary and Lazarus (replacing memorial of St. Martha alone), new optional memorials of St. Gregory of Narek, St. John De Avila and St. Hildegard of Bingen
SanctoraleWriter.new
: new optional keyword argumentfront_matter
Calendar.new
: new optional keyword argumenttransfers
for supplying custom implementation of the solemnity transfer logicTemporale#provides_celebration?
Sanctorale#provides_celebration?
,#by_symbol
,#merge
- CLI:
calendariumrom id
to list celebration symbols included in specified sanctorale data file - CLI:
calendariumrom merge
to merge two or more sanctorale data files - CLI:
calendariumrom cmp
supports new options--no-rank
,--no-colour
,--no-symbol
for ignoring differences in the specified celebration properties and option--title
to check for differences in title (ignored by default)
Temporale::Dates
methods are defined as instance methods and made available as module methods throughextend self
(so far they were defined and only available as module methods)Temporale::Dates
: helper methodsweekday_before
,weekday_after
,octave_of
and their derivatives extracted to a new moduleTemporale::DateHelper
(but they are still available onTemporale::Dates
, too)- data: repeated spaces removed from the Latin, Italian and Spanish version of the General Roman Calendar (this does not affect behaviour of calendarium-romanum itself, but may affect some other applications possibly processing the data files directly)
Transfers#call
return value: now it contains not only solemnities transferred (and the destination dates), but also the ones winning the original date, unless they are of the two highest ranksTransfer#call
: in case of collision of two solemnities of exactly the same rank temporale always wins over sanctoraleSanctorale#dup
now properly creates for the clone it's own internal data structures independent of the original's ones- CLI:
calendariumrom cmp
exits with status 1 if any differences are found - CLI:
calendariumrom cmp
prints celebration symbol if available - runtime dependencies loosenned: we support
thor
already from version 0.15 andi18n
from version 0.7
- several fixes to the solemnity transfer rules:
- the algorithm was searching for free days only forwards, but liturgical law assumes closest free day, even earlier
- check that two solemnities are not transferred to the same date, overwriting one another
- the special rule on Annunciation from Normae universales 60 implemented
- fixed bug in computation of the date of Baptism of the Lord if Epiphany is transferred to Sunday
- fixed bug in
Sanctorale#update
preventing more than oneCelebration
with nil#symbol
in a singleSanctorale
CelebrationFactory
was settingCelebration#date
(if not specified) to false instead of expected nil (thus breaking type promises)- data:
czech-cs.txt
: typo fixed in the feast symbol of St. Bartholomew; spelling of several feast titles corrected - data:
czech-cs.txt
: proof-read against official sources, feasts of "BVM, Queen of Angels" and St. Teresa of Calcutta deleted (they are not on the calendar of Czech and Moravian dioceses, incorrect information was copied from Czech Wikipedia at the time of the data file's creation) - data: all: Dedication of the Lateran Basilica is feast of the Lord (had incorrect rank of a normal feast so far)
- data:
universal-en.txt
: several inaccuracies concerning liturgical colour fixed
liturgical_law/
: all documents of liturgical legislation containing the liturgical calendar rules (original Latin text) in Markdown format, with Ruby code examples proving that the rules are implemented correctly; the code examples are all executed as part of the gem's test suiteSanctoraleWriter
(contributed by Mike Kasberg @mkasberg)PerpetualCalendar.new
accepts keyword argumentvespers
(cf.Calendar.new
argument of the same name)Rank#optional_memorial?
,#obligatory_memorial?
AbstractDate#in_year
- more readable alias of#concretize
Rank#succ
- (among other things) allows constructingRange
ofRank
sCalendar#transferred
Temporale::Extensions::DedicationBeforeAllSaints
defining the solemnity of Aniversary of Dedication for churches celebrating it on the movable date on the last October SundayTemporale::Extensions.all
- method listing all Temporale extensions defined by the gemTemporale#each_day
Temporale::EasterTable
- class handling a simple plaintext format for tables of Easter datesCelebration.new
: new argumentsunday
SanctoraleLoader
: proper solemnities/feasts/memorials can be specified also by adding suffixp
to the rank code (instead of rank priority number used so far), similarly suffixl
can be used to specify proper rank for feasts of the Lord- data:
universal-1969-la.txt
- historical first version of the General Roman Calendar - module
Constants
containing all the constants fromColours
,Seasons
andRanks
- the gemspec now declares requirement of Ruby >= 2.0
Calendar.new
can be called also without theyear
argument ifTemporale
is provided (thus callingCalendar.new(temporale, sanctorale)
instead ofCalendar.new(year, sanctorale, temporale)
)- Easter Triduum is now dealt with as a separate
Season
, because Normae universales 18-21 clearly set the Triduum apart from both Lent and Eastertide Temporale::Extensions::ChristEternalPriest
specifies celebration symbol (so far it was nil)Celebration.new
supports keyword arguments (as an alternative to or even in combination with the positional ones)Temporale
: business logic guaranteeing thatCelebration#sunday?
is true also for privileged Sundays (Advent, Lent)calendariumrom
executable: all subcommands dealing with sanctorale data files accept special file name-
and load sanctorale data from stdin in that caseEnum
,Colours
,Seasons
,Ranks
andData
changed from classes to modules
Improvements not affecting the gem's public interface (and thus not listed in the changelog) contributed by
- Ihor Voloshyn @Snick555
- Dmitry Zhmurko @zhmurko
SanctoraleFactory.load_with_parents
crashing on files without metadataSanctorale#update
prohibiting application of a particular calendar which moves s celebration contained in the calendar being updated to an earlier date (as exemplified by the bundled calendar of diocese of Litoměřice, Czech Republic: on calendarium-romanum 0.7.0CalendariumRomanum::Data['czech-litomerice-cs'].load_with_parents
raisesArgumentError
complaining about non-unique celebration symbols)- broken links in YARD documentation (due to files missing in the gem archive and basename clashes)
- if
Sanctorale#update
raisesArgumentError
complaining about non-unique celebration symbols, the updatedSanctorale
instance is left in an inconsistent internal state (more than one occurrence of at least one celebration symbol) - some additional non-code files (mostly for YARD documentation) included in the gem archive
- St. Sebastian was missing in the French version of General Roman Calendar
- St. of Pietrelcina had incorrect rank in the Czech calendar
Sanctorale#add
: invalid attempt (i.e. an attempt raising an exception) to add a second (or n-th) celebration for a given date was causing inconsistency in the instance's internal state- CLI:
calendariumrom query
wasn't printing celebrations of the highest ranks (spotted and fixed by Mike Kasberg @mkasberg) - CLI: got rid of a deprecation warning of the
i18n
gem concerningI18n.enforce_available_locales
(by Mike Kasberg @mkasberg)
- data: General Roman Calendar in Spanish + Spanish locale (by Alejandro Ulate @CodingAleCR)
- data: optional memorials of St. Paul VI, Our Lady of Loreto, St. Faustina Kowalska
- data: diocese of Prague: optional memorial of Bl. Friedrich Bachstein and companions
Day#weekday_name
(by Ronald Walker @RonWalker22)Day#to_s
,Celebration#to_s
(by PJ Pollina @pjpollina)- all sanctorale data files are provided with celebration symbols (available as
Celebration#symbol
when loaded) SanctoraleLoader
loads the YAML front matter (if provided), toSanctorale#metadata
(new property added for this purpose)SanctoraleFactory
methods merge not only sanctorale contents, but also metadataSanctoraleFactory.load_with_parents
,Data#load_with_parents
to conveniently load sanctorale file hierarchies based on their metadata (using key"extends"
)calendarium-romanum/cr
defining::CR
shortcut constant- huge improvement of the API documentation
- data files format: celebration symbols never more start with a colon
Sanctorale#add
throwsArgumentError
on attempt to add aCelebration
with#symbol
which is already present in the given sanctorale- all
#each
and#each_*
methods defined in the gem returnEnumerator
if called without a block
Feature release - bugs were only introduced, not fixed :)
- now handled: Saturday Memorial of the Blessed Virgin Mary
- new memorial of Mary, Mother of the Church
(both handled by
Temporale
) Temporale#==
,Sanctorale#==
Calendar#populates_vespers?
(access value of an option)Temporale#[]
,Sanctorale#[]
,PerpetualCalendar#[]
Celebration#date
- only set for fixed-date celebrations, contains the celebration's usual date (asAbstractDate
instance), thus making it possible to check if a solemnity was transferred and what would be it's normal date if the transfer didn't occurCelebration#cycle
- returns either:temporale
or:sanctorale
- cycle predicates:
Celebration#temporale?
and#sanctorale?
Calendar#each
- yields each day of the liturgical year- missing rank predicates:
Rank#ferial?
,Rank#sunday?
,Celebration#ferial?
,Celebration#sunday?
Celebration#symbol
can be specified also in sanctorale data files (but data files with symbols are not yet available)- CLI:
calendariumrom version
prints gem version
Calendar#==
used to compare only class and year, now it compares complete internal dataColour#to_s
andSeason#to_s
now return meaningful values like"#<CalendariumRomanum::Colour red>"
and"#<CalendariumRomanum::Season lent>"
; return value ofRank#to_s
changed to match the common format- English temporale feast names edited to match the standard US liturgical books (by Mike Kasberg @mkasberg)
examples/
directory removed (README is now the main source of copy-pastable examples)- file naming unified:
calendarium-romanum/sanctoraleloader.rb
renamed to.../sanctorale_loader.rb
- transfer of Epiphany to a Sunday was breaking numbering of weeks of the Ordinary Time
Day.new()
(call without any arguments) was crashing- shebang of
calendariumrom
- CLI:
calendariumrom query
was printing internal representation of aSeason
object instead of human-readable season name (spotted and fixed by Simon Szutkowski @simonszu) - MRI 2.x interpreter warnings
- first Vespers of Sundays and solemnities: optional feature
of the
Calendar
(constructor has new keyword argumentvespers: true
to activate it), populatesDay#vespers
with aCelebration
if Vespers should be taken from the following day - proper handling of collision between Immaculate heart of Mary and another obligatory memorial (CDW Prot. n. 2671/98/L)
Calendar#[]
- alias ofCalendar#day
, but with additional support for aRange
ofDate
s (returns anArray
ofDates
when called this way; by Brian Gates @bgates)Celebration#change(title: nil, rank: nil, colour: nil, color: nil, symbol: nil)
- returns a copy of the celebration with values of selected properties replaced by those passed as argumentsCelebration#symbol
- machine-readable unique identifier of a celebration, for now only for solemnities of the temporale- CLI:
calendariumrom query
supports printing a day, month or year (by Simon Szutkowski @simonszu) - CLI:
calendariumrom query
supports apart of bundled calendars also custom ones, specified on the command line (by Simon Szutkowski @simonszu) - CLI:
calendariumrom cmp
correctly handles celebrations present in only one of the compared sources - data: memorials of saint popes John XXIII and John Paul II added to Universal Roman calendar in Latin and to the calendar of Czech and Moravian dioceses where they were missing
- ferials of the final week of Advent have proper titles
- ordinals in French names of Sundays and ferials have proper suffixes
Day.new
signature changed from argument Hash to Ruby 2 keyword arguments (no change in argument names or count, but previously it wouldn't even notice unexpected arguments, now it will crash when encountering them)SanctoraleLoader
raises alwaysInvalidDataError
(it used to raiseRangeError
on invalid date andRuntimeError
on other kinds of invalid data)CelebrationFactory
creates also temporale solemnities (useful mostly in specs)- CLI:
calendariumrom errors
fails gracefully, without backtrace
Sanctorale#replace
saving the supplied array as part of the internal data structures (and thus allowing their - usually unintentional - modification by external code)Calendar
unintentionally modifyingSanctorale
internal data when handling optional memorials- errors in English ordinals greater than 10 ("21th" -> "21st" etc.)
Ranks::FERIAL.memorial?
wrongly returningtrue
- rank of All Souls fixed in all data files
- support for transfer of Epiphany, Ascension and Corpus Christi to a Sunday (GNLYC 7)
- General Roman Calendar in French and French localization (by Azarias Boutin @AzariasB)
PerpetualCalendar
Season#name
,Colour#name
- localized human-readable names
- interface for
Temporale
extensions changed completely: extensions are self-contained, isolated; their sole responsibility is to yield data Calendar
stripped of the ability to create new instances with the same settings:Calendar#pred
and#succ
removedCalendar.new
receivesTemporale
instance (instead of a temporale factory)
Calendar#day
raisesRangeError
if the day is earlier than 1st January 1970 (day of introduction of the implemented calendar system)Temporale::Dates.easter_sunday
doesn't return Julian calendar Easter date for years <= 1752 (this library isn't intended to be used for years earlier than 1970)Day#==
andCalendar#==
test object contents, not identityTemporale::Dates.body_blood
renamed to.corpus_christi
Sanctorale#freeze
freezes also the internal data structuresCalendar#freeze
freezes containedTemporale
andSanctorale
- seasons and colours indexed by their symbols, not by index number -
e.g.
Seasons[:lent]
,Colours[:violet]
Calendar#celebrations_for
made private
This is a feature release - bugs were only introduced, not fixed :)
Celebration#title
is now being generated for all Sundays and ferials (was empty)- ferials of the Holy Week and of the last week of Advent have proper ranks
- new rank
Ranks::COMMEMORATION
introduced; during privileged seasons, suppressed memorials, which can be commemorated in the Divine Office (see GILH 239), appear inDay#celebrations
with this rank - memorial of the Immaculate Heart of Mary
(although it really belongs to the sanctorale, as a movable feast
it is implemented in
Temporale
) - support for extending
Temporale
with additional feasts (Temporale.with_extensions
,Temporale.add_celebration
, additional optional argument accepted byCalendar.new
andCalendar.for_date
) Temporale::Extensions::ChristEternalPriest
-Temporale
extension implementing the feast of Christ the Eternal Priest, celebrated in some dioceses and religious institutes on Thursday after PentecostTemporale::Dates
- module containing all the temporale-solemnity-date-computing algorithms used inTemporale
Temporale#year
- sanctorale data files may have YAML front matter (a YAML document with metadata placed before the main content)
- seasons and colours are represented by
Season
andColour
instances, not bySymbol
s Temporale#advent_sunday
and most#*_advent_sunday
removed, onlyTemporale#first_advent_sunday
remainsTemporale#weekday_before
,#weekday_after
,#octave_of
,#monday_before
etc.,#monday_after
etc. removed (all these general date helpers now reside inTemporale::Dates
)- unused attribute
Day#vespers
removed Temporale#concretize_abstract_date
removed
AbstractDate
validity checks refusing 29th February
- numbering of Ordinary Time Sundays after Pentecost
Calendar#day
when an instance ofDateTime
is supplied as argument- minor fixes in data files
calendariumrom
executable (broken in recent releases)
- missing temporale feast days: Ash Wednesday, Palm Sunday, Ascension,
- new bundled locales: Latin, Italian, Czech
- contents of
Seasons
,Ranks
andColours
can be explored viaeach
andall
- bundled data files easily accessible through
CalendariumRomanum::Data
Rank
never more inherits fromStruct
Seasons
,Ranks
andColours
changed from modules to classesSanctorale
raisesArgumentError
on attempt to load two celebrations of rank other than optional memorial on a single day- data file format: rank letter is optional when the rank is specified by number
- data file format: rank and colour letters are treated case-insensitively
- computing date of Holy Family when there is no Sunday between December 25th and January 1st (by Eddy Mulyono @eddymul)
- missing information for some celebrations added to the General Roman Calendar in English (by Andrea Ferrato @ferra-andre)
- General Roman Calendar in Italian (by Andrea Ferrato @ferra-andre)
CalendariumRomanum::SanctoraleFactory
for loading of layered sanctorale calendarsRank#short_desc
value for unprivileged Sunday and privileged ferial- Temporale feast titles and some other strings can be translated (gem
i18n
used)
- [breaking change]
SanctoraleLoader#load
argument order changed
- fatal constant reference bug in
Temporale
- the specs that covered it
release yanked, as it contained a fatal bug in Temporale
,
resulting in NameError
being raised on each initialization
- all celebrations handled by
Temporale
purged from the sanctorale data files. Note that having temporale solemnities in sanctorale data results in these being duplicated due to the transfer of impeded solemnities. - rank of Mary Magdalene updated in the sanctorale data files
- rank of the feast of the Holy Family fixed
- solemnity of Mary, Mother of God (January 1st) is handled by
Temporale
- transfer of impeded solemnities
- sanctorale data must be loaded before
Calendar
initialization Calendar#sanctorale
is read-only- dropped
Calendar.day
,Sanctorale#validate_date
SanctoraleLoader
raises exceptions on errors (instead of writing invalid entries to a log and skipping them)