calendarium-romanum 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/config/locales/cs.yml +37 -1
  3. data/config/locales/en.yml +37 -1
  4. data/config/locales/it.yml +36 -2
  5. data/config/locales/la.yml +35 -1
  6. data/data/README.md +62 -4
  7. data/data/czech-brno-cs.txt +10 -2
  8. data/data/czech-budejovice-cs.txt +10 -2
  9. data/data/czech-cechy-cs.txt +9 -2
  10. data/data/czech-cs.txt +7 -1
  11. data/data/czech-hradec-cs.txt +10 -2
  12. data/data/czech-litomerice-cs.txt +10 -2
  13. data/data/czech-morava-cs.txt +9 -2
  14. data/data/czech-olomouc-cs.txt +10 -2
  15. data/data/czech-ostrava-cs.txt +10 -2
  16. data/data/czech-plzen-cs.txt +10 -2
  17. data/data/czech-praha-cs.txt +10 -2
  18. data/data/universal-en.txt +4 -1
  19. data/data/universal-it.txt +4 -1
  20. data/data/universal-la.txt +4 -1
  21. data/lib/calendarium-romanum.rb +3 -0
  22. data/lib/calendarium-romanum/calendar.rb +13 -6
  23. data/lib/calendarium-romanum/data.rb +1 -1
  24. data/lib/calendarium-romanum/day.rb +0 -3
  25. data/lib/calendarium-romanum/enums.rb +41 -21
  26. data/lib/calendarium-romanum/ordinalizer.rb +37 -0
  27. data/lib/calendarium-romanum/sanctoraleloader.rb +13 -2
  28. data/lib/calendarium-romanum/temporale.rb +145 -232
  29. data/lib/calendarium-romanum/temporale/dates.rb +151 -0
  30. data/lib/calendarium-romanum/temporale/extensions/christ_eternal_priest.rb +25 -0
  31. data/lib/calendarium-romanum/transfers.rb +23 -5
  32. data/lib/calendarium-romanum/version.rb +1 -1
  33. data/spec/calendar_spec.rb +72 -19
  34. data/spec/dates_spec.rb +45 -0
  35. data/spec/rank_spec.rb +2 -2
  36. data/spec/readme_spec.rb +11 -9
  37. data/spec/spec_helper.rb +16 -1
  38. data/spec/temporale_spec.rb +252 -126
  39. metadata +19 -1
@@ -29,7 +29,7 @@ describe CR::Rank do
29
29
  end
30
30
 
31
31
  describe '#desc' do
32
- it { expect(CR::Ranks[1.1].desc).to eq 'Easter triduum' }
32
+ it { expect(CR::Ranks[1.1].desc).to have_translation 'Easter triduum' }
33
33
  end
34
34
 
35
35
  describe '#short_desc' do
@@ -37,6 +37,6 @@ describe CR::Rank do
37
37
  expect(CR::Ranks[1.1].short_desc).to be_nil
38
38
  end
39
39
 
40
- it { expect(CR::Ranks[2.8].short_desc).to eq 'feast' }
40
+ it { expect(CR::Ranks[2.8].short_desc).to have_translation 'feast' }
41
41
  end
42
42
  end
@@ -34,16 +34,18 @@ class MarkdownDocument
34
34
  end
35
35
  end
36
36
 
37
- describe 'README.md' do
38
- readme_path = File.expand_path('../../README.md', __FILE__)
39
- readme = File.read readme_path
40
- doc = MarkdownDocument.new readme
37
+ %w(README.md data/README.md).each do |path|
38
+ describe path do
39
+ readme_path = File.expand_path('../../' + path, __FILE__)
40
+ readme = File.read readme_path
41
+ doc = MarkdownDocument.new readme
41
42
 
42
- doc.each_ruby_example do |code, line|
43
- describe "example L#{line}" do
44
- it 'executes without failure' do
45
- cls = Class.new
46
- cls.class_eval(code, readme_path, line)
43
+ doc.each_ruby_example do |code, line|
44
+ describe "example L#{line}" do
45
+ it 'executes without failure' do
46
+ cls = Class.new
47
+ cls.class_eval(code, readme_path, line)
48
+ end
47
49
  end
48
50
  end
49
51
  end
