calendarium-romanum 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.rubocop.yml +9 -6
  4. data/.travis.yml +2 -1
  5. data/Appraisals +67 -0
  6. data/CHANGELOG.md +57 -0
  7. data/Gemfile +1 -0
  8. data/Gemfile.lock +21 -12
  9. data/README.md +13 -10
  10. data/Rakefile +13 -2
  11. data/calendarium-romanum.gemspec +2 -2
  12. data/config/locales/pt.yml +94 -0
  13. data/data/czech-cs.txt +5 -2
  14. data/data/universal-1969-la.txt +1 -1
  15. data/data/universal-en.txt +5 -2
  16. data/data/universal-es.txt +7 -4
  17. data/data/universal-fr.txt +5 -2
  18. data/data/universal-it.txt +6 -3
  19. data/data/universal-la.txt +102 -99
  20. data/data/universal-pt.txt +248 -0
  21. data/lib/calendarium-romanum.rb +3 -0
  22. data/lib/calendarium-romanum/calendar.rb +13 -11
  23. data/lib/calendarium-romanum/cli.rb +32 -3
  24. data/lib/calendarium-romanum/cli/comparator.rb +22 -2
  25. data/lib/calendarium-romanum/data.rb +2 -0
  26. data/lib/calendarium-romanum/enum.rb +2 -4
  27. data/lib/calendarium-romanum/enums.rb +5 -1
  28. data/lib/calendarium-romanum/sanctorale.rb +51 -1
  29. data/lib/calendarium-romanum/sanctorale_factory.rb +2 -2
  30. data/lib/calendarium-romanum/sanctorale_writer.rb +6 -1
  31. data/lib/calendarium-romanum/temporale.rb +50 -21
  32. data/lib/calendarium-romanum/temporale/date_helper.rb +85 -0
  33. data/lib/calendarium-romanum/temporale/dates.rb +36 -111
  34. data/lib/calendarium-romanum/temporale/extensions/dedication_before_all_saints.rb +1 -1
  35. data/lib/calendarium-romanum/transfers.rb +29 -14
  36. data/lib/calendarium-romanum/version.rb +2 -2
  37. data/liturgical_law/2020_dubia_de_calendario_2022.md +100 -0
  38. metadata +15 -10
