Манипулируем объектами

Работа с переменными

Как вы уже знаете, переменные контексто-независимы и поэтому их значения сохраняются на протяжении всей работы диггера. Этот факт может быть использован для объединения разрозненных по разным документам данных в единый объект. Для этого вы парсите один документ, сохраняете данные в переменный, а при парсинге другого документа - читаете значения переменных в регистр и записываете их в объект. Также переменные часто используются для подстановки значений в запросы или CSS селекторы.

Команда variable_set позволяет установить значение переменной. Она может быть использована в любом контексте, но если нотация команды подразумевает использование значения регистра - то такая нотация может быть использована только в блоковом контексте.

Обратите внимание!
Если в регистре пустое значение, и вы пытаетесь записать это пустое значение в переменную, команда будет проигнорирована, это сделано для того, чтобы отрабатывать случаи когда нужно сохранять предыдущее значение поля, если поле отсутствует в последующих циклах.
Для стирания переменной используйте команду variable_clear.

Ниже приведены различные примеры записи значений в переменные:

              # ПЕРЕХОДИМ В БЛОКОВЫЙ КОНТЕКСТ
- find:
    path: .somepath
    do:
    # ПАРСИМ КОНТЕНТ ИЗ БЛОКА И ЗАПИСЫВАЕМ РЕЗУЛЬТАТ В РЕГИСТР
    - parse

    # ЗАПИСЫВАЕМ ЗНАЧЕНИЕ РЕГИСТРА В ПЕРЕМЕННУЮ С ИМЕНЕМ `somevar`
    - variable_set: somevar
              
              # ПЕРЕХОДИМ В БЛОК
- find:
    path: .somepath
    do:
    # ПАРСИМ КОНТЕНТ ИЗ БЛОКА И ЗАПИСЫВАЕМ РЕЗУЛЬТАТ В РЕГИСТР
    - parse

    # ДОПУСТИМ В РЕГИСТРЕ СЕЙЧАС ЗНАЧЕНИЕ: 123
    # ЗАПИСЫВАЕМ ЗНАЧЕНИЕ РЕГИСТРА В ПЕРЕМЕННУЮ С ИМЕНЕМ `somevar`
    - variable_set: somevar

# ПЕРЕХОДИМ В ДРУГОЙ БЛОК
- find:
    path: .anotherpath
    do:
    # ПАРСИМ КОНТЕНТ ИЗ БЛОКА И ЗАПИСЫВАЕМ РЕЗУЛЬТАТ В РЕГИСТР
    - parse

    # ЗАПИСЫВАЕМ ЗНАЧЕНИЕ РЕГИСТРА В ПЕРЕМЕННУЮ
    # ИМЯ КОТОРОЙ СКЛАДЫВАЕТСЯ ИЗ `another_` И ЗНАЧЕНИЯ ПЕРЕМЕННОЙ `somevar`
    - variable_set: another_<%somevar%>
    # ИМЯ НОВОЙ ПЕРЕМЕННОЙ БУДЕТ `another_123`
              
              - walk:
    to: http://www.somesite.com/
    do:
    # УСТАНАВЛИВАЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ
    # ЕСЛИ ВЫ НЕ НАХОДИТЕСЬ В БЛОКОВОМ КОНТЕКСТЕ, ТО ДОПУСТИМА ТОЛЬКО ТАКАЯ НОТАЦИЯ ЗАПИСИ КОМАНДЫ!
    - variable_set:
        field: somevar
        value: 123
    # В ЭТО НОТАЦИИ ТАКЖЕ МОЖНО ИСПОЛЬЗВАТЬ ПЕРЕМЕННЫЕ В ПАРАМЕТРАХ `field` И `value`

    # ЭТОТ КОД ЗАДАСТ ЗНАЧЕНИЕ "123" ПЕРЕМЕННОЙ С ИМЕНЕМ `another_123`
    - variable_set:
        field: another_<%somevar%>
        value: <%somevar%>
              

Команда variable_get используется для записи значения переменной в регистр.
Команды variable_append и variable_prepend для добавления содержимого переменной в конец или начало регистра.
Для очистки содержимого переменной используется команда variable_clear. Она полезна при итерации по блокам с нестабильной структурой, когда какой-то блок может отсутствовать и команда на запись переменной не будет выполнена, в этом случае в переменной останется старое значение, которое можно будет записать в объект. Если вам требуется избежать подобного подхода, вы можете производить очистку содержимого переменной этой командой.

              # ПЕРЕХОДИМ В БЛОК
- find:
    path: .somepath
    do:
    # ЗАПОЛНЯЕМ РЕГИСТР ЗНАЧЕНИЕМ ПЕРЕМЕННОЙ `somevar`
    - variable_get: somevar
              
              # ПРЕДУСТАНАВЛИВАЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ `somevar`
- variable_set:
    field: somevar
    value: 123

# ПРЕДУСТАНАВЛИВАЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ `another_123`
- variable_set:
    field: another_123
    value: 456

# ПЕРЕХОДИМ В БЛОК
- find:
    path: .somepath
    do:
    # ЗАПОЛНЯЕМ РЕГИСТР ЗНАЧЕНИЕМ ПЕРЕМЕННОЙ `another_123`
    - variable_get: another_<%somevar%>

# В РЕГИСТРЕ ПОЛУЧАЕМ ЗНАЧЕНИЕ: 456
              
              # ПРЕДУСТАНАВЛИВАЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ `somevar`
- variable_set:
    field: somevar
    value: 123

# ПЕРЕХОДИМ В БЛОК
- find:
    path: .somepath
    do:
    # ПРЕДУСТАНАВЛИВАЕМ ЗНАЧЕНИЕ РЕГИСТР В `data`
    - register_set: data

    # ДОБАВЛЯЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ `somevar` В КОНЕЦ РЕГИСТРА,
    # ИСПОЛЬЗУЯ СТРОКОВОЕ ЗНАЧЕНИЕ " - " ДЛЯ СОЕДИНЕНИЯ ЗНАЧЕНИЙ
    - variable_append:
        field: somevar
        joinby: " - "
    # В РЕГИСТРЕ СЕЙЧАС: data - 123

    # ДОБАВЛЯЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ `somevar` В НАЧАЛО РЕГИСТРА,
    # ИСПОЛЬЗУЯ СТРОКОВОЕ ЗНАЧЕНИЕ "" ДЛЯ СОЕДИНЕНИЯ ЗНАЧЕНИЙ
    - variable_prepend:
        field: somevar
        joinby: ""
    # В РЕГИСТРЕ СЕЙЧАС: 123data - 123

    # СТИРАЕМ ПЕРЕМЕННУЮ `somevar`
    - variable_clear: somevar
              

Далее мы расскажем о том как использовать аргументы.