Ruby. Интерполяция строк Хешом

Есть пример форматной строки:

"Mozilla/5.0 (%<system[ua_platform].to_s>s;"

И несколько хешей, данные из которых надо вставить по разным ключам в строку. Например, system, который может хранить под разными ключами nil. Как сделать так, чтоб не передавать для каждого ключа в строке нужные ему данные, т.к. их очень много и они могут меняться, как и сама строка, а передать один хеш и все заработало.

Например, в Python можно сделать так:

"({system[ua_platform]}; rv:{app[build_version]})".format(system=system, app=app)

Где system и app - словари.


Ответы (1 шт):

Автор решения: Василиса

Можно обернуть строку с интерполяцией в proc и вызывать тогда, когда есть все нужные данные

string = proc { |system| "Mozilla/5.0 #{system[ua_platform]}"}
system = { win: 'Windows', mac: 'MacOS' }
ua_platform = :mac

string.call(system)
=> "Mozilla/5.0 MacOS"
→ Ссылка