@@ -5,7 +5,6 @@
5
5
  #
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
7
  RSpec.configure do |config|
8
- config.treat_symbols_as_metadata_keys_with_true_values = true
9
8
  config.run_all_when_everything_filtered = true
10
9
  config.filter_run :focus
11
10
 
@@ -16,5 +15,21 @@ RSpec.configure do |config|
16
15
  config.order = 'random'
17
16
  end
18
17
 
18
+ RSpec::Matchers.define :have_translation do |expected, locale|
19
+ match do |actual|
20
+ locale ||= :en
21
+ if I18n.locale == locale
22
+ actual == expected
23
+ else
24
+ # with locale different from the one the spec is written for
25
+ # just test that the string isn't left untranslated
26
+ !(actual.empty? || actual.include?('translation missing'))
27
+ end
28
+ end
29
+ end
30
+
19
31
  require 'calendarium-romanum'
20
32
  CR = CalendariumRomanum
33
+
34
+ I18n.enforce_available_locales = true
35
+ I18n.locale = ENV['LOCALE'] || :en
@@ -1,3 +1,4 @@
1
+ # coding: utf-8
1
2
  require_relative 'spec_helper'
2
3
 
3
4
  describe CR::Temporale do
@@ -13,110 +14,73 @@ describe CR::Temporale do
13
14
  [Date.new(2014, 11, 1), 2013],
14
15
  [Date.new(2014, 12, 1), 2014]
15
16
  ].each do |date, year|
16
- described_class.liturgical_year(date).should eq year
17
+ expect(described_class.liturgical_year(date)).to eq year
17
18
  end
18
19
  end
19
20
  end
20
21
 
21
- describe '#weekday_before' do
22
- it 'works well for all 7 weekdays' do
23
- today = Date.new 2014, 3, 16
24
- @t.weekday_before(0, today).should eq Date.new(2014, 3, 9)
25
- @t.weekday_before(1, today).should eq Date.new(2014, 3, 10)
26
- @t.weekday_before(2, today).should eq Date.new(2014, 3, 11)
27
- @t.weekday_before(3, today).should eq Date.new(2014, 3, 12)
28
- @t.weekday_before(4, today).should eq Date.new(2014, 3, 13)
29
- @t.weekday_before(5, today).should eq Date.new(2014, 3, 14)
30
- @t.weekday_before(6, today).should eq Date.new(2014, 3, 15)
31
- end
32
- end
33
-
34
- describe '#weekday_after' do
35
- it 'works well for all 7 weekdays' do
36
- today = Date.new 2014, 3, 16
37
- @t.monday_after(today).should eq Date.new(2014, 3, 17)
38
- @t.tuesday_after(today).should eq Date.new(2014, 3, 18)
39
- @t.wednesday_after(today).should eq Date.new(2014, 3, 19)
40
- @t.thursday_after(today).should eq Date.new(2014, 3, 20)
41
- @t.friday_after(today).should eq Date.new(2014, 3, 21)
42
- @t.saturday_after(today).should eq Date.new(2014, 3, 22)
43
- @t.sunday_after(today).should eq Date.new(2014, 3, 23)
44
- end
45
- end
46
-
47
- describe '#advent_sunday' do
48
- it 'determines first Sunday of Advent' do
49
- [
50
- [2004, [11, 28]],
51
- [2010, [11, 28]],
52
- [2011, [11, 27]],
53
- [2012, [12, 2]],
54
- [2013, [12, 1]]
55
- ].each do |d|
56
- year, date = d
57
- @t.advent_sunday(1, year).should eq Date.new(year, *date)
22
+ describe '#first_advent_sunday determines first Sunday of Advent' do
23
+ [
24
+ [2004, [11, 28]],
25
+ [2010, [11, 28]],
26
+ [2011, [11, 27]],
27
+ [2012, [12, 2]],
28
+ [2013, [12, 1]]
29
+ ].each do |d|
30
+ year, date = d
31
+ it year do
32
+ temporale = described_class.new(year)
33
+ expect(temporale.first_advent_sunday).to eq Date.new(year, *date)
58
34
  end
59
35
  end
