calendarium-romanum 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/bin/calendariumrom +2 -61
  3. data/config/locales/cs.yml +40 -0
  4. data/config/locales/en.yml +4 -1
  5. data/config/locales/it.yml +40 -0
  6. data/config/locales/la.yml +40 -0
  7. data/data/README.md +87 -0
  8. data/data/czech-brno-cs.txt +7 -0
  9. data/data/czech-budejovice-cs.txt +8 -0
  10. data/data/czech-cechy-cs.txt +8 -0
  11. data/data/czech-cs.txt +259 -0
  12. data/data/czech-hradec-cs.txt +6 -0
  13. data/data/czech-litomerice-cs.txt +8 -0
  14. data/data/czech-morava-cs.txt +7 -0
  15. data/data/czech-olomouc-cs.txt +4 -0
  16. data/data/czech-ostrava-cs.txt +6 -0
  17. data/data/czech-plzen-cs.txt +6 -0
  18. data/data/czech-praha-cs.txt +4 -0
  19. data/data/universal-en.txt +237 -0
  20. data/data/universal-it.txt +236 -0
  21. data/data/universal-la.txt +236 -0
  22. data/lib/calendarium-romanum.rb +2 -0
  23. data/lib/calendarium-romanum/calendar.rb +4 -1
  24. data/lib/calendarium-romanum/cli.rb +100 -0
  25. data/lib/calendarium-romanum/data.rb +41 -0
  26. data/lib/calendarium-romanum/day.rb +7 -1
  27. data/lib/calendarium-romanum/enum.rb +33 -0
  28. data/lib/calendarium-romanum/enums.rb +43 -35
  29. data/lib/calendarium-romanum/rank.rb +16 -12
  30. data/lib/calendarium-romanum/sanctorale.rb +9 -0
  31. data/lib/calendarium-romanum/sanctoraleloader.rb +8 -8
  32. data/lib/calendarium-romanum/temporale.rb +24 -9
  33. data/lib/calendarium-romanum/version.rb +1 -1
  34. data/spec/calendar_spec.rb +89 -7
  35. data/spec/cli_spec.rb +26 -0
  36. data/spec/data_spec.rb +16 -8
  37. data/spec/date_spec.rb +52 -1
  38. data/spec/enum_spec.rb +51 -0
  39. data/spec/i18n_spec.rb +59 -0
  40. data/spec/readme_spec.rb +50 -0
  41. data/spec/sanctorale_spec.rb +24 -1
  42. data/spec/sanctoraleloader_spec.rb +30 -1
  43. data/spec/temporale_spec.rb +24 -0
  44. metadata +28 -2
