Как преобразовать символы в строки (т. Е. В начало полосы :) ruby ​​to_yaml - PullRequest
0 голосов
/ 11 января 2019

Пытаюсь удалить ведущий : из моего вывода YAML. Вот код и то, что я сделал ниже:

модель / attribution_channel.rb

DEFAULT_BONUS_CONFIG =  {
  sign_up: {
    currency: 'ngn',
    type: 'flat',
    amount: 1000
  },
  visit: {
    currency: 'ngn',
    type: 'flat',
    amount: 5
  }
}

просмотр / form.slim.html

AttributionChannel::DEFAULT_BONUS_CONFIG.to_yaml

Выход:

Output

Чтобы удалить разделитель YAML --- и Leading: в ключах из моего вывода, вот что я сделал:

AttributionChannel::DEFAULT_BONUS_CONFIG.to_yaml.gsub("---\n", '').sub(":", '')

.. но часть .sub(":", '') удалила только : первого ведущего :.

Как мне удалить ведущий : с моего выхода YAML? Любая помощь приветствуется? Вот что я хочу ниже:

sign_up:
  currency: ngn
  type: flat
  amount: 1000
visit:
  currency: ngn
  type: flat
  amount: 5

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Вам нужно иметь ключи в виде строк, чтобы пропустить : генерацию

require 'active_support/core_ext/hash/keys'
require 'yaml'

DEFAULT_BONUS_CONFIG.deep_stringify_keys.to_yaml.gsub("---\n", '')

 => "sign_up:\n  currency: ngn\n  type: flat\n  amount: 1000\nvisit:\n  currency: ngn\n  type: flat\n  amount: 5\n"
0 голосов
/ 11 января 2019

Вы можете преобразовать ключи хеша в строки перед генерацией YAML. Приведенный ниже код проходит через хеш, рекурсивно преобразуя каждый ключ в хеш и систематизируя каждое значение, если оно является хешем (обратите внимание, что оно не подготовлено для циклических зависимостей в хэше).

def stringify(hash)
  hash.map{|k, v| [k.to_s, v.is_a?(Hash) ? stringify(v) : v] }.to_h
end  

puts stringify(DEFAULT_BONUS_CONFIG).to_yaml

---
sign_up:
  currency: ngn
  type: flat
  amount: 1000
visit:
  currency: ngn
  type: flat
  amount: 5

РЕДАКТИРОВАТЬ: Относительно --- в начале см. этот ответ .

...