60
-
61
- it 'determines second Sunday of Advent' do
62
- @t.advent_sunday(2, 2013).should eq Date.new(2013,12,8)
63
- end
64
- end
65
-
66
- describe '#second_advent_sunday' do
67
- # alias of advent_sunday through method_missing
68
-
69
- it 'determines second Sunday of Advent' do
70
- @t.second_advent_sunday(2013).should eq Date.new(2013,12,8)
71
- end
72
36
  end
73
37
 
74
- describe '#easter_sunday' do
75
- it 'determines Easter Sunday' do
76
- [
77
- [2003, [2004, 4, 11]],
78
- [2004, [2005, 3, 27]],
79
- [2005, [2006, 4, 16]],
80
- [2006, [2007, 4, 8]],
81
- [2014, [2015, 4, 5]]
82
- ].each do |d|
83
- year, date = d
84
- @t.easter_sunday(year).should eq Date.new(*date)
38
+ describe '#easter_sunday determines Easter Sunday' do
39
+ [
40
+ [2003, [2004, 4, 11]],
41
+ [2004, [2005, 3, 27]],
42
+ [2005, [2006, 4, 16]],
43
+ [2006, [2007, 4, 8]],
44
+ [2014, [2015, 4, 5]]
45
+ ].each do |d|
46
+ year, date = d
47
+ it year do
48
+ temporale = described_class.new(year)
49
+ expect(temporale.easter_sunday).to eq Date.new(*date)
85
50
  end
86
51
  end
87
52
  end
88
53
 
89
54
  describe '#date_range' do
90
55
  it 'includes days of the year' do
91
- @t.date_range.should include Date.new(2012, 12, 3)
92
- @t.date_range.should include Date.new(2013, 11, 5)
56
+ expect(@t.date_range).to include Date.new(2012, 12, 3)
57
+ expect(@t.date_range).to include Date.new(2013, 11, 5)
93
58
  end
94
59
  end
95
60
 
96
61
  describe '#season' do
97
62
  it 'determines Advent' do
98
- @t13.season(Date.new(2013, 12, 15)).should eq :advent
99
- @t13.season(Date.new(2013, 12, 1)).should eq :advent
100
- @t13.season(Date.new(2013, 12, 24)).should eq :advent
63
+ expect(@t13.season(Date.new(2013, 12, 1))).to eq CR::Seasons::ADVENT
64
+ expect(@t13.season(Date.new(2013, 12, 24))).to eq CR::Seasons::ADVENT
101
65
  end
102
66
 
103
67
  it 'determines Christmas' do
104
- @t13.season(Date.new(2013, 12, 25)).should eq :christmas
105
- @t13.season(Date.new(2014, 1, 12)).should eq :christmas
106
- @t13.season(Date.new(2014, 1, 13)).should eq :ordinary
68
+ expect(@t13.season(Date.new(2013, 12, 25))).to eq CR::Seasons::CHRISTMAS
69
+ expect(@t13.season(Date.new(2014, 1, 12))).to eq CR::Seasons::CHRISTMAS
70
+ expect(@t13.season(Date.new(2014, 1, 13))).to eq CR::Seasons::ORDINARY
107
71
  end
108
72
 
109
73
  it 'determines Lent' do
110
- @t13.season(Date.new(2014, 3, 4)).should eq :ordinary
111
- @t13.season(Date.new(2014, 3, 5)).should eq :lent
112
- @t13.season(Date.new(2014, 4, 19)).should eq :lent
113
- @t13.season(Date.new(2014, 4, 20)).should eq :easter
74
+ expect(@t13.season(Date.new(2014, 3, 4))).to eq CR::Seasons::ORDINARY
75
+ expect(@t13.season(Date.new(2014, 3, 5))).to eq CR::Seasons::LENT
76
+ expect(@t13.season(Date.new(2014, 4, 19))).to eq CR::Seasons::LENT
77
+ expect(@t13.season(Date.new(2014, 4, 20))).to eq CR::Seasons::EASTER
114
78
  end
115
79
 
116
80
  it 'determines Easter time' do
