Class: Bukovina::Parsers::Service
- Inherits:
-
Object
- Object
- Bukovina::Parsers::Service
- 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
-
#errors ⇒ Object
readonly
Returns the value of attribute errors.
Instance Method Summary collapse
- #collect_in_array(array) ⇒ Object
- #collect_in_hash(hash) ⇒ Object
- #collect_value(value, key, paths) ⇒ Object
- #parse(line, options = {}) ⇒ Object
Instance Attribute Details
#errors ⇒ Object (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, = {} res = if line.is_a?( Hash ) paths = collect_paths( line ) parse_paths( paths, ) else @errors << Parsers::BukovinaInvalidClass.new( "Invalid class " + "#{line.class} for Name line '#{line}'" ) ; end @errors.empty? && res || nil ; end |