@@ -0,0 +1,248 @@
1
+ ---
2
+ title: Calendário Romano Geral
3
+ locale: pt
4
+ # source: https://pt.wikipedia.org/wiki/Calendário_Romano_Geral,
5
+ # Roman Missal (Portuguese edition),
6
+ # and https://www.liturgia.pt/
7
+ ---
8
+
9
+ = 1
10
+ 2 m basil_gregory : Ss. Basílio Magno e Gregório de Nazianzo, bispos e doutores da Igreja
11
+ 3 name_jesus : Santíssimo Nome de Jesus
12
+ 7 raymond : S. Raimundo de Peñafort. presbítero
13
+ 13 hilary : S. Hilário, bispo e doutor da Igreja
14
+ 17 m anthony_of_egypt : S. Antão, abade
15
+ 20 R fabian : S. Fabião, papa e mártir
16
+ 20 R sebastian : S. Sebastião, mártir
17
+ 21 m R agnes : S. Inês, virgem e mártir
18
+ 22 R vincent_deacon : S. Vicente, diácono e mártir
19
+ 24 m francis_de_sales : S. Francisco de Sales, bispo e doutor da Igreja
20
+ 25 f paul_conversion : Conversão de S. Paulo, apóstolo
21
+ 26 m timothy_titus : Ss. Timóteo e Tito, bispos
22
+ 27 merici : S. Angela Merici, virgem
23
+ 28 m aquinas : S. Tomás de Aquino, presbítero e doutor da Igreja
24
+ 31 m bosco : S. João Bosco, presbítero
25
+
26
+ = 2
27
+ 2 f2.5 presentation_of_lord : Apresentação do Senhor
28
+ 3 R blase : S. Brás, bispo e mártir
29
+ 3 ansgar : S. Ansgário, bispo
30
+ 5 m R agatha : S. Águeda (ou Ágata), virgem e mártir
31
+ 6 m R paul_miki : Ss. Paulo Miki e companheiros, mártires
32
+ 8 jerome_emiliani : S. Jerónimo Emiliano, presbítero
33
+ 8 josephine_bakhita : S. Josefina Bakhita, virgem
34
+ 10 m scholastica : S. Escolástica, virgem
35
+ 11 bvm_lourdes : Nossa Senhora de Lourdes
36
+ 14 m cyril_methodius : Ss. Cirilo, monge, e Metódio, bispo
37
+ 17 servite_founders : Ss. Sete Fundadores da Ordem dos Servitas
38
+ 21 peter_damian : S. Pedro Damião, bispo e doutor da Igreja
39
+ 22 f chair_of_peter : Cátedra de S. Pedro, apóstolo
40
+ 23 m R polycarp : S. Policarpo, bispo e mártir
41
+ 27 gregory_of_narek : S. Gregório de Narek, abade e doutor da Igreja
42
+
43
+ = 3
44
+ 4 casimir : S. Casimiro
45
+ 7 m R perpetua_felicity : Santas Perpétua e Felicidade, mártires
46
+ 8 john_of_god : S. João de Deus, religiosos
47
+ 9 frances_of_rome : S. Francisca Romana, religiosa
48
+ 17 patrick : S. Patrício, bispo
49
+ 18 cyril_of_jerusalem : S. Cirilo de Jerusalém, bispo e doutor da Igreja
50
+ 19 s joseph : S. José, esposo da Virgem S. Maria
51
+ 23 turibius : S. Turíbio de Mongrovejo, bispo
52
+ 25 s annunciation : Anunciação do Senhor
53
+
54
+ = 4
55
+ 2 francis_of_paola : S. Francisco de Paula, eremita
56
+ 4 isidore : S. Isidoro, bispo e doutor da Igreja
57
+ 5 vincent_ferrer : S. Vicente Ferrer, presbítero
58
+ 7 m de_la_salle : S. João Batista de La Salle, presbítero
59
+ 11 m R stanislaus : S. Estanislau, bispo e mártir
60
+ 13 R martin_i : S. Martinho I, papa e mártir
61
+ 21 anselm : S. Anselmo, bispo e doutor da Igreja
62
+ 23 R george : S. Jorge, mártir
63
+ 23 R adalbert : S. Adalberto de Praga, bispo e mártir
64
+ 24 R fidelis : S. Fiel de Sigmaringa, presbítero e mártir
65
+ 25 f R mark : S. Marcos, evangelista
66
+ 28 R peter_chanel : S. Pedro Chanel, presbítero e mártir
67
+ 28 de_montfort : S. Luís Maria Grignion de Montfort, presbítero
68
+ 29 m catherine_of_siena : S. Catarina de Siena, virgem e doutora da Igreja
69
+ 30 pius_v : S. Pio V, papa
70
+
71
+ = 5
72
+ 1 joseph_worker : S. José operário
73
+ 2 m athanasius : S. Atanásio, bispo e doutor da Igreja
74
+ 3 f R philip_james : Ss. Filipe e Tiago, apóstolos
75
+ 10 john_de_avila : S. João de Ávila, presbítero e doutor da Igreja
76
+ 12 R nereus_achilleus : Ss. Nereu e Aquileu, mártires
77
+ 12 R pancras : S. Pancrácio, mártir
78
+ 13 bvm_fatima : Nossa Senhora de Fátima
79
+ 14 f R matthias : S. Matias, apóstolo
80
+ 18 R john_i : S. João I, papa e mártir
81
+ 20 bernardine : S. Bernardino de Sena, presbítero
82
+ 21 R magallanes : Ss. Cristóvão de Magalhães e companheiros, mártires
83
+ 22 rita : S. Rita de Cássia, religiosa
84
+ 25 bede_venerable : S. Beda Venerável, presbítero e doutor da Igreja
85
+ 25 gregory_vii : S. Gregório VII, papa
86
+ 25 de_pazzi : S. Maria Madalena de Pazzi, virgem
87
+ 26 m neri : S. Filipe Néri, presbítero
88
+ 27 augustine_of_canterbury : S. Agostinho de Cantuária, bispo
89
+ 29 paul_vi : Sãp Paulo VI, papa
90
+ 31 f visitation : Visitação da Virgem S. Maria
91
+
92
+ = 6
93
+ 1 m R justin : S. Justino, mártir
94
+ 2 R marcellinus_peter : Ss. Marcelino e Pedro, mártires
95
+ 3 m R ugandan_martyrs : Ss. Carlos Lwanga e companheiros, mártires
96
+ 5 m R boniface : S. Bonifácio, bispo e mártir
97
+ 6 norbert : S. Norberto, bispo
98
+ 9 ephrem : S. Efrém, diácono e doutor da Igreja
99
+ 11 m R barnabas : S. Barnabé, apóstolo
100
+ 13 m anthony_of_padua : S. António de Lisboa, presbítero e doutor da Igreja
101
+ 19 romuald : S. Romualdo, abade
102
+ 21 m aloysius : S. Luís de Gonzaga, religioso
103
+ 22 paulinus : S. Paulino de Nola, bispo
104
+ 22 R fisher_more : Ss. João Fisher, bispo e mártir, e Tomás Moro, mártir
105
+ 24 s baptist_birth : Nascimento de João Batista
106
+ 27 cyril_of_alexandria : S. Cirilo de Alexandria, bispo e doutor da Igreja
107
+ 28 m R irenaeus : S. Ireneu, bispo e mártir
108
+ 29 s R peter_paul : Ss. Pedro e Paulo, apóstolos
109
+ 30 R first_martyrs_of_rome : Primeiros Ss. Mártires da Igreja de Roma
110
+
111
+ = 7
112
+ 3 f R thomas_apostle : S. Tomé, apóstolo
113
+ 4 elizabeth_of_portugal : S. Isabel de Portugal
114
+ 5 anthony_zaccaria : S. António Maria Zacarias, presbítero
115
+ 6 R goretti : S. Maria Goretti, virgem e mártir
116
+ 9 R chinese_martyrs : Ss. Agostinho Zhao Rong e companheiros, mártires
117
+ 11 m benedict : S. Bento, abade
118
+ 13 henry : S. Henrique
119
+ 14 camillus_de_lellis : S. Camilo de Lelis, presbítero
120
+ 15 m bonaventure : S. Boaventura, bispo e doutor da Igreja
121
+ 16 bvm_mount_carmel : Virgem S. Maria do Monte Carmelo
122
+ 20 R apollinaris : S. Apolinário, bispo e mártir
123
+ 21 lawrence_of_brindisi : S. Lourenço de Brindes, presbítero e doutor da Igreja
124
+ 22 f mary_magdalene : S. Maria Madalena
125
+ 23 birgitta : S. Brígida, religiosa
126
+ 24 sharbel : S. Sarbélio Makhluf, presbítero
127
+ 25 f R james : S. Tiago, Apóstolo
128
+ 26 m joachim_anne : S. Joaquim e S. Ana, pais da Virgem S. Maria
129
+ 29 m martha_mary_lazarus : SS. Marta, Maria e Lázaro
130
+ 30 peter_chrysologus : S. Pedro Crisólogo, bispo e doutor da Igreja
131
+ 31 m ignatius_of_loyola : S. Inácio de Loiola, presbítero
132
+
133
+ = 8
134
+ 1 m alphonsus : S. Afonso Maria de Ligório, bispo e doutor da Igreja
135
+ 2 eusebius : S. Eusébio de Vercelas, bispo
136
+ 2 eymard : S. Pedro Juliano Eymard, presbítero
137
+ 4 m vianney : S. João Maria Vianney, presbítero
138
+ 5 mary_major : Dedicação da Basílica de Santa Maria Maior
139
+ 6 f2.5 transfiguration : Transfiguração do Senhor
140
+ 7 R sixtus_ii : SS. Sisto II, papa, e Companheiros, mártires
141
+ 7 cajetan : S. Caetano, presbítero
142
+ 8 m dominic : S. Domingos, presbítero, Fundador da Ordem dos Pregadores
143
+ 9 R stein : S. Teresa Benedita da Cruz, virgem e mártir
144
+ 10 f R lawrence : S. Lourenço, diácono e mártir
145
+ 11 m clare : S. Clara, virgem
146
+ 12 de_chantal : S. Joana Francisca de Chantal, religiosa
147
+ 13 R pontian_hippolytus : S. Ponciano, papa, e S. Hipólito, presbítero, mártires
148
+ 14 m R kolbe : S. Maximiliano Maria Kolbe, presbítero e mártir
149
+ 15 s assumption : ASSUNÇÃO DA VIRGEM SANTA MARIA
150
+ 16 stephen_hungary : S. Estêvão da Hungria
151
+ 19 eudes : S. João Eudes, presbítero
152
+ 20 m bernard : S. Bernardo, abade e doutor da Igreja
153
+ 21 m pius_x : S. Pi0 X, papa
154
+ 22 m bvm_queenship : Virgem Santa Maria, Rainha
155
+ 23 rose_lima : S. Rosa de Lima, virgem
156
+ 24 f R bartholomew : S. Bartolomeu, Apóstolo
157
+ 25 louis : S. Luís de França
158
+ 25 joseph_calasanz : S. José de Calasanz, presbítero
159
+ 27 m monica : S. Mónica
160
+ 28 m augustine : S. Agostinho, bispo e doutor da Igreja
161
+ 29 m R baptist_beheading : Martírio de S. João Baptista
162
+
163
+ = 9
164
+ 3 m gregory_great : S. Gregório Magno, papa e doutor da Igreja
165
+ 8 f bvm_birth : Natividade da Virgem Santa Maria
166
+ 9 claver : S. Pedro Claver, presbítero
167
+ 12 bvm_name : Santíssimo Nome de Maria
168
+ 13 m john_chrysostom : S. João Crisóstomo, bispo e doutor da Igreja
169
+ 14 f2.5 R cross : Exaltação da Santa Cruz
170
+ 15 m bvm_sorrows : Virgem Santa Maria das Dores
171
+ 16 m R cornelius_cyprian : S. Cornélio, papa, e S. Cipriano, bispo, mártires
172
+ 17 bellarmine : S. Roberto Belarmino, bispo e doutor da Igreja
173
+ 17 hildegard : S. Hildegarda de Bingen, virgem e doutora da Igreja
174
+ 19 R januarius : S. Januário, bispo e mártir
175
+ 20 m R korean_martyrs : SS. André Kim Taegon, presbítero, Paulo Chang Hasang, e Companheiros, mártires
176
+ 21 f R matthew : S. Mateus, Apóstolo e Evangelista
177
+ 23 m padre_pio : S. Pio de Pietrelcina, presbítero
178
+ 26 R cosmas_damian : S. Cosme e S. Damião, mártires
179
+ 27 m vincent_de_paul : S. Vicente de Paulo, presbítero
180
+ 28 R wenceslaus : S. Venceslau, mártir
181
+ 28 R ruiz : SS. Lourenço Ruiz e Companheiros, mártires
182
+ 29 f archangels : S. Miguel, S. Gabriel e S. Rafael, Arcanjos
183
+ 30 m jerome : S. Jerónimo, presbítero e doutor da Igreja
184
+
185
+ = 10
186
+ 1 m therese_lisieux : S. Teresa do Menino Jesus, virgem e doutora da Igreja
187
+ 2 m guardian_angels : Santos Anjos da Guarda
188
+ 4 m francis_assisi : S. Francisco de Assis
189
+ 5 faustina_kowalska : Santa Faustina Kowalska
190
+ 6 bruno : S. Bruno, presbítero
191
+ 7 m bvm_rosary : Virgem Santa Maria do Rosário
192
+ 9 R denis : SS. Dionísio, bispo, e Companheiros, mártires
193
+ 9 leonardi : S. João Leonardo, presbítero
194
+ 11 john_xxiii : S. João XXIII, papa
195
+ 14 R callistus_i : S. Calisto I, papa e mártir
196
+ 15 m teresa_avila : S. Teresa de Jesus, virgem e doutora da Igreja
197
+ 16 hedwig : S. Hedwiges, religiosa
198
+ 16 alacoque : S. Margarida Maria Alacoque, virgem
199
+ 17 m R ignatius_of_antioch : S. Inácio de Antioquia, bispo e mártir
200
+ 18 f R luke : S. Lucas, Evangelista
201
+ 19 R brebeuf_jogues : SS. João de Brébeuf e Isaac Jogues, presbíteros, e Companheiros, mártires
202
+ 19 paul_of_cross : S. Paulo da Cruz, presbítero
203
+ 22 john_paul_ii : S. João Paulo II, papa
204
+ 23 john_capistrano : S. João de Capistrano, presbítero
205
+ 24 claret : S. António Maria Claret, bispo
206
+ 28 f R simon_jude : S. Simão e S. Judas, Apóstolos
207
+
208
+ = 11
209
+ 1 s all_saints : TODOS OS SANTOS
210
+ 2 s V all_souls : Comemoração de Todos os Fiéis Defuntos
211
+ 3 de_porres : S. Martinho de Porres, religioso
212
+ 4 m borromeo : S. Carlos Borromeu, bispo
213
+ 9 f2.5 lateran_basilica : Dedicação da Basílica de Latrão
214
+ 10 m leo_great : S. Leão Magno, papa e doutor da Igreja
215
+ 11 m martin : S. Martinho de Tours, bispo
216
+ 12 m R josaphat : S. Josafat, bispo e mártir
217
+ 15 albert : S. Alberto Magno, bispo e doutor da Igreja
218
+ 16 margaret_of_scotland : S. Margarida da Escócia
219
+ 16 gertrude : S. Gertrudes, virgem
220
+ 17 m elizabeth_of_hungary : S. Isabel da Hungria, religiosa
221
+ 18 peter_paul_basilicas : Dedicação das Basílicas de S. Pedro e de S. Paulo, Apóstolos
222
+ 21 m bvm_presentation : Apresentação de Nossa Senhora
223
+ 22 m R cecilia : S. Cecília, virgem e mártir
224
+ 23 R clement_i : S. Clemente I, papa e mártir
225
+ 23 columban : S. Columbano, abade
226
+ 24 m R vietnamese_martyrs : SS. André Dung-Lac, presbítero, e Companheiros, mártires
227
+ 25 R catherine_of_alexandria : S. Catarina Alexandrina, virgem e mártir
228
+ 30 f R andrew : S. André, Apóstolo
229
+
230
+ = 12
231
+ 3 m francis_xavier : S. Francisco Xavier, presbítero, Padroeiro das Missões
232
+ 4 john_damascene : S. João Damasceno, presbítero e doutor da Igreja
233
+ 6 nicholas : S. Nicolau, bispo
234
+ 7 m ambrose : S. Ambrósio, bispo e doutor da Igreja
235
+ 8 s bvm_immaculate : IMACULADA CONCEIÇÃO DA VIRGEM SANTA MARIA
236
+ 9 juan_diego : S. João Diogo
237
+ 10 bvm_loreto : Virgem Santa Maria de Loreto
238
+ 11 damasus_i : S. Dâmaso I, papa
239
+ 12 bvm_guadalupe : Nossa Senhora de Guadalupe
240
+ 13 m R lucy : S. Luzia, virgem e mártir
241
+ 14 m john_of_cross : S. João da Cruz, presbítero e doutor da Igreja
242
+ 21 canisius : S. Pedro Canísio, presbítero e doutor da Igreja
243
+ 23 john_of_kanty : S. João de Quenty (Câncio), presbítero
244
+ 26 f R stephen : S. Estêvão, Primeiro Mártir
245
+ 27 f john_evangelist : S. João, Apóstolo e Evangelista
246
+ 28 f R innocents : Santos Inocentes, mártires
247
+ 29 R becket : S. Tomás Becket (de Cantuária), bispo e mártir
248
+ 31 sylvester_i : S. Silvestre I, papa
@@ -4,6 +4,8 @@
4
4
  module CalendariumRomanum