117
- @t13.season(Date.new(2014, 4, 20)).should eq :easter
118
- @t13.season(Date.new(2014, 6, 8)).should eq :easter
119
- @t13.season(Date.new(2014, 6, 9)).should eq :ordinary
81
+ expect(@t13.season(Date.new(2014, 4, 20))).to eq CR::Seasons::EASTER
82
+ expect(@t13.season(Date.new(2014, 6, 8))).to eq CR::Seasons::EASTER
83
+ expect(@t13.season(Date.new(2014, 6, 9))).to eq CR::Seasons::ORDINARY
120
84
  end
121
85
  end
122
86
 
@@ -206,7 +170,7 @@ describe CR::Temporale do
206
170
  it 'Nativity' do
207
171
  c = @t13.get(12, 25)
208
172
  expect(c.rank).to eq CR::Ranks::PRIMARY
209
- expect(c.title).to eq 'The Nativity of the Lord'
173
+ expect(c.title).to have_translation 'The Nativity of the Lord'
210
174
  expect(c.colour).to eq CR::Colours::WHITE
211
175
  end
212
176
 
@@ -219,7 +183,7 @@ describe CR::Temporale do
219
183
  it 'Holy Family' do
220
184
  c = @t13.get(12, 29)
221
185
  expect(c.rank).to eq CR::Ranks::FEAST_LORD_GENERAL
222
- expect(c.title).to eq 'The Holy Family of Jesus, Mary and Joseph'
186
+ expect(c.title).to have_translation 'The Holy Family of Jesus, Mary and Joseph'
223
187
  expect(c.colour).to eq CR::Colours::WHITE
224
188
  end
225
189
 
@@ -227,146 +191,308 @@ describe CR::Temporale do
227
191
  it 'is Holy Family on Friday Dec 30' do
228
192
  @t16 = described_class.new 2016
229
193
  c = @t16.get(12, 30)
230
- expect(c.title).to eq 'The Holy Family of Jesus, Mary and Joseph'
194
+ expect(c.title).to have_translation 'The Holy Family of Jesus, Mary and Joseph'
231
195
  end
232
196
  end
233
197
 
234
198
  it 'Epiphany' do
235
199
  c = @t13.get(1, 6)
236
200
  expect(c.rank).to eq CR::Ranks::PRIMARY
237
- expect(c.title).to eq 'The Epiphany of the Lord'
201
+ expect(c.title).to have_translation 'The Epiphany of the Lord'
238
202
  expect(c.colour).to eq CR::Colours::WHITE
239
203
  end
240
204
 
241
205
  it 'Baptism of the Lord' do
242
206
  c = @t13.get(1, 12)
243
207
  expect(c.rank).to eq CR::Ranks::FEAST_LORD_GENERAL
244
- expect(c.title).to eq 'The Baptism of the Lord'
208
+ expect(c.title).to have_translation 'The Baptism of the Lord'
245
209
  expect(c.colour).to eq CR::Colours::WHITE
246
210
  end
247
211
 
248
212
  it 'Ash Wednesday' do
249
213
  c = @t13.get(3, 5)
250
214
  expect(c.rank).to eq CR::Ranks::PRIMARY
251
- expect(c.title).to eq 'Ash Wednesday'
215
+ expect(c.title).to have_translation 'Ash Wednesday'
252
216
  expect(c.colour).to eq CR::Colours::VIOLET
253
217
  end
254
218
 
255
219
  it 'Palm Sunday' do
256
220
  c = @t13.get(4, 13)
257
221
  expect(c.rank).to eq CR::Ranks::PRIMARY
258
- expect(c.title).to eq 'Palm Sunday of the Passion of the Lord'
222
+ expect(c.title).to have_translation 'Palm Sunday of the Passion of the Lord'
259
223
  expect(c.colour).to eq CR::Colours::RED
260
224
  end
261
225
 
262
226
  it 'Good Friday' do
263
227
  c = @t13.get(4, 18)
264
228
  expect(c.rank).to eq CR::Ranks::TRIDUUM
265
- expect(c.title).to eq 'Friday of the Passion of the Lord'
229
+ expect(c.title).to have_translation 'Friday of the Passion of the Lord'
266
230
  expect(c.colour).to eq CR::Colours::RED
267
231
  end
268
232
 
269
233
  it 'Holy Saturday' do
270
234
  c = @t13.get(4, 19)
271
235
  expect(c.rank).to eq CR::Ranks::TRIDUUM
