Class: Bukovina::Parsers::Service

Inherits:
Object
  • Object
show all
Defined in:
lib/bukovina/parsers/service.rb

Constant Summary collapse

Parsers =
Bukovina::Parsers
VALID_PATHS =
[
   'вечерня.возвашна',
   'вечерня.отпустительно.тропарь',
   'вечерня.отпустительно.молитва',
   'вечерня.отпустительно.богородичен',
   'евангелие',
   'апостол',
   'вечерня.лития.стихира.0',
   'вечерня.лития.стихира',
   'вечерня.стиховен.стихира',
   'утреня.кафисма.0.седален',
   'утреня.кафисма.седален',
   'утреня.полиелей.седален',
   'утреня.величание',
   'утреня.канон.кондак',
   'утреня.канон.икос',
   'утреня.канон.седален',
   'утреня.канон.глас',
   'утреня.канон.песнь.0',
   'утреня.канон.песнь.0.запев',
   'утреня.канон.песнь.0.запев.ссылка',
   'утреня.канон.песнь.0.тропарь.0',
   'утреня.канон.песнь.0.богородичен',
   'описание',
   'источник',
   'автор',
]
KINDS =
{
   'тропарь' => 'Troparion',
   'кондак' => 'Kontakion',
   'седален' => 'SessionalHymn',
   'светилен' => 'Exapostilarion',
   'стихира' => 'Stichira', #Praises (хвалитна), Ipakoi, степенна?, Resurrection, литийны, восточны
   'икос' => 'Ikos', #без подобна
   'ирмос' => 'Irmos',
   'величание' => 'Magnification', # и без гласа
   'молитва' => 'Prayer',
   'возвашна' => 'CryStichira',
   'богородичен' => 'Troparion',
}
EXTEND_KINDS =
{
   'Stichira' => {
      /стиховен/ => 'Apostichus',
      /лития/ => 'Stichiron',
   },
   'SessionalHymn' => {
      /кафисма/ => 'Kathismion',
      /канон/ => 'Kanonion',
      /полиелей/ => 'Polileosion',
   }
}
PROPERTIES =
{
   'глас' => :tone,
   'текст' => :text,
   'подобен' => :prosomeion_title,
   'крат' => :title, #нужно для подобна (и ссылки)
   'кратко' => :title, #нужно для подобна (и ссылки)
   'источник' => :source,
   'ссылка' => :ref_title,
   'автор' => :author,
   'апостол' => :apostle,
   'евангелие' => :gospel,
   'описание' => :description,
}
TARGETS =

TODO проверить всякие левые свойства и синтаксис, напр. сдела кратко ложным

{
   /богородичен/ => ['^Мария Богородица']
}
MATCHERS =
[
/(?<kind>#{KINDS.keys.join('|')})\.(?<index>\d+)\.
 (?<property>#{PROPERTIES.keys.join('|')})/x,
/(?<kind>#{KINDS.keys.join('|')})\.
 (?<property>#{PROPERTIES.keys.join('|')})/x,
/(?<kind>#{KINDS.keys.join('|')})\.(?<index>\d+)/,
/(?<kind>#{KINDS.keys.join('|')})/,
/(?<property>#{PROPERTIES.keys.join('|')})/ ]

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#errorsObject (readonly)

Returns the value of attribute errors.



2
3
4
# File 'lib/bukovina/parsers/service.rb', line 2

def errors
  @errors
end

Instance Method Details

#collect_in_array(array) ⇒ Object



197
198
199
200
201
202
# File 'lib/bukovina/parsers/service.rb', line 197

def collect_in_array array
paths = {}
array.each.with_index do |value, index|
   collect_value value, index + 1, paths ;end

paths ;end

#collect_in_hash(hash) ⇒ Object



204
205
206
207
208
209
# File 'lib/bukovina/parsers/service.rb', line 204

def collect_in_hash hash
paths = {}
hash.each do |key, value|
   collect_value value, key, paths ;end

paths ;end

#collect_value(value, key, paths) ⇒ Object



184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/bukovina/parsers/service.rb', line 184

def collect_value value, key, paths
         case value
         when Hash
            up = collect_in_hash( value )
         when Array
            up = collect_in_array( value )
         else
            paths[ key.to_s ] = value ;end

         if up
            up.each do |uppath, upvalue|
paths[ "#{key}.#{uppath}" ] = upvalue ;end ;end ;end

#parse(line, options = {}) ⇒ Object



90
91
92
93
94
95
96
97
98
99
# File 'lib/bukovina/parsers/service.rb', line 90

def parse line, options = {}
res =
if line.is_a?( Hash )
   paths = collect_paths( line )
   parse_paths( paths, options )
else
   @errors << Parsers::BukovinaInvalidClass.new( "Invalid class " +
      "#{line.class} for Name line '#{line}'" ) ; end

@errors.empty? && res || nil ; end