5
5
  end
6
6
 
7
+ require 'date'
8
+
7
9
  %w(
8
10
  version
9
11
  i18n_setup
@@ -17,6 +19,7 @@ end
17
19
  day
18
20
  calendar
19
21
  perpetual_calendar
22
+ temporale/date_helper
20
23
  temporale/dates
21
24
  temporale/celebration_factory
22
25
  temporale/easter_table
@@ -1,4 +1,3 @@
1
- require 'date'
2
1
  require 'forwardable'
3
2
 
4
3
  module CalendariumRomanum
@@ -17,7 +16,7 @@ module CalendariumRomanum
17
16
  # Returns a calendar for the liturgical year beginning with
18
17
  # Advent of the specified civil year.
19
18
  #
20
- # @overload initialize(year, sanctorale = nil, temporale = nil, vespers: false)
19
+ # @overload initialize(year, sanctorale = nil, temporale = nil, vespers: false, transfers: nil)
21
20
  # @param year [Integer]
22
21
  # Civil year when the liturgical year begins.
23
22
  # @param sanctorale [Sanctorale, nil]
@@ -27,19 +26,22 @@ module CalendariumRomanum
27
26
  # If not provided, +Temporale+ for the given year with default
28
27
  # configuration will built.
29
28
  # @param vespers [Boolean] Set to true if you want the +Calendar+ to populate {Day#vespers}
29
+ # @param transfers [#call, nil]
30
+ # Object with the same public interface as the +Transfers+ class (really class,
31
+ # not instance!), responsible for handling transfers of conflicting solemnities.
32
+ # Only useful for overriding the default solemnity transfer logic with a custom one.
30
33
  #
31
- # @overload initialize(temporale, sanctorale=nil, vespers: false)
34
+ # @overload initialize(temporale, sanctorale=nil, vespers: false, transfers: nil)
32
35
  # @param temporale [Temporale]
33
36
  # @param sanctorale [Sanctorale, nil]
34
- # If not provided, the +Calendar+ will only know celebrations
35
- # of the temporale cycle, no feasts of the saints!
36
- # @param vespers [Boolean] Set to true if you want the +Calendar+ to populate {Day#vespers}
37
+ # @param vespers [Boolean]
38
+ # @param transfers [#call, nil]
37
39
  # @since 0.8.0
38
40
  #
39
41
  # @raise [RangeError]
40
42
  # if +year+ is specified for which the implemented calendar
41
43
  # system wasn't in force
42
- def initialize(year, sanctorale = nil, temporale = nil, vespers: false)
44
+ def initialize(year, sanctorale = nil, temporale = nil, vespers: false, transfers: nil)
43
45
  unless year.is_a? Integer
44
46
  temporale = year
45
47
  year = temporale.year
@@ -58,7 +60,7 @@ module CalendariumRomanum
58
60
  @temporale = temporale || Temporale.new(year)
59
61
  @populate_vespers = vespers
60
62
 
61
- @transferred = Transfers.call(@temporale, @sanctorale).freeze
63
+ @transferred = (transfers || Transfers).call(@temporale, @sanctorale).freeze
62
64
  end
63
65
 
64
66
  class << self
@@ -262,13 +264,13 @@ module CalendariumRomanum
262
264
  @temporale.season(date) == Seasons::ORDINARY &&
263
265
  (st.empty? || st.first.rank == Ranks::MEMORIAL_OPTIONAL) &&
264
266
  t.rank <= Ranks::MEMORIAL_OPTIONAL
265
- st = st.dup << Temporale::CelebrationFactory.saturday_memorial_bvm
267
+ st += [Temporale::CelebrationFactory.saturday_memorial_bvm]
266
268
  end
267
269
 
268
270
  unless st.empty?
269
271
  if st.first.rank > t.rank
270
272
  if st.first.rank == Ranks::MEMORIAL_OPTIONAL
271
- return st.dup.unshift t
273
+ return [t] + st
272
274
  else
273
275
  return st
274
276
  end
@@ -276,7 +278,7 @@ module CalendariumRomanum
276
278
  commemorations = st.collect do |c|
277
279
  c.change(rank: Ranks::COMMEMORATION, colour: t.colour)
278
280
  end
279
- return commemorations.unshift t
281
+ return [t] + commemorations
280
282
  elsif t.symbol == :immaculate_heart &&
281
283
  [Ranks::MEMORIAL_GENERAL, Ranks::MEMORIAL_PROPER].include?(st.first.rank)
282
284
  optional_memorials = ([t] + st).collect do |celebration|
@@ -42,7 +42,7 @@ EOS
42
42
  Data.each {|c| puts c.siglum }
43
43
  end
44
44
 
45
- desc 'errors FILE1, ...', 'find errors in sanctorale data files'
45
+ desc 'errors FILE1 ...', 'find errors in sanctorale data files'
46
46
  def errors(*files)
47
47
  files.each do |path|
48
48
  begin
@@ -53,9 +53,38 @@ EOS
53
53
  end
54
54
  end
55
55
 
56
- desc 'cmp FILE1, FILE2', 'detect differences between two sanctorale data files'
56
+ desc 'cmp FILE1 FILE2', 'detect differences between two sanctorale data files'
57
+ option :no_rank, type: :boolean, desc: 'ignore differences of rank'
58
+ option :no_colour, type: :boolean, desc: 'ignore differences of colour'
59
+ option :no_symbol, type: :boolean, desc: 'ignore differences of symbol'
60
+ option :title, type: :boolean, desc: 'report differences of title'
57
61
  def cmp(a, b)
58
- Comparator.new.call(a, b)
62
+ properties = Comparator::DEFAULT_PROPERTIES
63
+ options.each_key do |k|
64
+ if k.start_with? 'no_'
65
+ properties.delete k.sub('no_', '').to_sym
66
+ else
67
+ properties << k.to_sym
68
+ end
69
+ end
70
+ Comparator.new(properties).call(a, b) || exit(1)
71
+ end
72
+
73
+ desc 'merge FILE1 ...', 'loads sanctorale data files on top of each other, prints the resulting sanctorale'
74
+ option :front_matter, type: :boolean, desc: 'output YAML front matter'
75
+ def merge(*files)
76
+ sanctoralia = files.collect {|path| sanctorale_from_path path }
77
+ merged = SanctoraleFactory.create_layered *sanctoralia
78
+ SanctoraleWriter.new(front_matter: options[:front_matter]).write merged, STDOUT
79
+ end
80
+
81
+ desc 'id FILE', 'print celebration identifiers found in a sanctorale data file'
82
+ def id(file)
83
+ sanctorale_from_path(file).each_day do |_, celebrations|
84
+ celebrations.each do |c|
85
+ puts c.symbol if c.symbol
86
+ end
87
+ end
59
88
  end
60
89
 
61
90
  desc 'dump YEAR', 'print calendar of the specified year for use in regression tests'
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  module CalendariumRomanum
2
4
  class CLI
3
5
  # Compares two sanctorale data files, reports differences.
@@ -6,11 +8,23 @@ module CalendariumRomanum
6
8
  class Comparator
7
9
  include Helper
8
10
 
11
+ SUPPORTED_PROPERTIES = %i(rank colour symbol title)
12
+ DEFAULT_PROPERTIES = SUPPORTED_PROPERTIES - %i(title)
13
+
14
+ def initialize(properties = DEFAULT_PROPERTIES)
15
+ unless Set.new(properties) <= Set.new(SUPPORTED_PROPERTIES)
16
+ raise ArgumentError.new("Unsupported properties specified: #{properties} Only #{SUPPORTED_PROPERTIES} are supported")
17
+ end
18
+
19
+ @properties = properties
20
+ end
21
+
9
22
  def call(path_a, path_b)
10
23
  paths = [path_a, path_b]
11
24
  sanctoralia = paths.collect {|source| sanctorale_from_path source }
12
25
  names = paths.collect {|source| File.basename source }
13
26
 
27
+ differences_found = false
14
28
  all_possible_dates.each do |d|
15
29
  a, b = sanctoralia.collect {|sanctorale| sanctorale[d] }
16
30
 
@@ -20,6 +34,7 @@ module CalendariumRomanum
20
34
  compared = [ca, cb]
21
35
 
22
36
  if compared.index(&:nil?)
37
+ differences_found = true
23
38
  notnili = compared.index {|c| !c.nil? }
24
39
 
25
40
  print date(d)
@@ -29,11 +44,12 @@ module CalendariumRomanum
29
44
  next
30
45
  end
31
46
 
32
- differences = %i(rank colour symbol).select do |property|
47
+ differences = @properties.select do |property|
33
48
  ca.public_send(property) != cb.public_send(property)
34
49
  end
35
50
 
36
51
  next if differences.empty?
52
+ differences_found = true
37
53
  print date(d)
38
54
  puts " differs in #{differences.join(', ')}"
39
55
  puts celebration(ca)
@@ -41,6 +57,8 @@ module CalendariumRomanum
41
57
  puts
42
58
  end
43
59
  end
60
+
61
+ !differences_found
44
62
  end
45
63
 
46
64
  private
@@ -56,7 +74,9 @@ module CalendariumRomanum
56
74
  end
57
75
 
58
76
  def celebration(c)
59
- "#{c.rank.priority} #{c.colour.symbol} | #{c.title}"
77
+ symbol_chunk = c.symbol && "#{c.symbol} | "
78
+
79
+ "#{c.rank.priority} #{c.colour.symbol} | #{symbol_chunk}#{c.title}"
60
80
  end
61
81
  end
62
82
  end