@@ -0,0 +1,236 @@
1
+ # General Roman Calendar in Latin
2
+ # source: http://www.binetti.ru/collectio/liturgia/missale_files/crg.htm
3
+
4
+ = 1
5
+ 2 m : Ss. Basilii et Gregorii Nazianzeni, episcoporum et Ecclesiae doctorum
6
+ 3 : Ss.mi Nominis Iesu
7
+ 7 : S. Raimundi de Penyafort, presbyteri
8
+ 13 : S. Hilarii, episcopi et Ecclesiae doctoris
9
+ 17 m : S. Antonii, abbatis
10
+ 20 R : S. Fabiani, papae et martyris
11
+ 20 R : S. Sebastiani, martyris
12
+ 21 m R : S. Agnetis, virginis et martyris
13
+ 22 R : S. Vincentii, diaconi et martyris
14
+ 24 m : S. Francisci de Sales, episcopi et Ecclesiae doctoris
15
+ 25 f : In conversione S. Pauli, apostoli
16
+ 26 m : Ss. Timothei et Titi, episcoporum
17
+ 27 : S. Angelae Merici, virginis
18
+ 28 m : S. Thomae de Aquino, presbyteri et Ecclesiae doctoris
19
+ 31 m : S. Ioannis Bosco, presbyteri
20
+
21
+ = 2
22
+ 2 f2.5 : IN PRAESENTATIONE DOMINI
23
+ 3 R : S. Blasii, episcopi et martyris
24
+ 3 : S. Ansgarii, episcopi
25
+ 5 m R : S. Agathae, virginis et martyris
26
+ 6 m R : Ss. Pauli Miki et sociorum, martyrum
27
+ 8 : S. Hieronymi Emiliani
28
+ 8 : S. Iosephinae Bakhita, virginis
29
+ 10 m : S. Scholasticae, virginis
30
+ 11 : B. Mariae Virginis de Lourdes
31
+ 14 m : Ss. Cyrilli, monachi, et Methodii, episcopi
32
+ 17 : Ss. septem Fundatorum Ordinis Servorum B. M. V.
33
+ 21 : S. Petri Damiani, episcopi et Ecclesiae doctoris
34
+ 22 f : Cathedrae S. Petri, apostoli
35
+ 23 m R : S. Polycarpi, episcopi et martyris
36
+
37
+ = 3
38
+ 4 : S. Casimiri
39
+ 7 m R : Ss. Perpetuae et Felicitatis, martyrum
40
+ 8 : S. Ioannis a Deo, religiosi
41
+ 9 : S. Franciscae Romanae, religiosae
42
+ 17 : S. Patricii, episcopi
43
+ 18 : S. Cyrilli Hierosolymitani, episcopi et Ecclesiae doctoris
44
+ 19 s : S. IOSEPH, SPONSI B. M. V.
45
+ 23 : S. Turibii de Mongrovejo, episcopi
46
+ 25 s : IN ANNUNTIATIONE DOMINI
47
+
48
+ = 4
49
+ 2 : S. Francisci de Paola, eremitae
50
+ 4 : S. Isidori, episcopi et Ecclesiae doctoris
51
+ 5 : S. Vincentii Ferrer, presbyteri
52
+ 7 m : S. Ioannis Baptistae de la Salle, presbyteri
53
+ 11 m R : S. Stanislai, episcopi et martyris
54
+ 13 R : S. Martini I, papae et martyris
55
+ 21 : S. Anselmi, episcopi et Ecclesiae doctoris
56
+ 23 R : S. Georgii, martyris
57
+ 23 R : S. Adalberti, episcopi et martyris
58
+ 24 R : S. Fidelis a Sigmaringen, presbyteri et martyris
59
+ 25 f R : S. Marci, evangelistae
60
+ 28 R : S. Petri Chanel, presbyteri et martyris
61
+ 28 : S. Ludovici Mariae Grignion de Montfort, presbyteri
62
+ 29 m : S. Catharinae Senensis, virginis et Ecclesiae doctoris
63
+ 30 : S. Pii V, papae
64
+
65
+ = 5
66
+ 1 : S. Ioseph Opificis
67
+ 2 m : S. Athanasii, episcopi et Ecclesiae doctoris
68
+ 3 f R : Ss. Philippi et Iacobi, apostolorum
69
+ 12 R : Ss. Nerei et Achillei, martyrum
70
+ 12 R : S. Pancratii, martyris
71
+ 13 : B. Mariae Virginis de Fatima
72
+ 14 f R : S. Matthiae, apostoli
73
+ 18 R : S. Ioannis I, papae et martyris
74
+ 20 : S. Bernardini Senensis, presbyteri
75
+ 21 R : S. Christophori Magallanes, presbyteri, et sociorum, martyrum
76
+ 22 : S. Ritae de Cascia, religiosae
77
+ 25 : S. Bedae Venerabilis, presbyteri et Ecclesiae doctoris
78
+ 25 : S. Gregorii VII, papae
79
+ 25 : S. Mariae Magdalenae de' Pazzi, virginis
80
+ 26 m : S. Philippi Neri, presbyteri
81
+ 27 : S. Augustini Cantuarensis, episcopi
82
+ 31 f : In Visitatione B. Mariae Virginis
83
+
84
+ = 6
85
+ 1 m R : S. Iustini, martyris
86
+ 2 R : Ss. Marcellini et Petri, martyrum
87
+ 3 m R : Ss. Caroli Lwanga et sociorum, martyrum
88
+ 5 m R : S. Bonifatii, episcopi et martyris
89
+ 6 : S. Norberti, episcopi
90
+ 9 : S. Ephraem, diaconi et Ecclesiae doctoris
91
+ 11 m R : S. Barnabae, apostoli
92
+ 13 m : S. Antonii de Padova, presbyteri et Ecclesiae doctoris
93
+ 19 : S. Romualdi, abbatis
94
+ 21 m : S Aloisii Gonzaga, religiosi
95
+ 22 : S. Paulini Nolani
96
+ 22 R : Ss. Ioannis Fisher, episcopi, et Thomae More, martyrum
97
+ 24 s : IN NATIVITATE S. IOANNIS BAPTISTAE
98
+ 27 : S. Cyrilli Alexandrini, episcopi et Ecclesiae doctoris
99
+ 28 m R : S. Irenaei, episcopi et martyris
100
+ 29 s R : Ss. PETRI ET PAULI, APOSTOLORUM
101
+ 30 R : Ss. Protomartyrum S. Romanae Ecclesiae
102
+
103
+ = 7
104
+ 3 f R : S. Thomae, apostoli
105
+ 4 : S. Elisabeth Lusitaniae
106
+ 5 : S. Antonii Mariae Zaccaria, presbyteri
107
+ 6 R : S. Mariae Goretti, virginis et martyris
108
+ 9 R : Ss. Augustini Zhao Rong, presbyteri
109
+ 11 m : S. Benedicti, abbatis
110
+ 13 : S. Henrici
111
+ 14 : S. Camilli de Lellis, presbyteri
112
+ 15 m : S. Bonaventurae, episcopi et Ecclesiae doctoris
113
+ 16 : B. Mariae Virginis de Monte Carmelo
114
+ 20 R : S. Apollinaris, episcopi et martyris
115
+ 21 : S. Laurentii de Brindisi, presbyteri et Ecclesiae doctoris
116
+ 22 f : S. Mariae Magdalenae
117
+ 23 : S. Birgittae, religiosae
118
+ 24 : S. Sarbelii Makhlūf, presbyteri
119
+ 25 f R : S. Iacobi, apostoli
120
+ 26 m : Ss. Ioachim et Annae, parentum B. Mariae Virginis
121
+ 29 m R : S. Marthae
122
+ 30 : S. Petri Chrysologi, episcopi et Ecclesiae doctoris
123
+ 31 m : S. Ignatii de Loyola, presbyteri
124
+
125
+ = 8
126
+ 1 m : S. Alfonsi Mariae de' Liguori, episcopi et Ecclesiae doctoris
127
+ 2 : S. Eusebii Vercellensis, episcopi
128
+ 2 : S. Petri Iuliani Eymard, presbyteri
129
+ 4 m : S. Ioannis Mariae Vianney, presbyteri
130
+ 5 : In Dedicatione basilicae S. Mariae
131
+ 6 f2.5 : IN TRANSFIGURATIONE DOMINI
132
+ 7 R : Ss. Xysti, papae, et sociorum, martyrum
133
+ 7 : S. Caietani, presbyteri
134
+ 8 m : S. Dominici, presbyteri
135
+ 9 R : S. Teresiae Benedictae a Cruce, virginis et martyris
136
+ 10 f R : S. Laurentii, diaconi et martyris
137
+ 11 m : S. Clarae, virginis
138
+ 12 : S. Ioannae Franciscae de Chantal, religiosae
139
+ 13 R : Ss. Pontiani, papae, et Hippolyti, presbyteri, martyrum
140
+ 14 m R : S. Maximiliani Mariae Kolbe, presbyteri et martyris
141
+ 15 s : IN ASSUMPTIONE B. MARIAE VIRGINIS
142
+ 16 : S. Stephani Hungariae
143
+ 19 : S. Ioannis Eudes, presbyteri
144
+ 20 m : S. Bernardi, abbatis et Ecclesiae doctoris
145
+ 21 m : S. Pii X, papae
146
+ 22 m : B. Mariae Virginis Reginae
147
+ 23 : S. Rosae de Lima, virginis
148
+ 24 f R : S. Bartholomaei, apostoli
149
+ 25 : S. Ludovici
150
+ 25 : S. Ioseph de Calasanz, presbyteri
151
+ 27 m : S. Monicae
152
+ 28 m : S. Augustini, episcopi et Ecclesiae doctoris
153
+ 29 m R : In Passione S. Ioannis Baptistae, martyris
154
+
155
+ = 9
156
+ 3 m : S. Gregorii Magni, papae et Ecclesiae doctoris
157
+ 8 f : In Nativitate B. Mariae Virginis
158
+ 9 : S. Petri Claver, presbyteri
159
+ 12 : Ss.mi Nominis Mariae
160
+ 13 m : S. Ioannis Chrysostomi, episcopi et Ecclesiae doctoris
161
+ 14 f2.5 R : IN EXALTATIONE SANCTAE CRUCIS
162
+ 15 m : B. Mariae Virginis Perdolentis
163
+ 16 m R : Ss. Cornelii, papae, et Cypriani, episcopi, martyrum
164
+ 17 : S. Roberti Bellarmino, episcopi et Ecclesiae doctoris
165
+ 19 R : S. Ianuarii, episcopi et martyris
166
+ 20 m R : Ss. Andreae Kim Tae-gŏn et Pauli Chŏng Ha-sang et sociorum, martyrum
167
+ 21 f R : S. Matthaei, apostoli et evangelistae
168
+ # what does the asterisk here mean?
169
+ 23 m : S. Pii de Pietrelcina, presbyteri [*]
170
+ 26 R : Ss. Cosmae et Damiani, martyrum
171
+ 27 m : S. Vincentii de Paul, presbyteri
172
+ 28 R : S. Venceslai, martyris
173
+ 28 R : S. Laurentii Ruiz et sociorum, martyrum
174
+ 29 f : Ss. Michaelis, Gabrielis et Raphaelis, archangelorum
175
+ 30 m : S. Hieronymi, presbyteri et Ecclesiae doctoris
176
+
177
+ = 10
178
+ 1 m : S. Teresiae a Iesu Infante, virginis et Ecclesiae doctoris
179
+ 2 m : Ss. Angelorum Custodum
180
+ 4 m : S. Francisci Assisiensis
181
+ 6 : S. Brunonis, presbyteri
182
+ 7 m : B. Mariae Virginis a Rosario
183
+ 9 R : Ss. Dionysii, episcopi, et sociorum, martyrum
184
+ 9 : S. Ioannis Leonardi, presbyteri
185
+ 14 R : S. Callisti I, papae et martyris
186
+ 15 m : S. Teresiae a Iesu, virginis et Ecclesiae doctoris
187
+ 16 : S. Hedvigis, religiosae
188
+ 16 : S. Margaritae Mariae Alacoque, virginis
189
+ 17 m R : S. Ignatii Antiocheni, episcopi et martyris
190
+ 18 f R : S. Lucae, evangelistae
191
+ 19 R : Ss. Ioannis de Brébeuf et Isaac Jogues, presbyterorum, et sociorum, martyrum
192
+ 19 : S. Pauli a Cruce, presbyteri
193
+ 23 : S. Ioannis de Capestrano, presbyteri
194
+ 24 : S. Antonii Mariae Claret, episcopi
195
+ 28 f R : Ss. Simonis et Iudae, apostolorum
196
+
197
+ = 11
198
+ 1 s : OMNIUM SANCTORUM
199
+ 2 : IN COMMEMORATIONE OMNIUM FIDELIUM DEFUNCTORUM
200
+ 3 R : S. Martini de Porres, religiosi
201
+ 4 m : S. Caroli Borromeo, episcopi
202
+ 9 f : IN DEDICATIONE BASILICAE LATERANENSIS
203
+ 10 m : S. Leonis Magni, papae et Ecclesiae doctoris
204
+ 11 m R : S. Martini Turonensis, episcopi
205
+ 12 m R : S. Iosaphat, episcopi et martyris
206
+ 15 : S. Alberti Magni, episcopi et Ecclesiae doctoris
207
+ 16 : S. Margaritae Scotiae
208
+ 16 : S. Gertrudis, virginis
209
+ 17 m : S. Elisabeth Hungariae, religiosae
210
+ 18 : In Dedicatione basilicarum Ss. Petri et Pauli, apostolorum
211
+ 21 m : In Praesentatione B. Mariae Virginis
212
+ 22 m R : S. Caeciliae, virginis et martyris
213
+ 23 R : S. Clementis I, papae et martyris
214
+ 23 : S. Columbani, abbatis
215
+ 24 m R : Ss. Andreae Dũng Lac, presbyteri, et sociorum, martyrum
216
+ 25 R : S. Catharinae Alexandrinae, virginis et martyris
217
+ 30 f R : S. Andreae, apostoli
218
+
219
+ = 12
220
+ 3 m : S. Francisci Xavier, presbyteri
221
+ 4 : S. Ioannis Damasceni, presbyteri et Ecclesiae doctoris
222
+ 6 : S. Nicolai, episcopi
223
+ 7 m : S. Ambrosii, episcopi et Ecclesiae doctoris
224
+ 8 s : IN CONCEPTIONE IMMACULATA BEATAE MARIAE VIRGINIS
225
+ 9 : S. Ioannis Didaci Cuahtlatoatzin [*]
226
+ 11 : S. Damasi I, papae
227
+ 12 : Beatae Mariae Virginis de Guadalupe [*]
228
+ 13 m R : S. Luciae, virginis et martyris
229
+ 14 m : S. Ioannis a Cruce, presbyteri et Ecclesiae doctoris
230
+ 21 : S. Petri Canisii, presbyteri et Ecclesiae doctoris
231
+ 23 : S. Ioannis de Kęty, presbyteri
232
+ 26 f R : S. Stephani, protomartyris
233
+ 27 f : S. Ioannis, apostoli et evangelistae
234
+ 28 f R : Ss. Innocentium, martyrum
235
+ 29 R : S. Thomae Becket, episcopi et martyris
236
+ 31 : S. Silvestri I, papae
@@ -2,7 +2,9 @@
2
2
  version
