def prepare_ymap_hash(rdo)
      res = {
          all: {
              coords: [],
              props: [],
              setts: []
          }
      }

      rdo.each do |region|
        region.dealers.each do |dealer|
          dealer.offices.each do |office|
            res[region.id] = { coords:[], props:[], setts:[] } if res[region.id].nil?

            # координаты точки (это массив двух точек)
            gps = office.gps_arr

            # соберём свойства офиса для балуна
            props = {
                balloonContentHeader: t = "#{office.title} (#{dealer.title})",
                balloonContentBody:   b = "#{office.addr}<br>#{office.tel}<br>GPS: #{office.gps}",
                hintContent:          "#{t}<br>#{b}",
                id:                   office.id
            }

            # свойства метки - цвет
            setts = {
                preset: "islands##{prepare_dealer_preset(dealer)}"
            }

            # фиксируем в хэше региона
            res[region.id][:coords] << gps
            res[region.id][:props] << props
            res[region.id][:setts] << setts

            # фиксируем в all-хэше
            res[:all][:coords] << gps
            res[:all][:props] << props
            res[:all][:setts] << setts

          end
        # для удобства в js: зафиксируем кол-во офисов региона
        res[region.id][:count] = res[region.id][:coords].size
        end
      end

      # для удобства в js: зафиксируем кол-во всех офисов
      res[:all][:count] = res[:all][:coords].size

      res
    end
def prepare_ymap_hash(rdo)
      res = {
          all: {
              coords: [],
              props: [],
              setts: []
          }
      }

      rdo.each do |region|
        region.dealers.each do |dealer|
          dealer.offices.each do |office|
            res[region.id] = { coords:[], props:[], setts:[] } if res[region.id].nil?

            # координаты точки (это массив двух точек)
            gps = office.gps_arr

            # соберём свойства офиса для балуна
            props = {
                balloonContentHeader: t = "#{office.title} (#{dealer.title})",
                balloonContentBody:   b = "#{office.addr}<br>#{office.tel}<br>GPS: #{office.gps}",
                hintContent:          "#{t}<br>#{b}",
                id:                   office.id
            }

            # свойства метки - цвет
            setts = {
                preset: "islands##{prepare_dealer_preset(dealer)}"
            }

            # фиксируем в хэше региона
            res[region.id][:coords] << gps
            res[region.id][:props] << props
            res[region.id][:setts] << setts

            # фиксируем в all-хэше
            res[:all][:coords] << gps
            res[:all][:props] << props
            res[:all][:setts] << setts

          end
        # для удобства в js: зафиксируем кол-во офисов региона
        res[region.id][:count] = res[region.id][:coords].size
        end
      end

      # для удобства в js: зафиксируем кол-во всех офисов
      res[:all][:count] = res[:all][:coords].size

      res
    end
специально для яваскрипта, работающего с yandex картой,
 на основе +rdo+ собираем координаты всех офисов
 в хеше вида:

 {
   all: {          - здесь собираем все офисы всех регионов (для лаконичности js)
       coords: [], - массив двух координат, например: [12.345, 12.345]
       props: [],  - свойства объекта (офиса): тот текст, который выводится в balloon-e
       setts: []   - свойства метки (цвет)
   }
   <region_id>: [  - данные офисов разложены по регионам
       coords: [],
       props: [],
       setts: []
   ]
 }

 noinspection RubyResolve