272
- expect(c.title).to eq 'Holy Saturday'
236
+ expect(c.title).to have_translation 'Holy Saturday'
273
237
  expect(c.colour).to eq CR::Colours::VIOLET
274
238
  end
275
239
 
276
240
  it 'Resurrection' do
277
241
  c = @t13.get(4, 20)
278
242
  expect(c.rank).to eq CR::Ranks::TRIDUUM
279
- expect(c.title).to eq 'Easter Sunday of the Resurrection of the Lord'
280
- expect(c.colour).to eq CR::Colours::WHITE
281
- end
282
-
283
- it 'day in the Easter Octave' do
284
- c = @t13.get(4, 22)
285
- expect(c.rank).to eq CR::Ranks::PRIMARY
243
+ expect(c.title).to have_translation 'Easter Sunday of the Resurrection of the Lord'
286
244
  expect(c.colour).to eq CR::Colours::WHITE
287
245
  end
288
246
 
289
247
  it 'Ascension' do
290
248
  c = @t13.get(5, 29)
291
249
  expect(c.rank).to eq CR::Ranks::PRIMARY
292
- expect(c.title).to eq 'Ascension of the Lord'
250
+ expect(c.title).to have_translation 'Ascension of the Lord'
293
251
  expect(c.colour).to eq CR::Colours::WHITE
294
252
  end
295
253
 
296
254
  it 'Pentecost' do
297
255
  c = @t13.get(6, 8)
298
256
  expect(c.rank).to eq CR::Ranks::PRIMARY
299
- expect(c.title).to eq 'Pentecost Sunday'
257
+ expect(c.title).to have_translation 'Pentecost Sunday'
300
258
  expect(c.colour).to eq CR::Colours::RED
301
259
  end
302
260
 
303
261
  it 'Trinity' do
304
262
  c = @t13.get(6, 15)
305
263
  expect(c.rank).to eq CR::Ranks::SOLEMNITY_GENERAL
306
- expect(c.title).to eq 'The Most Holy Trinity'
264
+ expect(c.title).to have_translation 'The Most Holy Trinity'
307
265
  expect(c.colour).to eq CR::Colours::WHITE
308
266
  end
309
267
 
310
268
  it 'Body of Christ' do
311
269
  c = @t13.get(6, 19)
312
270
  expect(c.rank).to eq CR::Ranks::SOLEMNITY_GENERAL
313
- expect(c.title).to eq 'The Most Holy Body and Blood of Christ'
271
+ expect(c.title).to have_translation 'The Most Holy Body and Blood of Christ'
314
272
  expect(c.colour).to eq CR::Colours::WHITE
315
273
  end
316
274
 
317
275
  it 'Sacred Heart' do
318
276
  c = @t13.get(6, 27)
319
277
  expect(c.rank).to eq CR::Ranks::SOLEMNITY_GENERAL
320
- expect(c.title).to eq 'The Most Sacred Heart of Jesus'
278
+ expect(c.title).to have_translation 'The Most Sacred Heart of Jesus'
321
279
  expect(c.colour).to eq CR::Colours::WHITE
322
280
  end
323
281
 
324
282
  it 'Christ the King' do
325
283
  c = @t13.get(11, 23)
326
284
  expect(c.rank).to eq CR::Ranks::SOLEMNITY_GENERAL
327
- expect(c.title).to eq 'Our Lord Jesus Christ, King of the Universe'
285
+ expect(c.title).to have_translation 'Our Lord Jesus Christ, King of the Universe'
328
286
  expect(c.colour).to eq CR::Colours::WHITE
329
287
  end
288
+
289
+ describe 'other locales' do
290
+ it 'Latin' do
291
+ I18n.with_locale(:la) do
292
+ c = @t13.get(11, 23)
293
+ expect(c.title).to eq 'Domini nostri Iesu Christi universorum regis'
294
+ end
295
+ end
296
+
297
+ it 'Czech' do
298
+ I18n.with_locale(:cs) do
299
+ c = @t13.get(11, 23)
300
+ expect(c.title).to eq 'Ježíše Krista krále'
301
+ end
302
+ end
303
+
304
+ it 'Italian' do
305
+ I18n.with_locale(:it) do
306
+ c = @t13.get(11, 23)
307
+ expect(c.title).to eq "Nostro Signore Gesù Cristo Re dell'universo"
308
+ end
309
+ end
310
+ end
330
311
  end
