Class: MODL::Parser::KeylistExtractor
- Inherits:
-
Object
- Object
- MODL::Parser::KeylistExtractor
- Defined in:
- lib/modl/parser/modl_keylist.rb
Overview
Extracts an index definition from a ParsedPair
Class Method Summary collapse
Class Method Details
.extract(pair, item) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/modl/parser/modl_keylist.rb', line 5 def self.extract(pair, item) # the item must be an array of arrays pair.key_lists = [] last_keylist_len = 0 if item.is_a?(Parsed::ParsedValueItem) && item.value.is_a?(Parsed::ParsedValue) && item.value.array item.value.array.abstractArrayItems.each do |avi| key_list = [] avi.arrayValueItem.array.abstractArrayItems.each do |key| key_list << key.arrayValueItem.primitive.string.string if key.arrayValueItem.primitive.string key_list << key.arrayValueItem.primitive.number.num if key.arrayValueItem.primitive.number end if key_list.length > last_keylist_len last_keylist_len = key_list.length else raise InterpreterError, 'Error: Key lists in *assign are not in ascending order of list length: ' + key_list.to_s end pair.key_lists << key_list end elsif item.is_a?(Parsed::ParsedArray) item.abstractArrayItems.each do |avi| key_list = [] avi.arrayValueItem.array.abstractArrayItems.each do |key| key_list << key.arrayValueItem.primitive.string.string if key.arrayValueItem.primitive.string key_list << key.arrayValueItem.primitive.number.num if key.arrayValueItem.primitive.number end if key_list.length > last_keylist_len last_keylist_len = key_list.length else raise InterpreterError, 'Error: Key lists in *assign are not in ascending order of list length.' end pair.key_lists << key_list end else raise InterpreterError, 'Array of arrays expected for: ' + pair.key end end |