3
3
  i18n_setup
4
4
  rank
5
+ enum
5
6
  enums
7
+ data
6
8
  calendar
7
9
  temporale
8
10
  sanctorale
@@ -33,7 +33,7 @@ module CalendariumRomanum
33
33
 
34
34
  elsif args.size == 1 then
35
35
  a = args.first
36
- unless a.is_a? Date or a.is_a? DateTime
36
+ unless a.is_a? Date
37
37
  raise ex
38
38
  end
39
39
  return a
@@ -75,6 +75,9 @@ module CalendariumRomanum
75
75
  return year == obj.year
76
76
  end
77
77
 
78
+ # accepts date information represented as
79
+ # Date, DateTime, or two to three integers
80
+ # (month - day or year - month - day);
78
81
  # returns filled Day for the specified day
79
82
  def day(*args)
80
83
  if args.size == 2
@@ -0,0 +1,100 @@
1
+ require 'thor'
2
+
3
+ module CalendariumRomanum
4
+
5
+ class CLI < Thor
6
+ include CalendariumRomanum::Util
7
+
8
+ desc 'query 2007-06-05', 'show calendar information for a specified date'
9
+ option :calendar, default: 'universal-en', aliases: :c
10
+ option :locale, default: 'en', aliases: :l
11
+ def query(date_str=nil)
12
+ I18n.locale = options[:locale]
13
+
14
+ data_file = Data[options[:calendar]]
15
+ if data_file.nil?
16
+ STDERR.puts 'Invalid calendar. See subcommand `calendars` for valid options.'
17
+ exit 1
18
+ end
19
+ sanctorale = data_file.load
20
+
21
+ date =
22
+ if date_str
23
+ begin
24
+ Date.parse(date_str)
25
+ rescue ArgumentError
26
+ STDERR.puts 'Invalid date.'
27
+ exit 1
28
+ end
29
+ else
30
+ Date.today
31
+ end
32
+ calendar = Calendar.for_day(date, sanctorale)
33
+ day = calendar.day date
34
+
35
+ puts date
36
+ puts "season: #{day.season}"
37
+ puts
38
+
39
+ rank_length = day.celebrations.collect {|c| c.rank.short_desc.size }.max
40
+ day.celebrations.each do |c|
41
+ print c.rank.short_desc.rjust(rank_length)
42
+ print ' : '
43
+ puts c.title
44
+ end
45
+ end
46
+
47
+ desc 'calendars', 'lists calendars available for querying'
48
+ def calendars
49
+ Data.each {|c| puts c.siglum }
50
+ end
51
+
52
+ desc 'errors FILE1, ...', 'finds errors in sanctorale data files'
53
+ def errors(*files)
54
+ loader = SanctoraleLoader.new
55
+ files.each do |path|
56
+ s = Sanctorale.new
57
+ loader.load_from_file path, s
58
+ end
59
+ end
60
+
61
+ desc 'cmp FILE1, FILE2', 'detect differences in rank and colour of corresponding celebrations'
62
+ def cmp(a, b)
63
+ loader = SanctoraleLoader.new
64
+ sanctorales = []
65
+
66
+ [a, b].each do |source|
67
+ s = Sanctorale.new
68
+ loader.load_from_file source, s
69
+ sanctorales << s
70
+ end
71
+
72
+ # a leap year must be chosen in order to iterate over
73
+ # all possible days of a Sanctorale
74
+ Year.new(1990).each_day do |d|
75
+ celebs = sanctorales.collect {|s| s.get d.month, d.day }
76
+ if celebs.find {|cc| cc.nil? }
77
+ next
78
+ end
79
+
80
+ celebs[0].each_index do |i|
81
+ if i >= celebs[1].size
82
+ break
83
+ end
84
+
85
+ ca = celebs[0][i]
86
+ cb = celebs[1][i]
87
+
88
+ _print_cel = Proc.new {|c| puts "#{c.rank.priority} #{c.colour} | #{c.title}" }
89
+
90
+ if ca.rank != cb.rank || ca.colour != cb.colour
91
+ puts "#{d.month}/#{d.day}"
92
+ _print_cel.call ca
93
+ _print_cel.call cb
94
+ puts
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,41 @@
1
+ module CalendariumRomanum
2
+ # allows easy access to the bundled data files
3
+ class Data < Enum
4
+
5
+ class SanctoraleFile
6
+ def initialize(base_name)
7
+ @siglum = base_name.sub(/\.txt$/, '')
8
+ @path = File.expand_path('../../data/' + base_name, File.dirname(__FILE__))
9
+ end
10
+
11
+ attr_reader :siglum, :path
12
+
13
+ def load
14
+ SanctoraleLoader.new.load_from_file(@path)
15
+ end
16
+ end
17
+
18
+ values(index_by: :siglum) do
19
+ # only calendars of broader interest have constants defined
20
+ [
21
+ GENERAL_ROMAN_LATIN = SanctoraleFile.new('universal-la.txt'),
22
+ GENERAL_ROMAN_ENGLISH = SanctoraleFile.new('universal-en.txt'),
23
+ GENERAL_ROMAN_ITALIAN = SanctoraleFile.new('universal-it.txt'),
24
+ CZECH = SanctoraleFile.new('czech-cs.txt')
25
+ ] \
26
+ +
27
+ %w(
28
+ czech-brno-cs.txt
29
+ czech-budejovice-cs.txt
30
+ czech-cechy-cs.txt
31
+ czech-hradec-cs.txt
32
+ czech-litomerice-cs.txt
33
+ czech-morava-cs.txt
34
+ czech-olomouc-cs.txt
35
+ czech-ostrava-cs.txt
36
+ czech-plzen-cs.txt
37
+ czech-praha-cs.txt
38
+ ).collect {|basename| SanctoraleFile.new(basename) }
39
+ end
40
+ end
41
+ end
@@ -51,7 +51,13 @@ module CalendariumRomanum
51
51
  attr_reader :rank