331
- end
332
- end
333
312
 
334
- describe 'initialized without a year' do
335
- before :each do
336
- @tny = described_class.new
313
+ # movable sanctorale feasts don't really belong in Temporale, but ...
314
+ describe 'movable sanctorale feasts' do
315
+ it 'Immaculate Heart' do
316
+ c = @t13.get(6, 28)
317
+ expect(c.title).to have_translation 'Immaculate Heart of Mary'
318
+ expect(c.rank).to eq CR::Ranks::MEMORIAL_GENERAL
319
+ end
320
+ end
337
321
  end
338
322
 
339
- it 'is possible to initialize a Temporale without a year' do
340
- expect { described_class.new }.not_to raise_exception
323
+ describe 'titles of Sundays and ferials' do
324
+ def title_for(month, day)
325
+ @t13.get(month, day).title
326
+ end
327
+
328
+ describe 'Ordinary time' do
329
+ it 'Sunday' do
330
+ expect(title_for(1, 19)).to have_translation '2nd Sunday in Ordinary Time'
331
+ end
332
+
333
+ it 'ferial' do
334
+ expect(title_for(1, 13)).to have_translation 'Monday, 1st week in Ordinary Time'
335
+ end
336
+ end
337
+
338
+ describe 'Advent' do
339
+ it 'Sunday' do
340
+ expect(title_for(12, 1)).to have_translation '1st Sunday of Advent'
341
+ end
342
+
343
+ it 'ferial' do
344
+ expect(title_for(12, 2)).to have_translation 'Monday, 1st week of Advent'
345
+ end
346
+ end
347
+
348
+ describe 'Christmas time' do
349
+ describe 'Octave of Christmas' do
350
+ it 'ferial' do
351
+ day = @t13.get(12, 30)
352
+ expect(day.rank).to eq CR::Ranks::FERIAL_PRIVILEGED
353
+ expect(day.title).to have_translation '6th day of Christmas Octave'
354
+ end
355
+ end
356
+
357
+ describe 'after Octave of Christmas' do
358
+ it 'ferial' do
359
+ expect(title_for(1, 2)).to have_translation 'Thursday after Christmas Octave'
360
+ end
361
+
362
+ it 'Sunday' do
363
+ expect(title_for(1, 5)).to have_translation '2nd Sunday after the Nativity of the Lord'
364
+ end
365
+ end
366
+
367
+ describe 'after Epiphany' do
368
+ it 'ferial' do
369
+ expect(title_for(1, 7)).to have_translation 'Tuesday after Epiphany'
370
+ end
371
+ end
372
+ end
373
+
374
+ describe 'Lent' do
375
+ describe 'before first Sunday' do
376
+ it 'ferial' do
377
+ expect(title_for(3, 6)).to have_translation 'Thursday after Ash Wednesday'
378
+ end
379
+ end
380
+
381
+ it 'Sunday' do
382
+ expect(title_for(3, 9)).to have_translation '1st Sunday of Lent'
383
+ end
384
+
385
+ it 'ferial' do
386
+ expect(title_for(3, 10)).to have_translation 'Monday, 1st week of Lent'
387
+ end
388
+
389
+ describe 'Holy Week' do
390
+ it 'ferial' do
391
+ day = @t13.get(4, 14)
392
+ expect(day.rank).to eq CR::Ranks::PRIMARY
393
+ expect(day.title).to have_translation 'Monday of Holy Week'
394
+ end
395
+ end
396
+ end
397
+
398
+ describe 'Easter' do
399
+ describe 'Easter Octave' do
400
+ it 'ferial' do
401
+ c = @t13.get(4, 22)
402
+ expect(c.rank).to eq CR::Ranks::PRIMARY
403
+ expect(c.title).to have_translation 'Easter Tuesday'
404
+ end
405
+
406
+ it 'Sunday (the octave day)' do
407
+ c = @t13.get(4, 27)
408
+ expect(c.rank).to eq CR::Ranks::PRIMARY
409
+ expect(c.title).to have_translation '2nd Sunday of Easter'
410
+ end
411
+ end
412
+
413
+ it 'Sunday' do
414
+ expect(title_for(5, 4)).to have_translation '3rd Sunday of Easter'
415
+ end
416
+
417
+ it 'ferial' do
418
+ expect(title_for(5, 5)).to have_translation 'Monday, 3rd week of Easter'
419
+ end
420
+ end
421
+
422
+ describe 'other locales' do
423
+ it 'Latin' do
424
+ I18n.with_locale(:la) do
425
+ expect(title_for(5, 5)).to eq 'Feria secunda, hebdomada III temporis paschalis'
426
+ end
427
+ end
428
+
429
+ it 'Czech' do
430
+ I18n.with_locale(:cs) do
431
+ expect(title_for(5, 5)).to eq 'Pondělí po 3. neděli velikonoční'
432
+ end
433
+ end
434
+
435
+ it 'Italian' do
436
+ I18n.with_locale(:it) do
437
+ expect(title_for(5, 5)).to eq 'Lunedì, III di Pasqua'
438
+ end
439
+ end
440
+ end
341
441
  end
442
+ end
342
443
 
343
- it 'crashes when a date is requested without year' do
344
- expect { @tny.first_advent_sunday }.to raise_exception
444
+ describe '.add_celebration' do
445
+ let(:celebration) { CR::Celebration.new('Monday after Pentecost', CR::Ranks::FEAST_PROPER, CR::Colours::WHITE) }
446
+ let(:date_proc) { proc { pentecost + 1 } }
447
+ let(:subclass) { Class.new(described_class) }
448
+ let(:date) { Date.new(2017, 6, 5) }
449
+
450
+ describe 'on Temporale itself' do
451
+ it 'fails' do
452
+ expect do
453
+ described_class.add_celebration date_proc, celebration
454
+ end.to raise_exception(RuntimeError, /Don't add celebrations to Temporale itself/)
455
+ end
345
456
  end
346
457
 
347
- it 'computes dates as expected if year is given' do
348
- days = %i(first_advent_sunday nativity holy_family mother_of_god
349
- epiphany baptism_of_lord ash_wednesday easter_sunday good_friday
350
- holy_saturday pentecost
351
- holy_trinity body_blood sacred_heart christ_king
458
+ describe 'on a subclass' do
459
+ describe 'with date method' do
460
+ it 'adds the celebration' do
461
+ subclass.instance_eval do
462
+ define_method :date_method do
463
+ pentecost + 1
464
+ end
465
+ end
466
+
467
+ subclass.add_celebration :date_method, celebration
352
468
 
353
- date_range)
354
- days.each do |msg|
355
- @tny.send(msg, 2012).should eq @t12.send(msg)
469
+ instance = subclass.new 2016
470
+ expect(instance.get(date)).to eq celebration
471
+ end
472
+ end
473
+
474
+ describe 'with date Proc' do
475
+ it 'adds the celebration' do
476
+ subclass.add_celebration date_proc, celebration
477
+
478
+ instance = subclass.new 2016
479
+ expect(instance.get(date)).to eq celebration
480
+ end
356
481
  end
357
482
  end
483
+ end
358
484
 
359
- describe '#get' do
360
- it 'always raises an exception' do
361
- # for get to work well is imoportant to have precomputed
362
- # solemnity dates. That is only possible when a year
363
- # is specified on initialization.
364
- [
365
- Date.new(2015, 1, 1),
366
- Date.new(2015, 9, 23),
367
- Date.new(2015, 3, 4)
368
- ].each do |date|
369
- expect { @tny.get(date) }.to raise_exception
485
+ describe 'packaged extensions' do
486
+ describe 'ChristEternalPriest' do
487
+ let(:klass) { described_class.with_extensions(CR::Temporale::Extensions::ChristEternalPriest) }
488
+ let(:t) { klass.new(2016) }
489
+
490
+ it 'adds the feast' do
491
+ I18n.with_locale(:cs) do
492
+ c = t.get(6, 8)
493
+ expect(c.title).to eq 'Ježíše Krista, nejvyššího a věčného kněze'
494
+ expect(c.rank).to eq CR::Ranks::FEAST_PROPER
495
+ expect(c.colour).to eq CR::Colours::WHITE
370
496
  end
371
497
  end
372
498
  end