52
52
  def_delegators :@rank, :solemnity?, :feast?, :memorial?
53
53
 
54
- attr_reader :title
54
+ def title
55
+ if @title.respond_to? :call
56
+ @title.call
57
+ else
58
+ @title
59
+ end
60
+ end
55
61
 
56
62
  attr_reader :colour
57
63
  alias_method :color, :colour
@@ -0,0 +1,33 @@
1
+ require 'forwardable'
2
+
3
+ module CalendariumRomanum
4
+ # Utility class for definition of enumerated "types"
5
+ class Enum
6
+ class << self
7
+ extend Forwardable
8
+
9
+ def values(index_by: nil, &blk)
10
+ defined?(@indexed) && raise(RuntimeError.new('initialized repeatedly'))
11
+
12
+ @indexed = {}
13
+ @all = yield.freeze
14
+
15
+ @all.each_with_index do |val, i|
16
+ val.freeze
17
+
18
+ key = index_by ? val.public_send(index_by) : i
19
+ @indexed[key] = val
20
+ end
21
+
22
+ @indexed.freeze
23
+ end
24
+
25
+ def all
26
+ @all
27
+ end
28
+
29
+ def_delegators :@all, :each
30
+ def_delegators :@indexed, :[]
31
+ end
32
+ end
33
+ end